一.场景介绍

最近在研究一个场景:图片质量评分,给一张图片一个预测的分数。

 

里面提到了用 EMD(Earth Mover’s Distance)算法来评估两张图片之间的分布距离。下面主要讲解下EMD算法的原理。

 

 

二.EMD算法

 

1.起源

 

EMD最早由Yossi Rubner?在2000年用在图像检索上提出来(论文:The Earth Mover's Distance as a Metric for Image Retrieval),主要是衡量两个分布之间的距离。给定一张图片,召回跟这张图片最相似的图片。

 

2.货物运输优化问题

 

EMD是基于解决货物运输问题的,《The Earth Mover?s Distance as a Metric for Image Retrieval》这篇论文用货物运输来解释这个算法。这个例子是:假设有几个供应商,给几个销售商提供货物。当然每个供应商只能提供它本身有的货物量,对于供应商和销售商,我们要找到一个方式从供应商中运输货物给销售商来满足销售商的需求,因为运输的工程中是要考虑运费的,所以我们需要找到运输的方法,这个方法能满足销售商的需求,同时产生的运输费用最低。

emd分解后信号如何合并成原信号_权重

 

来表示供应商的情况,一共有m个供应商,P1 可以这么理解,标识的是P1供应商(在图像中标识图像的一个特征),Wp1表示的是P1供应商有的货物量(在图像表示的是图像在P1特征的权重)。

 

emd分解后信号如何合并成原信号_权重_02

 

表示销售商的情况,一共有n个销售商,q1可以这么理解,表示的是名字为q1的销售商(在图像中标识的图像的其中一个特征),Wq1表示的是q1销售商需要的货物量。

这里需要注意的是供应商的数量m和销售商的数量n可以是不同的。

 

 

定义D矩阵表示供应商到销售商之间的距离,dij:表示供应商 i 到销售商 j 的距离。

 

定于F矩阵表示运输成本,fij:表示从供应商 i 运输获取到销售商 j 的运输货物量。

 

dij * fij:表示的是 供应商 i 到销售商 j 的工作量。

 

问题转化为我们希望总的工作量是最小的:

 

emd分解后信号如何合并成原信号_人工智能_03

其中dij是固定的,那么fij 就是变量,表示的是每次选择多少的货物量供应商i供应给j销售商,整个过程需要满足如下的4个约束:

 

 

emd分解后信号如何合并成原信号_emd分解后信号如何合并成原信号_04

emd分解后信号如何合并成原信号_python_05

从供应商i 运出去的货物量不能超过 供应商本身以后的库存货物量。

 

emd分解后信号如何合并成原信号_权重_06

 

提供给销售商j 的货物量不能超过它要求的货物量,销售商j的仓库最大只能容纳Wqj的货物,所以给它的货物量不能超过它的需求量。

 

emd分解后信号如何合并成原信号_Image_07

 

从供应商运出去的所有货物量,应该是供应商的货物量或者销售商的需求量,两者中最小的一个。意思是,供应商最多只能提供 a的货物量,销售商只需要b的货物量,那肯定运出去的货物量是a,b中的最小的一个。

 

假设我们找到了最佳的fij ,我们需要EMD的衡量不受到总运输量的影响,那么每次运输的时候,除于总的运输量就好了。

 

 

emd分解后信号如何合并成原信号_人工智能_08

 

3.最终的解答

 

根据上面的描述,那么根据4个约束条件,求解最佳的 fij ,使得在约束条件下,EMD(P,Q)最小。如果是用神经网络来求解的话,就相当于求解每个节点之间的权重,每次迭代更新权重,使得 cost function最小。

 

 

 

 

emd分解后信号如何合并成原信号_python_09

 

 

 

 

 参考:

1.The Earth Mover's Distance as a Metric for Image Retrieval