论文阅读-目标检测损失函数GIoU,DIoU,CIoU

该博客详细介绍了目标检测中的三种损失函数:GIoU、DIoU和CIoU。GIoU通过最小凸包解决了IoU在无交集时梯度为0的问题,而DIoU进一步引入中心点距离来加速收敛。CIoU在DIoU基础上考虑了形状比例,以促进模型更快更好地收敛。博客包括每个损失函数的问题提出、解决方案、代码实现以及作者的思考和疑问。
摘要由CSDN通过智能技术生成

目标检测损失函数GIoU,DIoU,CIoU

GIoU论文链接
DIoU和CIoU论文链接

1. GIoU

1.1. 问题提出

1.1.1. 范数损失的缺陷

GIoU之前,主要是以IoU或者 l n n o r m l_n norm lnnorm作为损失函数的,而这些损失函数实际上是不够精细的。也就是说,即使观感上的差距很大,损失的值也会相同。以giou论文里举出的(a)图为例:
范数损失函数的缺陷
此时以 l 2 n o r m l_2norm l2norm作为损失函数(也就是两对点之间的欧氏距离),为了简便起见,固定一个点不动(假设是左下角的点不动),以另一个点为圆心,做一个半径为r的圆,那么此时落在圆上的任意一点与固定点组成的bbox(黑色)和ground truth(绿色)之间的 l 2 n o r m l_2 norm l2norm损失值都是相同的(如a所示),在观感上,我们可能会趋向于最右侧的预测结果,但是在计算机使用 l 2 l_2 l2损失的时候是无法区分的。

1.1.2. IoU损失的缺陷

Iou只在bbox和gt之间有交集的时候才会生效,在他们没有交集的时候IoU始终为0,这样不能为反向传播时提供响应的梯度。例如下面的情况,IoU都为0,此时很难让网络进行调整。
IoU的缺陷

1.2. 解决方案

针对IoU不能适应无交集的问题,提出了最小凸包的方案。
所谓的最小凸集就是恰好包含了gt和bbox的一个矩形,如下图所示,红色就是最小凸集。
最小凸集
G I o U = I o U − C − ( A ∪ B ) C GIoU= IoU - \frac {C-(A \cup B)} {C} GIoU=IoUCC(AB)
在最小凸集的基础上,就解决了在gt与bbox无交集时梯度为0的问题。GIoU实际上就是在最小化这个最小凸集。

1.3 算法与代码

简单实现了以下原论文里的算法,原算法如下:
GIoU算法
代码如下:

def getConvexShape(bbox_gt,bbox_pd):
    return [min(bbox_gt[0],bbox_pd[0]),min(bbox_gt[1],bbox_pd[1]),max(bbox_gt[2],bbox_pd[2]),max(bbox_gt[3],bbox_pd[3])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值