看到这个面试题的时候,我还真没注意到原论文中用的损失函数,因为我都是跳过。。。看到一堆公式,就把我劝退了。。。只知道肯定用到了损失函数,反正我也懒得手推公式,到时候直接调用就好了。。。QAQ。。。

心血来潮,今天来整理一下,面试答案吧,不一定准确,从知乎、博客上抄过来的。。。

面试官:请问 faster R-CNN 和 SSD 中为什么用smooth L1 loss,和L2有什么区别

小菜:在Fast R-CNN论文(这里提的是Fast 不是Faster,他们用了Smooth L1)中:a robust L1 loss that is less sensitive to outliers than the L2 loss used in R-CNN and SPPnet
理解为:
Smooth L1 Loss相比于L2 Loss对于离群点、异常值(outliers)更不敏感,或者说是更加鲁棒,避免发生梯度爆炸(可控制梯度的量级使训练时不容易跑飞)。

假定x为预测框和真实框groud truth之间的差异,L2、L1、smooth L1损失定义如下:
【CV面试】请问 faster R-CNN 和 SSD 中为什么用smooth L1 loss,和L2有什么区别
观察 (4),当 x增大时L2损失对x的导数也增大。这就导致训练初期,预测值与 groud truth 差异过于大时,损失函数对预测值的梯度十分大,训练不稳定。

观察(5),L1对x的导数为常数。这就导致训练后期,预测值与 ground truth 差异很小时, L1损失对预测值的导数的绝对值仍然为 1,而 learning rate 如果不变,损失函数将在稳定值附近波动,难以继续收敛以达到更高精度。

观察 (6), smooth L1在x较小时,对x的梯度也会变小,而在x很大时,对x的梯度的绝对值达到上限 1,也不会太大以至于破坏网络参数。 smooth L1完美地避开了L1和L2损失的缺陷。【CV面试】请问 faster R-CNN 和 SSD 中为什么用smooth L1 loss,和L2有什么区别
由图中可以看出,smooth L1在远离坐标原点处,图像和 L1 loss 很接近,而在坐标原点附近,转折十分平滑,不像 L1 loss 有个尖角,因此叫做 smooth L1 loss。

注:
缺点:

上面的三种Loss用于计算目标检测的Bounding Box Loss时,独立的求出4个点的Loss,然后进行相加得到最终的Bounding Box Loss,这种做法的假设是4个点是相互独立的,实际是有一定相关性的
实际评价框检测的指标是使用IOU,这两者是不等价的,多个检测框可能有相同大小的[公式] Loss,但IOU可能差异很大,为了解决这个问题就引入了IOU LOSS。

牛客上看到的面经原题:
https://www.nowcoder.com/discuss/566957

知乎回答的:
https://www.zhihu.com/question/58200555

https://blog.csdn.net/ytusdc/article/details/86659696

SmoothL1/IoU/GIoU/DIoU/CIoU Loss总结
https://zhuanlan.zhihu.com/p/104236411

相关文章: