基于度量学习的行人重识别方法中损失函数总结! |
文章目录
- 本文主要是参考的文章:基于深度学习的行人重识别研究进展!
一、对比损失(Contrasive loss)
- 对比损失(
Contrasive loss
)用于训练孪生网络(Siamese network
) [ 3 , 4 , 5 ] [3,4,5] [3,4,5]。孪生网络的输入为一对(两张)图片 I a I_a Ia 和 I b I_b Ib,这两张图片可以为同一行人,也可以为不同行人。 每一对训练图片都有一个标签 y y y, 其中 y = 1 y = 1 y=1 表示两张图片属于同一个行人(正样本对),反之 y = 0 y = 0 y=0 表示它们属于不同行人(负样本对)。之后, 对比损失函数写作:
L c = y d I a , I b 2 + ( 1 − y ) max ( α − d I a , I b , 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} Lc=ydIa,Ib2+(1−y)max(α−dIa,Ib,0)2(1)
- 其中: α \alpha α 是根据实际需求设置的训练阈值参数, d I a , I b d_{I_{a}, I_{b}} dIa,Ib 代表两个样本对应的特征的欧氏距离。
二、三元组损失(Triplet loss)
- 三元组损失 [ 6 , 7 , 8 , 9 ] [6,7,8,9] [6,7,8,9] 是一种被广泛应用的度量学习损失,之后的大量度量学习方法也是基于三元组损失演变而来。顾名思义,三元组损失需要三张输入图片。和对比损失不同,一个输入的三元组(Triplet) 包括一对正样本对和一对负样本对。三张图片分别命名为固定图片 ( A n c h o r ) a (Anchor) a (Anchor)a,正样本图片 ( P o s i t i v e ) p (Positive) p (Positive)p 和负样本图片 ( N e g a t i v e ) n (Negative) n (Negative)n。 图片 a a a 和图片 p p p 为一对正样本对,图片 a a a 和图片 n n n 为一对负样本对。 则三元组损失表示为:

L t = max ( d a , p − d a , n + margin , 0 ) (2) L_{t}= \max (d_{a, p}-d_{a, n}+\text { margin }, 0)\tag{2} Lt=max(da,p−da,n+ margin ,0)(2)
- 其中: margin \text { margin } margin 是根据实际需求设置的训练阈值参数, d a , p , d a , n d_{a, p},d_{a, n} da,p,da,n 代表两个样本对应的特征的欧氏距离。
triplet loss
的目标是:①. 两个具有同样标签的样本,它们在新的编码空间里距离很近。②. 两个具有不同标签的样本,它们在新的编码空间里距离很远。进一步,我们希望两个positive examples
和一个negative example
中,negative example
与positive example
的距离,大于positive examples
之间的距离,或者大于某一个阈值: margin \text { margin } margin
Triplet loss \text {Triplet loss} Triplet loss 理解:
- 优化的目的就是使
loss
在训练迭代中下降的越小越好,也就是要使得Anchor
与Positive
越接近越好,Anchor
与Negative
越远越好。基于上面这些,分析一下margin
值的取值。 - 首先:当
margin
值越小时,loss
也就较容易的趋近于 0,于是Anchor
与Positive
都不需要拉的太近,Anchor
与Negative
不需要拉的太远,就能使得loss
很快的趋近于0。这样训练得到的结果,不能够很好的区分相似的图像。 - 其次:当
margin
越大时,就需要使得网络参数要拼命地拉近Anchor、Positive
之间的距离,拉远Anchor、Negative
之间的距离。如果margin
值设置的太大,很可能最后loss
保持一个较大的值,难以趋近于0 。 - 因此,设置一个合理的
margin
值很关键,这是衡量相似度的重要指标。简而言之,margin
值设置的越小,loss
很容易趋近于0 ,但很难区分相似的图像。margin
值设置的越大,loss
值较难趋近于0,甚至导致网络不收敛,但可以较有把握的区分较为相似的图像。
三、改进三元组损失(Improved triplet loss)
- 文献 [ 2 ] [2] [2] 认为公式 ( 2 ) (2) (2) 只考虑正负样本对之间的相对距离,而并没有考虑正样本对之间的绝对距离(存在下图的情况,可能最后优化结束,正样本对的绝对距离仍然很大!),为此提出改进三元组损失(Improved triplet loss):

L i t = d a , p + max ( d a , p − d a , n + margin , 0 ) (3) L_{i} t=d_{a, p}+ \max (d_{a, p}-d_{a, n}+\text{margin}, 0)\tag{3} Lit=da,p+max(da,p−da,n+margin,0)(3)
- 其中: margin \text{margin} margin 是根据实际需求设置的训练阈值参数, d a , p , d a , n d_{a, p},d_{a, n} da,p,da,n 代表两个样本对应的特征的欧氏距离。公式 ( 8 ) (8) (8) 添加 d a , p d_{a, p} da,p 项,保证网络不仅能够在特征空间把正负样本推开,也能保证正样本对之间的距离很近。
四、难样本采样三元组损失(Triplet loss with batch hard mining, TriHard loss)
- 难样采样三元组损失(
TriHard
损失)是三元组损失的改进版。传统的三元组随机从训练数据中抽样三张图片,这样的做法虽然比较简单,但是抽样出来的大部分都是简单易区分的样本对。如果大量训练的样本对都是简单的样本对,那么这是不利于网络学习到更好的表征。大量论文发现用更难的样本去训练网络能够提高网络的泛化能力,而采样难样本对的方法很多。有学者提出了一种基于训练批量(Batch
)的在线难样本采样方法——TriHard Loss。 -
TriHard
\text {TriHard}
TriHard 损失的核心思想是:对于每一个训练
batch
,随机挑选P
个ID的行人,每个行人随机挑选K
张不同的图片,即一个batch
含有P×K
张图片。之后对于batch中的每一张图片a
,我们可以挑选一个最难的正样本和一个最难的负样本和a
组成一个三元组。 - 首先我们定义
a
a
a 和为相同ID的图片集为
A
\mathbf A
A,剩下不同ID的图片图片集为
B
\mathbf B
B,则
TriHard
损失表示为:
L t h = 1 P × K ∑ a ∈ b a t c h max ( max p ∈ A d a , p − min n ∈ B d a , 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} Lth=P×K1a∈batch∑max(p∈Amaxda,p−n∈Bminda,n+α,0)(4)
- 其中:
α
\alpha
α 是人为设定的阈值参数,TriHard损失会计算
a
a
a 和
batch
中的每一张图片在特征空间的欧式距离,然后选出与 a a a 距离最远(最不像)的正样本 p p p 和距离最近(最像)的负样本 n n n 来计算三元组损失。 通常TriHard损失效果比传统的三元组损失要好。
五、四元组损失(Quadruplet loss)
- 四元组损失 [ 10 ] [10] [10] 是三元组损失的另一个改进版本。顾名思义,四元组(Quadruplet) 需要四张输入图片,和三元组不同的是多了一张负样本图片。即四张图片为固定图片 a a a, 正样本图片 p p p, 负样本图片 n 1 n_1 n1 和负样本图片 n 2 n_2 n2。其中 n 1 n_1 n1 和 n 2 n_2 n2 是两张不同行人ID的图片。则四元组损失表示为:
L q = max ( d a , p − d a , n 1 + α , 0 ) + max ( d a , p − d n 1 , n 2 + β , 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} Lq=max(da,p−da,n1+α,0)+max(da,p−dn1,n2+β,0)(5)
- 其中: d a , p , d a , n 1 , d n 1 , n 2 d_{a, p},d_{a, n_1},d_{n_1, n_2} da,p,da,n1,dn1,n2 代表两个样本对应的特征的欧氏距离, α , β \alpha,\beta α,β 是手动设置的正常数,通常设置 α \alpha α 小于 β \beta β,前一项称为强推动, 后一项称为弱推动。其中前一项和三元组损失一样,只考虑正负样本间的相对距离,共享了固定图片 a a a。因此在推开负样本对 a a a 和 n 1 n_1 n1 的同时,也会直接影响 a a a 的特征,造成正样本对 a a a 和 p p p 的距离不好控制。改进三元组损失通过直接约束 a a a 和 p p p 之间的距离来解决这个问题。而四元组通过引入第二项弱推动实现,添加的第二项中负样本对和正样本对不共享ID, 所以考虑的是正负样本间的绝对距离,在推开负样本对的同时不会太过直接影响 a a a 的特征。因此,四元组损失通常能让模型学习到更好的表征。

- 以上度量学习方法样本示例如上图所示,这些方法在计算度量损失时,样本对都是从训练集中随机挑选。随机挑选样本对的方法可能经常挑选出一些容易识别的样本对组成训练批量(Batch),使得网络泛化能力受限。为此, 部分学者提出了难样本采样(Hard sample mining) 的方法,来挑选出难样本对训练网络。常用的思路是挑选出一个训练Batch 中特征向量距离比较大(非常不像) 的正样本对和特征向量距离比较小(非常像) 的负样本对来训练网络。难样本采样技术可以明显改进度量学习方法的性能,加快网络的收敛,并且可以很方便地在原有度量学习方法上进行扩展,是目前广泛采用的一种技术。
参考文献
-
[ 1 ] . [1]. [1]. 这里主要摘录了浙大罗浩博士(大神)的文章:基于深度学习的行人重识别研究进展!
-
[ 2 ] . [2]. [2]. Person re-identification by multi-channel parts-based CNN with improved triplet loss function_2016
-
[ 3 ] . [3]. [3]. Siamese convolutional neural network architecture for human re-identification_2016
-
[ 4 ] . [4]. [4]. A Siamese long short-term memory architecture for human re-identification_2016
-
[ 5 ] . [5]. [5]. Person re-identification with cascaded pairwise convolutions_2018
-
[ 6 ] . [6]. [6]. Person re-identification by multi-channel parts-based CNN with improved triplet loss function_2016
-
[ 7 ] . [7]. [7]. In defense of the triplet loss for person re-identification_2017
-
[ 8 ] . [8]. [8]. End-to-end comparative attention networks for person re-identification_2017
-
[ 9 ] . [9]. [9]. Features for multi-target multi-camera tracking and re-identification_2018
-
[ 10 ] . [10]. [10]. Beyond triplet loss: a deep quadruplet network for person re-identification_2017
-
https://zhuanlan.zhihu.com/p/35027284