最早的bbox_loss采用的是MSE方法
L MSE = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 + ( w 1 − w 2 ) 2 + ( h 1 − h 2 ) 2 \mathcal{L}_{\text {MSE}} = (x1-x2)^2 + (y1-y2)^2 + (w1-w2)^2 +(h1-h2)^2 LMSE=(x1−x2)2+(y1−y2)2+(w1−w2)2+(h1−h2)2
这种方式计算损失值是检测框的“代理属性”—— 距离,而忽略了检测框本身最显著的性质——IoU。
计算两者的重叠占比,才是我们更加想要去优化的属性,而不仅仅是距离。
L IoU = 1 − ∣ B ∩ B g t ∣ ∣ B ∪ B g t ∣ \begin{array}{l} \mathcal{L}_{\text {IoU}}=1-\frac{\left|B \cap B^{g t}\right|}{\left|B \cup B^{g t}\right|} \\ \end{array} LIoU=1−∣B∪Bgt∣∣B∩Bgt∣
IOU就是反映预测框与真实框的重叠情况
从几何上来看就是两者交集的面积比两者并集的面积,当这个值越大,代表两者越接近,反映在bbox_loss上就会越小。
但是这种方式确有着两个致命的缺点,无法反映1.包含及2.完全未重叠
如下图所示
于是cvpr2019年giou横空出世,他的公式如下:
L G I o U = 1 − I o U + ∣ C − B ∪ B g t ∣ ∣ C ∣ \mathcal{L}_{G I o U}=1-I o U+\frac{\left|C-B \cup B^{g t}\right|}{|C|} LGIoU=1−IoU+∣C∣∣C−B∪Bgt∣
C代表两者接起来的矩形,可以看到,当两者不相交时,IOU为0,但后面的那一项,两者距离越远,越接近于1,于是giou_loss也就越大,这就很好的解决了IOU_loss的第一个缺点,但是同样的第二个缺点并没有解决。
论文地址:https://arxiv.org/abs/1911.08287
代码地址:https://github.com/Zzh-tju/DIoU
为了解决3中的问题,aaai2020年diou横空出世,它的公式如下
L D I o U = 1 − I o U + ρ 2 ( b , b g t ) c 2 \mathcal{L}_{D I o U}=1-I o U+\frac{\rho^{2}\left(\mathbf{b}, \mathbf{b}^{g t}\right)}{c^{2}} LDIoU=1−IoU+c2ρ2(b,bgt)
其中
ρ 2 ( b , b g t ) c 2 \frac{\rho^{2}\left(\mathbf{b}, \mathbf{b}^{g t}\right)}{c^{2}} c2ρ2(b,bgt)
分子代表预测框与真实框他们中心点之间的距离,而分母则代表两者形成的外接矩形的对角线长度。
可以看到这种方式,两者不重合时,距离越远比值越接近1,此时loss=1+1=2,随着两者距离的接近,loss慢慢下降。
在两者包含的时候
只有两者中心点完全一致时,上述项为0,可以看到也解决了部分包含的问题。
那么还剩下最后一个问题:两者重合且中心点也重合时时,预测框与真实框的宽高不一致,出现大框包小框该如何优化?
CIOU是DIOU同一篇论文提出的。先看公式
L C I o U = 1 − I o U + ρ 2 ( b , b g t ) ρ 2 + α v \mathcal{L}_{C I o U}=1-I o U+\frac{\rho^{2}\left(\mathbf{b}, \mathbf{b}^{g t}\right)}{\rho^{2}}+\alpha v LCIoU=1−IoU+ρ2ρ2(b,bgt)+αv
v = 4 π 2 ( arctan w g t h g t − arctan w h ) 2 v=\frac{4}{\pi^{2}}\left(\arctan \frac{w^{g t}}{h^{g t}}-\arctan \frac{w}{h}\right)^{2} v=π24(arctanhgtwgt−arctanhw)2
α = v ( 1 − I o U ) + v \alpha=\frac{v}{(1-I o U)+v} α=(1−IoU)+vv
在这里 α \alpha α你可以认为作者设置的一个权重系数,加入 α v \alpha v αv,引入了宽高比,从而去优化预测框与真是框之间的宽高不同问题,至此,这个问题基本可以说解的很完美了,这里看一个性能对比。
这是作者在YOLOV3网络使用不同的bbox_loss所带来的性能提升,可以看到CIOU相对于GIOU有了大约3%左右的性能提升。