最近在实验中发现,3D检测的精度和cls_loss
的关系非常的大,一般来说,按照SECOND的代码训练下降到cls_loss大致为0.8左右时,会有一个不错的效果,在验证集上可以达到0.88左右的精度(对car-easy)而言,但是当loss继续向下降的时候,反而得不到刚好的效果,改了一些网络结构,加了一些特征,发现改结构的效果并不如从特征或者其他方面着手容易,因此研究别人如何通过LOSS来提高论文精度的。
在2D / 3D物体检测任务中,IoU 已被广泛用作评估度量以评估测试阶段中不同检测器的性能。然而,在训练阶段期间,常常采用常见距离损失(例如,L1或L2)
作为损失函数,以最小化预测和地面实况边界框(Bbox)之间的差异。为了消除训练和测试之间的性能差距
,在[1]和[2]中引入了IoU损失
用于2D物体检测。不幸的是,所有这些方法仅适用于axis-aligned 2D Bboxes(轴对齐)
,这些Bbox不能应用于具有旋转Bbox的更一般的对象检测任务。
贡献:
两个旋转Bbox的IoU计算
,IoU损失层
为了比较不同检测器的性能,通常采用IoU度量进行评估,与L1和L2
损失相比,这是一个完全不同的度量。
一般来说IOU仅仅是用作NMS的处理,而不是加入到LOSS中。但是和L1,L2
对比起来看,IOU loss
有以下的优点:
(1)在IoU计算过程中考虑了Bbox的所有形状属性,例如位置,尺寸和方向等。
(2)面积计算过程,已经隐含的编码了参数之间的关系,而不是将它们视为L1和L2损失中的独立变量。
(3)IoU指标对于该问题是尺度不变的,适合解决每个参数之间的尺度和范围差异
L1 或L2 距离损失
)进行Bbox回归。IOU LOSS
都是针对axis-aligned Bbox
设计的理解 axis-aligned Bbox
,表示的含义就是和边界是平行的,就是二维检测的检测框都是和二维图片边界平行的意思。但是在3维中,这是一个很困难的方法,因为这是旋转
的。
IOU 的另外一个名字叫Jaccard index
,其计算公式为:
3.1. IoU Definition for Object Detection
3.2. Axis-aligned BBox
对于axis-aligned
的情形,作者给出的计算步骤如下,不做过多解释,很简单。
3.3. Rotated BBox
作者这里提到了两中计算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下进行计算
上面我们知道了应该如何求的IOU LOSS,但是最重要的是我们应该怎么把这个IOU当做LOSS来计算。
4.1. IoU as Loss
和很多前人在axis-aligned
的工作一样,作者定义IOU LOSS如下:这是因为实际上IOU的值是介于0~1,因此就这么设计了。
作者为此IoU loss layer实现了Forward和backward操作。
这是个啥去?我的理解就是前馈就是计算LOSS,backward应该是通过LOSS更新对应的一些参数。?
Forward
也就是上面那个计算的表格,Algorithm 2 IOU
Backward
这里的主要内容正是反向传播的内容,作者提到大部分的LOSS的反向传播已经可以通过通用框架实现,但是IOU LOSS比较特殊,因此不是很容易实现,作者在后续会把这个项目开源出来(???没找到)
作为IoU的通用版本,在[2]中已经提出了GIoU来处理两个形状没有交叉的情况。在GIoU中,已经给出了一个定义来确定两个不相交的Bbox之间的距离。一般而言,对于任何两个凸起的形状A,B,最小区域边界形状C被定义为:包围A和B的最小凸起形状。通常,C应与A和B共享相同的形状类型,以便于计算。最后,将GIou
定义为
与IoU损失类似,我们还针对旋转Bbox的情况扩展了GIoU损失。