百度搜索到自己的网站,pc端ui设计,设计公司标志设计,做网站优化找谁1. MGN Loss
MGN采用三元损失(Triplet Loss)。
三元损失主要用于ReID算法#xff0c;目的是帮助网络学习到一个好的Embedding信息。之所以称之为三元损失#xff0c;主要原因在于在训练中#xff0c;参与计算Loss的分别有Anchor、Positive和Negative三方。
2. Triplet Lo…1. MGN Loss
MGN采用三元损失(Triplet Loss)。
三元损失主要用于ReID算法目的是帮助网络学习到一个好的Embedding信息。之所以称之为三元损失主要原因在于在训练中参与计算Loss的分别有Anchor、Positive和Negative三方。
2. Triplet Loss原理
Triplet Loss的任务是帮助网络训练出来一个能够准确区分不同类Embedding信息的网络。如图所示Anchor与Positive属于同一类与Negatine属于不同类。我们的目的就是学习一个网络该网络能够将Anchor与Positive的距离拉近同时将与Negative的距离推远。 记Anchor与Positive的距离为d(a, p)Anchor与Negative的距离为d(a, n)。我们尽可能地希望L d(a, p) - d(a, n)尽可能小。
更具体的我们希望Lmax(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)d(a, p) margin,这种情况下我们也认为需要进行优化处理。
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计算代码。 输入inputs的shape为shape(batch_size, feat_dim)其中feat_dim为特征维数。第10行是先给batch中的各图片执行平方计算并将平方和扩充为shape(batch_size, batch_size)。
计算距离
第11行是计算一个batch中不同图片的特征求和。即实现如下操作。 第13行和14行执行计算平方差开方操作和阶段操作名副其实的欧式距离了。 搜索Positive和Negative
从第16行开始我们就需要搜索Positive和Negative样本了。
第16行明显是在针对计算每一张训练的image找与其属于同一类(同一个ID)的目标。
第18、19、20行就是遍历每一张训练图片将自身作为Anchor找到与其同类(Positive)的最远距离找到与其不同类(Negative)的最近距离。
最后式计算一个MarginRankingLoss。至于MarginRankingLoss大家可以取搜一下讲解随处可见此处不做赘述了。其Loss计算表达式如下。 其中y取值为1或-1。