论文提出了IoU-based的DIoU loss和CIoU loss,以及建议使用DIoU-NMS替换经典的NMS方法,充分地利用IoU的特性进行优化。并且方法能够简单地迁移到现有的算法中带来性能的提升,实验在YOLOv3上提升了5.91mAP,值得学习
论文:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression
IoU是目标检测里面很重要的一个指标,通过预测的框和GT间的交集与并集的比例进行计算,经常用于评价bbox的优劣 。但一般对bbox的精调都采用L2范数,而一些研究表明这不是最优化IoU的方法,因此出现了IoU loss
IoU loss顾名思义就是直接通过IoU计算梯度进行回归,论文提到IoU loss的无法避免的缺点:当两个box无交集时,IoU=0,很近的无交集框和很远的无交集框的输出一样,这样就失去了梯度方向,无法优化。IoU loss的实现形式有很多种,除公式2外,还有UnitBox的交叉熵形式和IoUNet的Smooth-L1形式
这里论文主要讨论的类似YOLO的检测网络,按照GT是否在cell判断当前bbox是否需要回归,所以可能存在无交集的情况。而一般的two stage网络,在bbox regress的时候都会卡 I o U ≥ 0.5 IoU\ge 0.5 IoU≥0.5,不会对无交集的框进行回归
GIou loss在IoU loss的基础上增加一个惩罚项, C C C为包围预测框 B B B和 B g t B^{gt} Bgt的最小区域大小,当bbox的距离越大时,惩罚项将越大
尽管GIoU解决了IoU的梯度问题,但他仍然存在几个限制:
综合上面的分析,论文提出Distance-IoU(DIoU) loss,简单地在IoU loss基础上添加一个惩罚项,该惩罚项用于最小化两个bbox的中心点距离。如图1所示,DIoU收敛速度和效果都很好,而且DIoU能够用于NMS的计算中,不仅考虑了重叠区域,还考虑了中心点距离。另外,论文考虑bbox的三要素,重叠区域,中心点距离和长宽比,进一步提出了Complete IoU(CIoU) loss,收敛更快,效果更好
为了全面地分析IoU loss和GIoU的性能,论文进行了模拟实验,模拟不同的距离、尺寸和长宽比的bbox的回归情况
如图3所示,实验选择7个不同长宽比(1:4, 1:3, 1:2, 1:1, 2:1, 3:1, 4:1)的单元box(area=1)作为GT,单元框的中心点固定在(7, 7),而实验共包含5000 x 7 x 7个bbox,且分布是均匀的:
给定一个loss函数 L \mathcal{L} L,可以通过梯度下降来模拟bbox优化的过程。对于预测的bbox B i B_i Bi, B i t B_i^t Bit为 t t t阶段的结果, ▽ B i t − 1 \triangledown B_i^{t-1} ▽Bit−1为 L \mathcal{L} L对 B i t B_i^t Bit的梯度,使用 η ( 2 − I o U i t − 1 ) \eta(2-IoU_i^{t-1}) η(2−IoUit−1)来加速收敛。bbox的优化评价使用 l 1 \mathcal{l}_1 l1-norm,共训练200轮,error曲线如图3b所示
论文将5000个中心点上的bbox在最后阶段的total error进行了可视化。IoU loss只对与target box有交集的bbox有效,因为无交集的bbox的 ▽ B \triangledown B ▽B为0。而GIoU由于增加了惩罚函数,盆地区域明显增大,但是垂直和水平的区域依然保持着高错误率,这是由于GIoU的惩罚项经常很小甚至为0,导致训练需要更多的迭代来收敛
一般而言,IoU-based loss可以定义为公式5, R ( B , B g t ) R(B,B^{gt}) R(B,Bgt)是预测box B B B和 B g t B^{gt} Bgt的惩罚项
论文提出了能减少两个box中心点间的距离的惩罚项, b b b和 b g t b^{gt} bgt分别表示 B B B和 B g t B^{gt} Bgt的中心点。 ρ ( ⋅ ) \rho(\cdot) ρ(⋅)是欧氏距离, c c c是最小包围两个bbox的框的对角线长度
DIoU loss的完全定义如公式7
DIoU loss的惩罚项能够直接最小化中心点间的距离,而GIoU loss意在减少外界包围框的面积
DIoU loss保留了IoU loss和GIoU loss的一些属性:
在模拟实验中,发现DIoU loss也有一些独有的属性:
论文考虑到bbox回归三要素中的长宽比还没被考虑到计算中,因此,进一步在DIoU的基础上提出了CIoU。其惩罚项如公式8,其中 α \alpha α是权重函数,而 v v v用来度量长宽比的相似性
完整的损失函数定义如公式10
α \alpha α的定义如公式11,重叠区域能够控制权重的大小
最后,CIoU loss的梯度类似于DIoU loss,但还要考虑 v v v的梯度。在长宽在 [ 0 , 1 ] [0,1] [0,1]的情况下, w 2 + h 2 w^2+h^2 w2+h2的值通常很小,会导致梯度爆炸,因此在实现时将 1 w 2 + h 2 \frac{1}{w^2+h^2} w2+h21替换成1
在原始的NMS中,IoU指标用于抑制多余的检测框,但由于仅考虑了重叠区域,经常会造成错误的抑制,特别是在bbox包含的情况下。因此,可以使用DIoU作为NMS的标准,不仅考虑重叠区域,还考虑了中心点距离
其中 s i s_i si是分类置信度, ϵ \epsilon ϵ为NMS阈值, M \mathcal{M} M为最高置信度的框。DIoU-NMS倾向于中心点距离较远的box存在不同的对象,而且仅需改几行代码,DIoU-NMS就能够很简单地集成到目标检测算法中
在YOLOv3上进行实验对比,DIoU loss和CIoU的效果都很显著,mAP分别提升3.29%和5.67%,而AP75则分别提升6.40%和8.43%,而使用DIoU-NMS则能进一步提升,幅度达到5.91%和9.88%
在SSD-FPN上进行实验对比,因为本身模型已经精度很好了,DIoU loss和CIoU的效果不是很显著,但仍有提升。mAP分别提升0.59%和0.84%,而AP75则分别提升1.77%和2.59%,而使用DIoU-NMS则能进一步提升效果
在Faster R-CNN ResNet-50-FPN上,由于Faster R-CNN本身提供的bbox质量都比较高(即在图4的盆地),因此,GIoU的优化都很小,但此时DIoU和CIoU则表现了不错的优化效果。注意到,CIoU在小物体上的性能都有所下降,可能由于长宽比对小物体的检测贡献不大,因为此时中心点比长宽比重要
图7对GIoU和CIoU的结果进行了可视化,可以看到,在中大型物体检测上,CIoU的结果比GIoU要准确
如图8所示,DIoU-NMS能够更好地引导bbox的消除
为了进一步验证DIoU-NMS的效果,进行了对比实验。如图9所示,DIoU-NMS的整体性能都比原生的NMS效果要好
论文提出了两种新的IoU-based损失函数,DIoU loss和CIoU loss:DIoU loss最小化bbox间的中心点距离,从而使得函数快速收敛;CIoU loss则在DIoU loss的基础上加入长宽比的考量,能够进一步地快速收敛和提升性能。另外论文提出DIoU-NMS来代替原生的NMS,充分地利用IoU的特性进行优化,从实验结果来看,效果也是很好的
写作不易,未经允许不得转载~
更多内容请关注知乎专栏/微信公众号【晓飞的算法工程笔记】