IoU Loss for 2D/3D Object Detection 学习笔记

Brief

最近在实验中发现,3D检测的精度和cls_loss的关系非常的大,一般来说,按照SECOND的代码训练下降到cls_loss大致为0.8左右时,会有一个不错的效果,在验证集上可以达到0.88左右的精度(对car-easy)而言,但是当loss继续向下降的时候,反而得不到刚好的效果,改了一些网络结构,加了一些特征,发现改结构的效果并不如从特征或者其他方面着手容易,因此研究别人如何通过LOSS来提高论文精度的。

Abstract

在2D / 3D物体检测任务中,IoU 已被广泛用作评估度量以评估测试阶段中不同检测器的性能。然而,在训练阶段期间,常常采用常见距离损失(例如,L1或L2)作为损失函数,以最小化预测和地面实况边界框(Bbox)之间的差异。为了消除训练和测试之间的性能差距,在[1]和[2]中引入了IoU损失用于2D物体检测。不幸的是,所有这些方法仅适用于axis-aligned 2D Bboxes(轴对齐),这些Bbox不能应用于具有旋转Bbox的更一般的对象检测任务。

贡献

  1. 我们先研究两个旋转Bbox的IoU计算
  2. 然后为2D和3D对象检测任务实现一个统一的框架,IoU损失层
  3. 通过将IoU损耗层集成到几个最先进的3D对象检测框架(如SECOND,PointPillars和Point R-CNN)中,其优越性已经在公共KITTI 3D对象检测基准上得到验证。

Introduction

为了比较不同检测器的性能,通常采用IoU度量进行评估,与L1和L2损失相比,这是一个完全不同的度量。

一般来说IOU仅仅是用作NMS的处理,而不是加入到LOSS中。但是和L1,L2对比起来看,IOU loss有以下的优点:

(1)在IoU计算过程中考虑了Bbox的所有形状属性,例如位置,尺寸和方向等。
(2)面积计算过程,已经隐含的编码了参数之间的关系,而不是将它们视为L1和L2损失中的独立变量。
(3)IoU指标对于该问题是尺度不变的,适合解决每个参数之间的尺度和范围差异

1、IoU Loss for Object Detection

  • 大多数框架使用IoU的替代损失(例如,L1 或L2 距离损失)进行Bbox回归。
  • 现在的已有的IOU LOSS都是针对axis-aligned Bbox设计的

理解 axis-aligned Bbox,表示的含义就是和边界是平行的,就是二维检测的检测框都是和二维图片边界平行的意思。但是在3维中,这是一个很困难的方法,因为这是旋转的。

2、IoU for Object Detection

IOU 的另外一个名字叫Jaccard index,其计算公式为:
在这里插入图片描述
3.1. IoU Definition for Object Detection
在这里插入图片描述
3.2. Axis-aligned BBox

对于axis-aligned的情形,作者给出的计算步骤如下,不做过多解释,很简单。
在这里插入图片描述
3.3. Rotated BBox

作者这里提到了两中计算IOU的策略:

  • 将3D框投影到BEV视角下(在我研究的代码中也是如此做的)
  • 直接计算3D的IOU

作者这里优先考虑2D情形,最后考虑3D的情形实际就是给加上一个高度维度进行类似的计算。
如下是针对上图中的二维rotated bounding boxes的情形的IOU计算:
在这里插入图片描述
(1)计算gt的面积,也就是先计算两点之间的距离,然后再通过长×宽的方式求得gt的面积
(2)计算预测框的面积:同样的方式。
(3)确定重叠区域的顶点。
(4)按逆时针顺序对这些多边形顶点进行排序
(5)计算overlap

这里的核心就是该如何确定交点和根据交点得到相交的面积。但是作者还没有在文章中给出比较清晰的方法,需要进一步研究代码(下一个工作吧)

一旦有了这样的二维上的旋转的IOU计算公式,那么我们只需要乘以一个高度就得到的对应的3D IOU。正如我们之前提到的,自动驾驶中的3D对象通常由具有七个参数的3D Bbox表示,其中三个用于位置,三个用于维度,一个用于旋转。在这种情况下,两个3D Bbox的IoU可以计算为

在这里插入图片描述
这也就很好的解释了很多的代码中计算IOU为什么直接转移到BEV下进行计算

4、IoU Loss for 2D/3D BBox Regression

上面我们知道了应该如何求的IOU LOSS,但是最重要的是我们应该怎么把这个IOU当做LOSS来计算。

4.1. IoU as Loss

和很多前人在axis-aligned的工作一样,作者定义IOU LOSS如下:这是因为实际上IOU的值是介于0~1,因此就这么设计了。
在这里插入图片描述

IoU Loss Layer

作者为此IoU loss layer实现了Forward和backward操作。

这是个啥去?我的理解就是前馈就是计算LOSS,backward应该是通过LOSS更新对应的一些参数。?

Forward

也就是上面那个计算的表格,Algorithm 2 IOU

Backward

这里的主要内容正是反向传播的内容,作者提到大部分的LOSS的反向传播已经可以通过通用框架实现,但是IOU LOSS比较特殊,因此不是很容易实现,作者在后续会把这个项目开源出来(???没找到)

Extension to GIoU Loss

作为IoU的通用版本,在[2]中已经提出了GIoU来处理两个形状没有交叉的情况。在GIoU中,已经给出了一个定义来确定两个不相交的Bbox之间的距离。一般而言,对于任何两个凸起的形状A,B,最小区域边界形状C被定义为:包围A和B的最小凸起形状。通常,C应与A和B共享相同的形状类型,以便于计算。最后,将GIou定义为
在这里插入图片描述
在这里插入图片描述
与IoU损失类似,我们还针对旋转Bbox的情况扩展了GIoU损失。

Experimental Results

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值