『论文笔记』基于度量学习的行人重识别方法中损失函数总结!

基于度量学习的行人重识别方法中损失函数总结!

一、对比损失(Contrasive loss)

  • 对比损失(Contrasive loss)用于训练孪生网络(Siamese network)[3,4,5][3,4,5]。孪生网络的输入为一对(两张)图片 IaI_aIbI_b,这两张图片可以为同一行人,也可以为不同行人。 每一对训练图片都有一个标签 yy, 其中 y=1y = 1 表示两张图片属于同一个行人(正样本对),反之 y=0y = 0 表示它们属于不同行人(负样本对)。之后, 对比损失函数写作:

Lc=ydIa,Ib2+(1y)max(αdIa,Ib,0)2(1) L_{c}=y d_{I_{a}, I_{b}}^{2}+(1-y)\max (\alpha-d_{I_{a}, I_{b}}, 0)^{2}\tag{1}

  • 其中:α\alpha 是根据实际需求设置的训练阈值参数,dIa,Ibd_{I_{a}, I_{b}} 代表两个样本对应的特征的欧氏距离。

二、三元组损失(Triplet loss)

  • 三元组损失[6,7,8,9][6,7,8,9] 是一种被广泛应用的度量学习损失,之后的大量度量学习方法也是基于三元组损失演变而来。顾名思义,三元组损失需要三张输入图片。和对比损失不同,一个输入的三元组(Triplet) 包括一对正样本对和一对负样本对。三张图片分别命名为固定图片 (Anchor)a(Anchor) a,正样本图片 (Positive)p(Positive) p 和负样本图片 (Negative)n(Negative) n。 图片 aa 和图片 pp 为一对正样本对,图片 aa 和图片 nn 为一对负样本对。 则三元组损失表示为:

Lt=max(da,pda,n+ margin ,0)(2)L_{t}= \max (d_{a, p}-d_{a, n}+\text { margin }, 0)\tag{2}

  • 其中: margin \text { margin } 是根据实际需求设置的训练阈值参数,da,p,da,nd_{a, p},d_{a, n} 代表两个样本对应的特征的欧氏距离。
  • triplet loss的目标是:①. 两个具有同样标签的样本,它们在新的编码空间里距离很近。②. 两个具有不同标签的样本,它们在新的编码空间里距离很远。进一步,我们希望两个positive examples和一个negative example中,negative examplepositive example的距离,大于positive examples之间的距离,或者大于某一个阈值: margin \text { margin }

Triplet loss\text {Triplet loss} 理解:

  • 优化的目的就是使 loss 在训练迭代中下降的越小越好,也就是要使得 AnchorPositive 越接近越好,AnchorNegative 越远越好。基于上面这些,分析一下 margin 值的取值。
  • 首先:当margin值越小时,loss 也就较容易的趋近于 0,于是AnchorPositive都不需要拉的太近,AnchorNegative不需要拉的太远,就能使得loss很快的趋近于0。这样训练得到的结果,不能够很好的区分相似的图像。
  • 其次:当margin越大时,就需要使得网络参数要拼命地拉近Anchor、Positive之间的距离,拉远Anchor、Negative之间的距离。如果margin值设置的太大,很可能最后loss保持一个较大的值,难以趋近于0 。
  • 因此,设置一个合理的margin值很关键,这是衡量相似度的重要指标。简而言之,margin值设置的越小,loss很容易趋近于0 ,但很难区分相似的图像。margin值设置的越大,loss值较难趋近于0,甚至导致网络不收敛,但可以较有把握的区分较为相似的图像。

三、改进三元组损失(Improved triplet loss)

  • 文献 [2][2] 认为公式 (2)(2) 只考虑正负样本对之间的相对距离,而并没有考虑正样本对之间的绝对距离(存在下图的情况,可能最后优化结束,正样本对的绝对距离仍然很大!),为此提出改进三元组损失(Improved triplet loss):

Lit=da,p+max(da,pda,n+margin,0)(3)L_{i} t=d_{a, p}+ \max (d_{a, p}-d_{a, n}+\text{margin}, 0)\tag{3}

  • 其中:margin\text{margin} 是根据实际需求设置的训练阈值参数,da,p,da,nd_{a, p},d_{a, n} 代表两个样本对应的特征的欧氏距离。公式 (8)(8) 添加 da,pd_{a, p} 项,保证网络不仅能够在特征空间把正负样本推开,也能保证正样本对之间的距离很近。

四、难样本采样三元组损失(Triplet loss with batch hard mining, TriHard loss)

  • 难样采样三元组损失(TriHard损失)是三元组损失的改进版。传统的三元组随机从训练数据中抽样三张图片,这样的做法虽然比较简单,但是抽样出来的大部分都是简单易区分的样本对。如果大量训练的样本对都是简单的样本对,那么这是不利于网络学习到更好的表征。大量论文发现用更难的样本去训练网络能够提高网络的泛化能力,而采样难样本对的方法很多。有学者提出了一种基于训练批量(Batch)的在线难样本采样方法——TriHard Loss
  • TriHard\text {TriHard} 损失的核心思想是:对于每一个训练batch,随机挑选P个ID的行人,每个行人随机挑选K张不同的图片,即一个batch含有 P×K 张图片。之后对于batch中的每一张图片a ,我们可以挑选一个最难的正样本和一个最难的负样本a组成一个三元组。
  • 首先我们定义 aa 和为相同ID的图片集为 A\mathbf A,剩下不同ID的图片图片集为 B\mathbf B,则TriHard损失表示为:

Lth=1P×Kabatchmax(maxpAda,pminnBda,n+α,0)(4) L_{t h}=\frac{1}{P \times K} \sum_{a \in b a t c h}\max\left(\max _{p \in \mathbf A} d_{a, p}-\min _{n \in \mathbf B} d_{a, n}+\alpha,0\right) \tag{4}

  • 其中:α\alpha 是人为设定的阈值参数,TriHard损失会计算 aabatch中的每一张图片在特征空间的欧式距离,然后选出与 aa 距离最远(最不像)的正样本 pp 和距离最近(最像)的负样本 nn 来计算三元组损失。 通常TriHard损失效果比传统的三元组损失要好。

五、四元组损失(Quadruplet loss)

  • 四元组损失[10][10] 是三元组损失的另一个改进版本。顾名思义,四元组(Quadruplet) 需要四张输入图片,和三元组不同的是多了一张负样本图片。即四张图片为固定图片 aa, 正样本图片 pp, 负样本图片 n1n_1 和负样本图片 n2n_2。其中 n1n_1n2n_2 是两张不同行人ID的图片。则四元组损失表示为:

Lq=max(da,pda,n1+α,0)+max(da,pdn1,n2+β,0)(5)L_{q}=\max (d_{a, p}-d_{a, n_1}+\alpha, 0)+\max (d_{a, p}-d_{n_1, n_2}+\beta, 0)\tag{5}

  • 其中:da,p,da,n1,dn1,n2d_{a, p},d_{a, n_1},d_{n_1, n_2} 代表两个样本对应的特征的欧氏距离,α,β\alpha,\beta 是手动设置的正常数,通常设置 α\alpha 小于 β\beta,前一项称为强推动, 后一项称为弱推动。其中前一项和三元组损失一样,只考虑正负样本间的相对距离,共享了固定图片 aa。因此在推开负样本对 aan1n_1 的同时,也会直接影响 aa 的特征,造成正样本对 aapp 的距离不好控制。改进三元组损失通过直接约束 aapp 之间的距离来解决这个问题。而四元组通过引入第二项弱推动实现,添加的第二项中负样本对和正样本对不共享ID, 所以考虑的是正负样本间的绝对距离,在推开负样本对的同时不会太过直接影响 aa 的特征。因此,四元组损失通常能让模型学习到更好的表征。
  • 以上度量学习方法样本示例如上图所示,这些方法在计算度量损失时,样本对都是从训练集中随机挑选。随机挑选样本对的方法可能经常挑选出一些容易识别的样本对组成训练批量(Batch),使得网络泛化能力受限。为此, 部分学者提出了难样本采样(Hard sample mining) 的方法,来挑选出难样本对训练网络。常用的思路是挑选出一个训练Batch 中特征向量距离比较大(非常不像) 的正样本对和特征向量距离比较小(非常像) 的负样本对来训练网络。难样本采样技术可以明显改进度量学习方法的性能,加快网络的收敛,并且可以很方便地在原有度量学习方法上进行扩展,是目前广泛采用的一种技术。

参考文献

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章