交叉熵损失函数是分类中非常经典的一种loss,其计算公式如下:
L
C
E
=
−
y
l
o
g
(
y
′
)
−
(
1
−
y
)
l
o
g
(
1
−
y
′
)
L_{CE}=-y log(y')-(1-y)log(1-y')
LCE=−ylog(y′)−(1−y)log(1−y′)
其中y表示某个类别上的GT(值为0或1),y‘表示经过神经网络预测得到的对应类别的置信度(因为做过softmax处理,所以值在(0,1)之间)。当y=0时,上式中只有第二项,此时y‘越接近于0,则loss越小;当y=1时,上式只有第一项有值,此时y’越接近于1,则loss越小。
坐标或者wh回归时常用的loss,计算式分别如下:
L 1 = ∣ y ′ − y ∣ L_{1}=|y'-y| L1=∣y′−y∣
L 2 = ∣ y ′ − y ∣ 2 L_{2}=|y'-y|^{2} L2=∣y′−y∣2
其中y表示GT值(物理含义可以表示object的坐标,bbox宽高等),y’表示经神经网络的预测值(一般也是预测bbox的位置、宽高等信息)。该函数的目的就是minimize预测值与GT之间的L1/L2距离。
smooth-L1在L1 loss的基础上做出一点改动,使得Loss在定义域内处处可导,其公式定义如下:
L s m o o t h _ L 1 = { 0.5 x 2 , ∣ x ∣ < 1 ∣ x ∣ − 0.5 , ∣ x ∣ ≥ 1 L_{smooth\_L1}= \begin{cases} 0.5x^{2}, |x|<1 \\ |x|-0.5, |x|\ge1 \end{cases} Lsmooth_L1={0.5x2,∣x∣<1∣x∣−0.5,∣x∣≥1
上式中的x就是L1 Loss中的|y’-y|,smooth L1 loss是在Faster RCNN中提出的,可以看下它和L2 loss的对比:
可以看出smooth L1在一些离群点上梯度也只是1,不会像L2 Loss一样梯度会很大。因此可以说smooth l1 loss对离群点和异常点更加鲁棒。
Huber Loss也是常用的回归loss之一,可以看作是上述smooth L1 Loss的拓展,其计算式如下:
L s m o o t h _ L 1 = { 0.5 x 2 , ∣ x ∣ ≤ δ δ ∣ x ∣ − 0.5 δ 2 , o t h e r w i s e L_{smooth\_L1}= \begin{cases} 0.5x^{2}, |x|\le \delta \\ \delta|x|-0.5\delta ^{2}, otherwise \end{cases} Lsmooth_L1={0.5x2,∣x∣≤δδ∣x∣−0.5δ2,otherwise
根据上面的公式可以看出,smooth l1是在
δ
=
1
\delta=1
δ=1时的一种特例。那么为什么要引入这个loss呢?可以发现,当
δ
→
0
\delta \rarr0
δ→0时,损失函数接近MAE;当
δ
→
∞
\delta \rarr \infty
δ→∞时,损失函数接近MSE。随着
δ
\delta
δ的变化,整个loss曲线的变化可以参考一下下图:
可以看出,MSE的情况对于离群点太敏感,鲁棒性可能不好;MAE整体太平缓,可能会出现梯度弥散。所以Huber Loss采取了一个折衷的方法,通过合理调节超参数
δ
\delta
δ,在消除离群点敏感的影响同时,也能保证一定的梯度,同时该loss在定义域内处处可导。当
δ
=
1
\delta=1
δ=1时,Huber loss可以看作是smooth L1 Loss。
IoU Loss也是一个跟检测框相关的回归loss。之前有L2 Loss可以计算预测bbox的位置宽高与GT之间的距离,并没有考虑坐标间的相关性。而IoU Loss则是从box的角度出发,具备位置的相关性,如下图所示:
IoU Loss在做检测框回归方面要更胜L2 Loss一筹,当两个box的IoU=1时,此时IoU Loss最小为1;当两个box的IoU很小,趋近于0时,此时的IoU Loss会非常大。
显而易见,IoU Loss在两个框没有交集IoU=0时,无法衡量两者之间的距离(相邻不重叠的,和相隔天涯海角的box之间的IoU是一样的);并且IoU Loss无法精确反映两个box之间的重合度大小。因此就有了后续若干个IoU Loss的改进版,这里篇幅所限不讨论了,可以参照这篇博客。
Focal Loss是目前在检测领域应用非常广泛的分类loss。由于在detection任务中正负样本的不均衡,并且存在难易样本(接近GT的样本为易分样本,离GT较远的称为难分样本)。所以需要利用Focal Loss解决这两个问题。
我们可以从传统的交叉上损失函数出发:
为了解决正负样本不均衡的问题,可以引入一个参数
α
\alpha
α,来给正样本loss更大的权重,如下:
加入
α
\alpha
α以后解决了正负样本不均衡的问题,但是并没有解决难易样本的问题。作者认为,易分样本对于模型精度的提升效果很小,模型应该更多的关注那些难分样本。所以这里的处理方法就是,将高置信度(易分)样本的损失降低一些,或者将低置信度(难分)样本的损失提高一些。所以就有了如下公式:
举个栗子,当
γ
=
2
,
p
=
0.968
\gamma=2, p=0.968
γ=2,p=0.968时,
(
1
−
p
)
γ
=
0.001
(1-p)^ \gamma=0.001
(1−p)γ=0.001,此时就相当于把这个置信度很大的易分样本的权重削弱了1000倍。Focal Loss的最终表达形式如下所示:
实验证明当
γ
=
2
,
α
=
0.25
\gamma=2, \alpha=0.25
γ=2,α=0.25时,效果最佳。
去年NeurIPS20上又出现了Focal Loss的改进版GFocal Loss,感兴趣的可以看下这篇文章。
Dice Loss在分割中有着广泛的应用,用于计算预测mask和GT mask之间的差别,这个loss需要从Dice系数说起。
Dice系数: s = 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ s=\frac{2|X\cap Y|}{|X|+|Y|} s=∣X∣+∣Y∣2∣X∩Y∣,其中X表示GT mask,Y表示预测得到的mask。两个mask都是和原图像大小,且每个位置非0即1的掩膜。之所以分子上乘2,是因为分母存在重复加的情况。我们发现,当X与Y完全一样时,s=1;当X与Y完全不重叠时,s=0。因此整个Dice系数的取值在[0, 1]。
Dice系数用更一般的表示方法可以表达为: s = 2 T P 2 T P + F N + F P s=\frac{2TP}{2TP+FN+FP} s=2TP+FN+FP2TP。这个公式可以完美的和上面的对应,TP就是预测mask和GT mask对应点都为1的部分;FN是预测mask为0 而GT mask为1的部分;FP是预测mask为1 而GT mask为0的部分。所以这个形式是Dice系数的更普遍的表达。
Dice Loss的计算式如下:
L D i c e = 1 − 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ L_{Dice}=1-\frac{2|X\cap Y|}{|X|+|Y|} LDice=1−∣X∣+∣Y∣2∣X∩Y∣
但是Dice Loss在训练误差曲线会比较混乱,偶尔也会出现一些极端情况导致训练的不稳定,关于Dice Loss存在的一些问题,可以参考这篇文章。
Dice Loss是Tversky Loss一种特殊形式,有兴趣的小伙伴可以读一下Tversky Loss的论文。
之前在一篇embedding clustering类型的实例分割论文中看到过这个loss(《Instance Segmentation by Jointly Optimizing Spatial Embeddings and
Clustering Bandwidth》)。这个loss最早应该出现在SVM中,其主要的思想是给出一个松弛margin。众所周知,前面的所有loss,只要预测值和GT之间有一点的差别,loss就不会为0。而这个Loss的精髓之处就是,给定一个松弛空间,在离GT很近(小于margin)的这部分空间中,loss的计算值也设置为0。因此Hinge Loss的计算式可以概括如下:
这里截取了上述论文中的Hinge loss的公式,主要解释一下思想:
C
k
C_{k}
Ck表示第k个实例的质心,
e
i
e_{i}
ei表示属于这个instance的某个pixel的位置。只要两者之间的距离不超过
δ
\delta
δ,整个loss的计算值就为0。所以
δ
\delta
δ在这里是一个松弛变量,容许估计值与GT有margin之内的误差,该误差不计算在loss之内。
做Tracking时常用的loss,因为tracking需要把前后两帧里相同的instance进行匹配,匹配的原则大多是基于embedding的相似度。所以为了学习到更精确的embedding,通常会在ReId网络中采用Triplet Loss。这个损失函数的具体细节不展开了,感兴趣的小伙伴可以阅读这篇博客,写得非常清晰。
欢迎小伙伴进行指正和补充。