作者丨何杰文@知乎(已授权)

来源丨https://zhuanlan.zhihu.com/p/422104433

编辑丨极市平台

导读

本文总结了6个目标检测回归损失函数的优缺点以及对其公式的分析,

演进路线:Smooth L1->IoU->GIoU->DIoU->CIoU->EIOU Loss

Smooth L1 Loss

【动机】 Smooth L1 Loss完美的避开了L1和L2 Loss的缺点

  1. L1 Loss的问题:损失函数对x的导数为常数,在训练后期,x很小时,如果learning rate 不变,损失函数会在稳定值附近波动,很难收敛到更高的精度。

  2. L2 Loss的问题:损失函数对x的导数在x值很大时,其导数也非常大,在训练初期不稳定。

【分析】

SmoothL1对x的导数为:

实际使用时:

其中表示真实框坐标,表示预测的框坐标,即分别求4个点的loss,然后相加作为Bounding Box Regression Loss。

三种loss的曲线图如图所示,可以看到Smooth L1相比L1的曲线更加的Smooth

【不足】 Smooth L1 Loss在计算目标检测的 bbox loss时,都是独立的求出4个点的 loss,然后相加得到最终的 bbox loss。这种做法的默认4个点是相互独立的,与实际不符。举个例子,当(x, y)为右下角时,w h其实只能取0。

IoU Loss(2016)

论文地址:https://arxiv.org/pdf/1608.01471.pdf

【动机】 针对smooth L1没有考虑box四个坐标之间相关性的缺点,

【分析】 通过4个坐标点独立回归Building boxes的缺点:

  • 检测评价的方式是使用IoU,而实际回归坐标框的时候是使用4个坐标点,如下图所示,是不等价的;L1或者L2 Loss相同的框,其IoU 不是唯一的;

  • 通过4个点回归坐标框的方式是假设4个坐标点是相互独立的,没有考虑其相关性,实际4个坐标点具有一定的相关性;

  • 基于L1和L2的距离的loss对于尺度不具有不变性;

图(a)中的三组框具有相同的L2 Loss,但其IoU差异很大;图(b)中的三组框具有相同的L1 Loss,但IoU 同样差异很大,说明L1,L2这些Loss用于回归任务时,不能等价于最后用于评测检测的IoU.

Ious Loss公式

IoU Loss定义如下:

实际使用中简化为

【不足】

  • 当预测框和目标框不相交,即 IoU(bbox1, bbox2)=0 时,不能反映两个框距离的远近,此时损失函数不可导,IoU Loss 无法优化两个框不相交的情况。

  • 假设预测框和目标框的大小都确定,只要两个框的相交值是确定的,其 IoU 值是相同时,IoU 值不能反映两个框是如何相交的。

GIOU Loss(2019)

论文地址:https://arxiv.org/abs/1902.09630

代码地址:https://github.com/generalized-iou/g-darknet

【动机】 解决IoU Loss没有考虑两个框是如何相交

【分析】

GIoU定义如下:

实际使用时

  • GIoU 取值范围为 [-1, 1],在两框重合时取最大值1,在两框无限远的时候取最小值-1;

  • 与 IoU 只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。

【实验】 GIoU Loss,在单阶段检测器YOLO v1涨了2个点,两阶段检测器涨点相对较少(原因分析:RPN的box比较多,两个框未相交的数量相对较少)

【不足】 当真实框完全包裹预测框的时候,IoU 和 GIoU 的值都一样,此时 GIoU 退化为 IoU, 无法区分其相对位置关系。

DIoU Loss(2019)

论文地址:https://arxiv.org/pdf/1911.08287.pdf

代码链接:https://github.com/Zzh-tju/DIoU

【动机】 解决GIoU Loss缺点当真实框完全包裹预测框的时候,IoU 和 GIoU 的值都一样,引入距离

【分析】

基于IoU和GIoU存在的问题,作者提出了两个问题:

  • 第一:直接最小化预测框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。

  • 第二:如何使回归在与目标框有重叠甚至包含时更准确、更快。

好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比。

  • 针对问题一,作者提出了DIoU Loss,相对于GIoU Loss收敛速度更快,该Loss考虑了重叠面积和中心点距离,但没有考虑到长宽比;

  • 针对问题二,作者提出了CIoU Loss,其收敛的精度更高,以上三个因素都考虑到了。

DIoU Loss 的定义如下:

其中表示预测框和真实框中心点欧氏距离,c表示预测框和真实框最小外界矩形的对角线距离,如下图所示:

绿色框为真实框,黑色框为预测框,灰色框为两者的最小外界矩形框,d表示真实框和预测框的中心点距离,c表示最小外界矩形框的距离。

当2个框完全重合时,

当2个框不相交时:

【不足】 边框回归的三个重要几何因素:重叠面积、中心点距离和长宽比,DIoU 没有包含长宽比因素。

CIoU Loss(2019)

论文地址:https://arxiv.org/pdf/1911.08287.pdf

代码地址:https://github.com/Zzh-tju/DIoU-darknet

【动机】 解决DIoU loss没有包含长宽比因素的不足

【分析】

CIoU的惩罚项是在DIoU的惩罚项基础上加了一个影响因子。

CIoU Loss定义为:

其中  ,

用于做trade-off的参数

【实验】

上表中左边是用5种不同Boudning Box Regression Loss Function的对比,右边是以IoU和GIoU来计算的2种Evaluation的结果;GIoU相对IoU会有2.49点提升,DIoU相对IoU会有3.29点提升,CIoU会有大概5.67点提升,CIoU结合DIoU-NMS使用效果最好,大概会有5.91点提升。

【不足】 在CIoU的定义中,衡量长宽比过于复杂,从两个方面减缓了收敛速度

  1. 长宽比不能取代单独的长宽,比如  都会导致v=0;

  2. 从v的导数可以得到  ,这说明  和  在优化中意义相反。

EIoU Loss(2021)

论文地址:https://arxiv.org/pdf/2101.08158.pdf

【动机】 解决CIoU的定义中不足

【亮点】 引入了解决样本不平衡问题的Focal Loss思想

【分析】

将CIoU的  取代为

EIoU Loss的定义为:

Focal-EIoU Loss的定义为:

focal loss可以理解为对损失加权,常见的分类focal loss为:

最后得到:

【实验】 论文首先尝试直接将EIoU带入,但是效果不好,仅供思路参考,

总结:

  1. 好的目标框回归损失应该考虑三个重要的几何因素:重叠面积,中心点距离,长宽比, 对边框间的物理描述愈发准确。

  2. 注意,使用时各种Loss算法的各个模块之间的配合,例如IoU Loss与NMS算法的组合。

本文仅做学术分享,如有侵权,请联系删文。

重磅!计算机视觉工坊-学习交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有ORB-SLAM系列源码学习、3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、深度估计、学术交流、求职交流等微信群,请扫描下面微信号加群,备注:”研究方向+学校/公司+昵称“,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进去相关微信群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课程(三维重建系列三维点云系列结构光系列手眼标定相机标定、激光/视觉SLAM、自动驾驶等)、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答五个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近4000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~

目标检测回归损失函数总结相关推荐

  1. 目标检测回归损失函数简介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:极市平台 目标检测任务的损失函数由Classificitio ...

  2. 目标检测回归损失函数——IOU、GIOU、DIOU、CIOU、EIOU

    一.IOU Loss 上一篇文章提到L1,L2及其变种只将Bounding box的四个角点分别求loss然后相加,没有引入box四个顶点之间的相关性并且模型在训练过程中更偏向于尺寸更大的物体.在此基 ...

  3. 目标检测回归损失函数——L1、L2、smooth L1

    一. L1 Loss 1. 函数特性 L1 Loss也称为平均绝对值误差(MAE),是指模型预测值f(x)和真实值y之间绝对差值的平均值,公式如下: 其中 和 分别表示第 个样本的预测值及相应真实值, ...

  4. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

    文章目录 1. Smooth L1 Loss 1.1 假设x为预测框和真实框之间的数值差异,常用的L1和L2 Loss定义为: 1.2 上述的3个损失函数对x的导数分别为: 1.3 实际目标检测框回归 ...

  5. 目标检测分类损失函数——Cross entropy、Focal loss

    一.Cross Entropy Loss 交叉熵是用来判定实际的输出与期望的输出的接近程度,刻画的是实际输出与期望输出的距离,也就是交叉熵的值越小,两个概率分布就越接近. 1. CE Loss的定义 ...

  6. 目标检测常用损失函数-类别损失+位置损失

    目录 类别损失 1. 交叉熵损失 Cross Entropy Loss 2. Focal Loss 改进的交叉熵损失函数 位置损失 1. L1 Loss 平均绝对误差(Mean Absolute Er ...

  7. 目标检测常用损失函数

    学习目标检测的同学一定对损失函数非常头疼.在求分类时会遇到0-1损失,交叉熵损失,在求回归框的时候需要用到L1损失.L2损失以及各种IoU损失.而我们本身又不是很了解这些损失函数,网上的教程大多是走数 ...

  8. hrsc2016 下载 数据集_PIoU Loss:倾斜目标检测专用损失函数,公开超难倾斜目标数据集Retail50K | ECCV 2020 Spotlight...

    > 论文提出从IoU指标延伸来的PIoU损失函数,能够有效地提高倾斜目标检测场景下的旋转角度预测和IoU效果,对anchor-based方法和anchor-free方法均适用.另外论文提供了Re ...

  9. yolov5目标检测神经网络——损失函数计算原理

    前面已经写了4篇关于yolov5的文章,链接如下: 1.基于libtorch的yolov5目标检测网络实现--COCO数据集json标签文件解析 2.基于libtorch的yolov5目标检测网络实现 ...

  10. 最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)

    1 小目标检测: 综述: 综述论文Augmentation for small object detection 深度学习笔记(十)Augmentation for small object dete ...

最新文章

  1. 说说Broker服务节点、Queue队列、Exchange交换器?
  2. app手机端连接tomcat电脑端服务器
  3. SAP MM 库存初始化和批量扩充物料仓位
  4. Python 局部变量和全局变量 - Python零基础入门教程
  5. iphone viewdidLoad运行以及参数的传递。
  6. 一些Chrome 调试小技巧汇总
  7. OpenCV--常见图片格式转换与深浅拷贝
  8. php curl详解用法[真的详解]
  9. python api接口调用_python 调用有道api接口的方法
  10. canvas跨域问题
  11. 2020电工(初级)证考试及电工(初级)考试软件
  12. 基于uniapp开发的一款Android、iOS上使用的小说阅读app
  13. ar涂涂乐 技术分析
  14. Help Hanzo(素数筛)
  15. 乔布斯时代的“老人”,一个个都离开苹果了
  16. linux——管道详解
  17. GitHub桌面版和汉化包,使用详细(GitHub Desktop安装,github软件汉化包详细使用过程)
  18. 南开大学 软件学院 操作系统 李旭东老师 复习
  19. arcgis二次开发动态追踪以及提高
  20. 3本相见恨晚的数学好书,终结你的数学恐惧

热门文章

  1. ant jmeter 优化报告
  2. 《How to bake LightMap》
  3. HTTP请求报文格式
  4. 多线程下的资源同步访问
  5. 优秀ASP.NET程序员的修炼之路(转)
  6. 解决Adobe Flash Player不是最新版本方法
  7. localhost和127.0.0.1有什么区别?(转载)
  8. Python 目录及文件操作(os.模块)
  9. leetcode探索二叉树(一)
  10. modbus发送接收_自己编写MODBUS协议代码所踩过的坑