一文详解目标检测损失函数:IOU、GIOU、DIOU、CIOU

作者 | 记忆的迷谷 

编辑 | 极市平台

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心技术交流群

后台回复【数据集下载】获取计算机视觉近30种数据集!

IOU损失函数:

136a8986145ab192c90715ec79bcc461.jpeg

图片展示了3组矩形框重合的示例:绿色是真实目标存在的框GT box,黑色是预测的box位置。通过观察上图,发现第三个预测效果较好,因为预测目标的位置与真实目标最为接近。但是计算三组l2损失发现损失值都为8.41,然而IOU的值不同。因此说明l2损失不能准确反应两个目标边界框重合的程度,因此诞生了IOU损失函数。

63b2dadfd049b6257847c9d32b6c3f8e.jpeg

上图是IOU损失函数的计算方法:首先绿色的框表示真实目标的位置,蓝色框代表预测框的位置。IOU的计算方法很简单,用两个方框相交的面积/两个方框合并的面积,将得到的值取以e为底对数,前面添上负号就得到了IOU损失函数。

GIOU损失函数:

cfd62111042e6feefe1d5178f8640054.jpeg

如图:绿色是真实目标边界框,红色是预测目标边界框,最外面的蓝色边框是将红绿矩形用最小矩形框起来的边界,Ac是蓝色矩形框的面积,u对应红绿矩形的并集面积。

如果当红绿矩形完美重合,那么IOU =1, Ac = u = 预测目标边界框面积,GIOU = 1 - 0 = 1。如果两个目标分开很远,Ac趋向于很大的数值,u趋于0,IOU也趋于0,GIOU = 0 - 1 = -1。因此GIOU取值的区间是[-1, 1]。

044516899c6023ef6510b5956ce9be65.jpeg

GIOU损失函数的最终表达形式是L(GIOU) = 1 - GIOU

edecd1951a41ca3ed95a5c56132c9cd1.jpeg

上表是原论文中的实验效果:第一列(AP-IoU一列)采用MSE(l2损失)的mAP=0.461,采用IoU损失得到的mAP=0.466,有些许提升。如果采用GIoU loss,能达到0.477,效果比IOU更好。

77c85d928690eea1af7bd036de2f925f.jpeg

但是,GIOU也存在它的缺点:当两个预测框高宽相同,且处于同一水平面时,GIOU就退化为IOU。此外,GIOU和IOU还有两个缺点:收敛较慢、回归不够准确。

DIOU 损失函数:

27d0aee8ac73c66342f3894b4c551fa7.jpeg

在介绍DIOU之前,先来介绍采用DIOU的效果:如图,黑色代表anchor box, 蓝色红色代表default box,绿色代表真实目标存在的框GT box的位置,期望红蓝框与绿框尽可能重合。第一行是使用GIOU训练网络,让预测边界框尽可能回归到真实目标边界框中,迭代到400次后才勉强重合。第二行使用DIOU训练网络,到达120步时,发现与目标边界框已经完全重合。可以看出,相对于GIOU,DIOU的不仅收敛速度更快,准确率也更高。

d2b266c252c3b28864b0ca70f52863cf.jpeg

我们再看一组图,图中给出了3组目标边界框与目标边界框的重合关系,显然他们的重合位置不相同的,我们期望第三种重合(两个box中心位置尽可能重合。这三组计算的IOU loss和GIoU loss是一模一样的,因此这两种损失不能很好表达边界框重合关系)。但是DIOU计算出的三种情况的损失是不一样的,显然DIOU更加合理。

4dae126e3828d13759fae113234f73f5.jpeg
DIOU计算公式

ρ代表b和b(gt)之间的欧氏距离

9afb263150baa5c768a731fe0cfcea7b.jpeg

结合这张图理解一下公式:b代表预测中心坐标的参数,也就是黑框的中心点,bgt代表真实目标边界框中心的参数,即绿框中心点。ρ^2就是两个中心点距离的平方,即图中的d(红线)的平方,c代表两个矩形的最小外接矩形对角线(蓝线)长度。如果两个框完美重叠,d=0 ,IOU = 1,DIOU = 1 - 0 = 1 。如果两个框相距很远,d^2/c^2 趋近于1,IOU = 0, DIOU = 0 - 1 = -1 。因此,DIOU的取值范围也是[-1,1]。

f0dbbbebdb0b456409ab1f2a582097cd.jpeg

DIOU最终损失函数为:L(DIoU) = 1 - DIOU

409d49ee4f2723612eb83671e01a642e.jpeg

当采用DIOU loss,mAP为46.57,相较于Iou和GIOU准确率都有提高,且收敛速度相比IOU提高了3%左右。

CIOU LOSS:

论文中,作者表示一个优秀的回归定位损失应该考虑三种几何参数:重叠面积、中心点距离、长宽比。CIoU就是在DIoU的基础上增加了检测框尺度的loss,增加了长和宽的loss,这样预测框就会更加的符合真实框。

77eee61860cba181f3fb0f2195e21e7c.jpeg

因此CIOU的三项恰好对应IOU,中心点距离,长宽比的计算。CIOU loss = 1 - CIoU。α和v为长宽比,计算公式如上图所示:w、h和w(gt)、h(gt)分别代表预测框的高宽和真实框的高宽。

4bed1e1a45cebb1506e68ae7a3c41ac3.jpeg

如果使用CIOU,mAP可以达到49.21%,相比于GIoU涨了1.5个百分点。CIOU(D)指在验证模型评价mAP时,将IOU换成DIOU,准确率还有提升 。

134c336388185c9a6983f0f0681300b4.jpeg

实际检测效果中,CIOU相比GIOU在框选目标时,能找到一个更合适的框选位置。如上图所示,第一行的两张图中,第一个猫猫使用GIOU损失函数,发现有一只猫耳朵在框外,第二只猫猫使用DIOU损失函数,将猫猫的位置准确标出。同样,第二行中,第一只狗狗虽然完整标出,但并不能准确框出狗狗的轮廓,而第二张图检测框的位置刚好合适。

自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、多传感器融合、SLAM、光流估计、轨迹预测、高精地图、规划控制、AI模型部署落地等方向;

加入我们:自动驾驶之心技术交流群汇总!

自动驾驶之心【知识星球】

想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球(三天内无条件退款),日常分享论文+代码,这里汇聚行业和学术界大佬,前沿技术方向尽在掌握中,期待交流!

d1a567fe0e5e56ef3ee92e59d445e227.jpeg

### 更改YOLOv8中的损失函数 在YOLOv8中更改默认的损失函数CIoUDIoU、EIoUGIoU、SIoU或WIoU涉及修改模型训练配置文件以及可能调整部分源码。具体操作如下: #### 修改配置文件 通常情况下,YOLO框架允许用户通过编辑配置文件指定使用的损失函数类型。对于YOLOv8而言,在`cfg/training/hyp.scratch-low.yaml`或其他自定义超参数设置文件内找到对应于边界框回归项的部分。 例如,要切换到CIoU作为新的损失度量标准,则需定位至该文件内的相应字段,并将其值设为所需的选项之一[^2]。 ```yaml box: 0.05 # 原始 IoU loss 权重, 需改为 ciou_loss 或其他形式 ``` 应更新为此类格式以启用特定类型的IoU变体: ```yaml ciou: True # 启用 CIoU 损失计算方式 diou: False # 关闭 DIoU (可根据需求调整) eiou: False # ... giou: False # siou: False # wiou: False # ``` 请注意不同版本间可能存在细微差异;上述方法适用于大多数场景下的常规实践指导。 #### 编辑源代码 如果仅靠修改配置无法满足需求,那么就需要深入研究官方提供的API文档和现有实现细节,进而对手动编码做出适当改动。这一步骤主要集中在负责处理位置预测逻辑的相关模块上。 假设已经决定采用某种改进型IoU(比如EIoU),则可以在项目根目录下查找名为`loss.py`之类的脚本文件,其中包含了各类损失组件的具体定义。在此基础上增加新功能或将已有算法替换成目标方案即可完成定制化改造工作[^1]。 ```python def compute_iou(pred_boxes, target_boxes): """ 计算两个矩形框间的交并比 """ def eiou_loss(): # 实现 EIoU 的核心运算过程... pass if config['use_eiou']: return eiou_loss() else: # 默认行为保持不变... pass ``` 以上就是关于如何在YOLOv8里边引入新型态IoU损失机制的大致思路概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值