专栏名称: OpenCV学堂
一个致力于计算机视觉OpenCV原创技术传播的公众号!OpenCV计算机视觉与tensorflow深度学习相关算法原创文章分享、函数使用技巧、源码分析与讨论、,计算机视觉前沿技术介绍,技术专家经验分享,人才交流,学习交流。
目录
相关文章推荐
算法与数学之美  ·  从乡野少年到数学巨匠,丘成桐的教育观如何影响 ... ·  5 小时前  
算法爱好者  ·  清华出品:DeepSeek ... ·  昨天  
算法与数据结构  ·  从信息论的角度分析堆排序和快速排序的性能 ·  2 天前  
算法与数据结构  ·  年薪154W!真心建议大家冲一冲新兴领域,工 ... ·  2 天前  
算法爱好者  ·  普通人如何抓住 DeepSeek ... ·  2 天前  
51好读  ›  专栏  ›  OpenCV学堂

对象检测边界框损失 – 从IOU到ProbIOU

OpenCV学堂  · 公众号  ·  · 2024-10-15 22:25

正文

点击上方 蓝字 关注我们

微信公众号: OpenCV学堂

关注获取更多计算机视觉与深度学习知识

概述

目标检测损失函数的选择在目标检测问题建模中至关重要。通常,目标检测需要两个损失函数,一个用于对象分类,另一个用于边界框回归(BBR)。本文将重点介绍 IoU 损失函数(GIoU 损失、DIoU 损失和 CIoU 损失、ProbIoU)。首先来了解一下什么是最原始的IoU定义

什么是IOU(并交比)

对象检测中的 mAP(平均精度)指标是根据 IoU(交集超过并集)进行评估的。因此,BBR使用基于 IoU 的损失函数来实现计算mAP,mAP的典型计算公式与表示如下:

但是这种最原始的 IoU 并交比的损失计算方式是有缺陷的,如当预测框与真实框没有相交的时候, IoU 损失就是 0 ,这样就导致了没有梯度,导致训练的效果就会打折许多。

改进之GIoU

于是有个聪明的人发现,这样可以稍微避免这种问题的发生,就是把预测框与真实框(A与B)合起来求最小的外接矩形,就变成了如下:

对应的GIoU的计算公式就改成了:

下图是分别基于L2与L1损失相同的情况下,IoU跟GIoU有明显的差异比较。

加入惩罚项因子以后,对于没有重叠的预测也可以实现边界框回归了,从而改善了IoU的缺陷。论文给出的实验结果如下:


改进之DIoU与CIoU

作者把IoU损失看成是一个通用的公式如下:

其中R是惩罚性因子,这样R=0的时候就是普通的IoU损失,从而把IoU损失改进看成是寻找好的惩罚性因子,然后作者通过一通神的思考以后给出了下面的惩罚性因子公式:


这样 DIoU就出来

这样是不是梯度会大一些,回归起来会更猛一点,效果会更好点。但是作者说好的BBR应该考虑三个指标分别是 重叠、中心位置距离、横纵比 ,DIoU只考虑前面两个,还有最后一个还没有考虑到,所以还可以改进,改进之后才是完整的IoU损失(CIoU),然后就得到了另外一个惩罚性因子公式跟对应的CIoU损失:


然后作者给出了实验结果:

说明CIoU开挂了,所以YOLOv8默认就是CIoU。

ProbIoU

ProbIoU可以实现OBB旋转对象映射到GBB、然后实现预测框与真实框的回归IoU损失功能,然后基于协方差矩阵,计算巴氏距离以后,再基于BD实现损失计算

跟原始的IoU比较,有明显的改善:

然后它自己说靠谱,所以YOLOv8的旋转对象检测就采用了ProbIoU来做BBR。



扫码学习YOLOv8视频课程

推荐阅读

OpenCV4.8+YOLOv8对象检测C++推理演示

三行代码实现 TensorRT8.6 C++ 深度学习模型部署







请到「今天看啥」查看全文