ReID网络:MGN网络(4) - Loss计算

1. MGN Loss

MGN采用三元损失(Triplet Loss)。

三元损失主要用于ReID算法,目的是帮助网络学习到一个好的Embedding信息。之所以称之为三元损失,主要原因在于在训练中,参与计算Loss的分别有Anchor、Positive和Negative三方。

2. Triplet Loss原理

Triplet Loss的任务是帮助网络训练出来一个能够准确区分不同类Embedding信息的网络。如图所示,Anchor与Positive属于同一类,与Negatine属于不同类。我们的目的就是学习一个网络,该网络能够将Anchor与Positive的距离拉近,同时将与Negative的距离推远

ReID网络:MGN网络(4) - Loss计算_第1张图片

记Anchor与Positive的距离为d(a, p),Anchor与Negative的距离为d(a, n)。我们尽可能地希望L = d(a, p) - d(a, n)尽可能小。

更具体的,我们希望L=max(d(a, p) - d(a, n)+margin, 0)尽可能小,但是取非0损失。margin为一个大于0的常数。

计算Loss的时候,通常会遇到3种情况。

eazy triplet: d(a, p) +margin< d(a, n),这种情况属于理想状态,不需要计算损失并优化。很好理解,A与P的距离加上Margin还要小于A与N的距离,这样自然是不需要进一步优化的。

hard triplet: d(a, n) < d(a, p),即有没有margin作为隔离缓冲区,A与N的距离都小于A与P的距离,此时产生损失,用于反向优化网络。

semi-hard triplet: d(a, p) < d(a, n)

3. Triplet公式推导

三元损失主要是用于帮助学习更好的Embedding信息,至于Embedding,大家可以认为是对应于某一个感兴趣内容的特征序列信息。

前面讲到,我们计算Triplet Loss时,会用到Anchor、Positive和Negative,此处Anchor和Positives属于同一类,Anchor和Negatives不属于同一类。对于特征损失,直观的,我们需要计算特征距离D(Anchor, Positives)和D(Anchor, Negatives)。三元损失使得Anchor和同类样本间(Positives)的距离最小化,同时使得Anchor和不同类样本(Negatives)的距离最大化。

三元损失是以一个Anchor为参照,的与其同类(相同ID,称为Positive)的样本之间距离最小化,同时与其不同类(不同ID,称为Negative)样本之间的距离最大化。因此,Triplet-Loss的数学表达式如下。

进一步,损失函数描述如下。

对margin的理解

Margin本身并不神秘,只是添加了作为一个缓冲地带。保证A与P的距离更小,A与N的距离更大。同时,Margin的引入还解决了D(A, P)与D(A, N)相同的问题。如前面所述,损失可以表示为

如果不添加Margin,就转换成了L = max(d(a, p) - d(a, n), 0)。

搜索positive和negative样本

那么,我们如何搜索那些事positive,哪些是negative样本呢?

首先我们需要确认的是,我们对于训练数据的读入,以遵循一定的规则的。比如我们需要导入4个不同ID的Person, 同时每一个ID都取4张图像。也就是说,我们一共取16幅图像用于训练,包含4个ID,及四个不同的Person,每个ID(Person)包含4幅不同时空的图像。如此一来,我们在一个训练iteration中,用于训练的既有Positive,又有Negative。

4. WGN中的Triplet Loss

计算Triplet Loss时,首先需要计算出每一个特征与其他特征之间的欧氏距离。如图所示,为WGN提供的Triplet Loss计算代码。

ReID网络:MGN网络(4) - Loss计算_第2张图片

输入inputs的shape为shape(batch_size, feat_dim),其中feat_dim为特征维数。第10行是先给batch中的各图片执行平方计算,并将平方和扩充为shape(batch_size, batch_size)。

计算距离

第11行是计算一个batch中不同图片的特征求和。即实现如下操作。

ReID网络:MGN网络(4) - Loss计算_第3张图片

第13行和14行执行计算平方差,开方操作和阶段操作,名副其实的欧式距离了。

ReID网络:MGN网络(4) - Loss计算_第4张图片

搜索Positive和Negative

从第16行开始,我们就需要搜索Positive和Negative样本了。

第16行明显是在针对计算每一张训练的image找与其属于同一类(同一个ID)的目标。

第18、19、20行就是遍历每一张训练图片,将自身作为Anchor,找到与其同类(Positive)的最远距离,找到与其不同类(Negative)的最近距离。

最后式计算一个MarginRankingLoss。至于MarginRankingLoss,大家可以取搜一下,讲解随处可见,此处不做赘述了。其Loss计算表达式如下。

其中,y取值为1或-1。

你可能感兴趣的:(ReID,计算机视觉,神经网络,ReID,cnn)