网站首页 > 技术文章 正文
DIoU YOLOv3 | AAAI 2020:更加稳定有效的目标框回归损失
紧接着上面一篇文章,这次是对GIoU损失的一个改进,让我们一起来看看吧。
前言:本篇论文是属于对IOU/GIOU Loss的一个改进,IOU的计算在目标检测里面是一个非常重要的概念,将IOU引入到目标框的回归当中,也是一个常用的操作。而本文提出的DIOU是一种比GIOU更加符合目标框回归的机制,将目标与anchor之间的距离,重叠率以及尺度都考虑进去,使得目标框回归变得更加稳定,不会像IOU和GIOU一样出现训练过程中发散等问题。
一、IOU和GIOU回顾
IoU损失可以表示为:
IoU的缺点是当两个框不想相交时,IoU损失总是1,不能给出优化方向。
GIoU损失可以表示为:
可以看到,GIoU在IoU的基础上添加了一个项,其中C表示包含两个框的最小矩形,因此可以优化两个框不相交的情况。不过,GIoU也存在着问题。当两个框相交时,GioU损失退化为IoU损失。因此,当包含预测框bbox和地面真值bbox时,特别是在水平和垂直方向上,很难进行优化。这里的一个猜想是,在水平方向和垂直方向上,损失的值没有在其他方向上增长得快,因此对这两个方向的惩罚不够,导致收敛速度减慢。如下图所示:
在上图的情况下,GIoU损耗退化为IoU损耗,而提出DIoU损耗仍然可以区分。 绿色和红色分别表示目标框和预测框。
二、作者对Iou和GIoU的实验分析
作者通从实验结果的角度说明了IoU和GIoU存在的问题。实验设定如下图所示,
- 其中绿色框代表仿真实验需要回归的七个不同尺度的目标框,七个目标框的中心点坐标都是(10 * 10)。
- 蓝色的点代表了所有anchor的中心点,各个方向都有,各种距离都有。而且每个面积的anchor框又有7种比例尺寸。有5000个蓝色点,因此总共有5000*7*7个anchor框,而且每个框都需要回归到七个目标框去,因此一共有5000*7*7*7个回归案例。
最终的实验结果如下:图中展示的训练同样的代数后(200代),三个loss最终每个anchor的误差分布
- IoU:从IoU误差的曲线可以发现,anchor越靠近边缘,误差越大,那些与目标框没有重叠的anchor基本无法回归。
- GIoU:从GIoU误差的曲线我们可以发现,对于一些没有重叠的anchor,GIoU的表现要比IoU更好。但是由于GIoU仍然严重的依赖IoU,因此在两个垂直方向,误差很大,基本很难收敛,这就是GIoU不稳定的原因。
- DIoU:从DIoU误差的曲线我们可以发现,对于不同距离,方向,面积和比例的anchor,DIoU都能做到较好的回归。
上图进一步解释了GIoU不稳定以及收敛很慢的原因。上图中第一行是不同次数的迭代后,anchor的偏移结果。第二行是DIoU的回归过程,其中绿色框为目标框,黑色框为anchor,红色框为不同次数的迭代后,anchor的偏移结果。
从图中可以看到,GIoU在回归的过程中,从损失函数的形式我们发现,当IoU为0时,GIoU会先尽可能让anchor能够和目标框产生重叠,之后GIoU会渐渐退化成IoU回归策略,因此整个过程会非常缓慢而且存在发散的风险。而DIoU考虑到anchor和目标之间的中心点距离,可以更快更有效更稳定的进行回归。
三、作者的思考
基于GIoU存在的问题,作者提出了两个问题:
- 直接最小化anchor框与目标框之间的归一化距离是否可行,以达到更快的收敛速度。
- 如何使回归在与目标框有重叠甚至包含时更准确、更快。
四、DIoU的提出——第一个问题
DIoU的定义:
上述损失函数中,b,bgt分别代表了anchor框和目标框的中心点,且p代表的是计算两个中心点间的欧式距离。c代表的是能够同时覆盖anchor和目标框的最小矩形的对角线距离。因此DIoU中对anchor框和目标框之间的归一化距离进行了建模。直观的展示如下图所示。
DIoU的优点如下:
1.与GIoU loss类似,DIoU loss在与目标框不重叠时,仍然可以为边界框提供移动方向。
2.DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。
3.对于包含两个框在水平方向和垂直方向上这种情况,DIoU损失可以使回归非常快,而GIoU损失几乎退化为IoU损失。
五、CIoU的提出——第二个问题
一个好的目标框回归损失应该考虑三个重要的几何因素:重叠面积、中心点距离、长宽比。
- GIoU:为了归一化坐标尺度,利用IoU,初步解决IoU为零的情况。
- DIoU:DIoU损失同时考虑了边界框的重叠面积和中心点距离。
anchor框和目标框之间的长宽比的一致性也是极其重要的。基于此,作者提出了Complete-IoU Loss。
上述损失函数中,CIoU比DIoU多出了α和v这两个参数。其中α是用于平衡比例的参数。v用来衡量anchor框和目标框之间的比例一致性。 从的定义式来看,损失函数会更加倾向于往重叠区域增多的方向优化,尤其是IoU为0的情况,这满足我们的要求。同时,在进行nms阶段,一般的评判标准是IOU,这个地方作者推荐替换为DIOU,这样考虑了中心点距离这一个信息,效果又有一定的提升。
DIoU Loss的优点:
- 与GIoU Loss类似,当边界框不与目标框重叠时,DIoU Loss仍然可以为边界框提供移动方向。
- DIoU损失可以直接最小化两个目标盒之间的距离,因此它比GIoU损失收敛快得多。
- 在水平和垂直两种情况下,DIoU损失可以使收益损失迅速下降,而GIoU损失几乎退化为IoU损失。
SSD的DIoU计算,可惜是pytorch:
def Diou(bboxes1, bboxes2):
rows = bboxes1.shape[0]
cols = bboxes2.shape[0]
dious = torch.zeros((rows, cols))
if rows * cols == 0:#
return dious
exchange = False
if bboxes1.shape[0] > bboxes2.shape[0]:
bboxes1, bboxes2 = bboxes2, bboxes1
dious = torch.zeros((cols, rows))
exchange = True
# #xmin,ymin,xmax,ymax->[:,0],[:,1],[:,2],[:,3]
w1 = bboxes1[:, 2] - bboxes1[:, 0]
h1 = bboxes1[:, 3] - bboxes1[:, 1]
w2 = bboxes2[:, 2] - bboxes2[:, 0]
h2 = bboxes2[:, 3] - bboxes2[:, 1]
area1 = w1 * h1
area2 = w2 * h2
center_x1 = (bboxes1[:, 2] + bboxes1[:, 0]) / 2
center_y1 = (bboxes1[:, 3] + bboxes1[:, 1]) / 2
center_x2 = (bboxes2[:, 2] + bboxes2[:, 0]) / 2
center_y2 = (bboxes2[:, 3] + bboxes2[:, 1]) / 2
inter_max_xy = torch.min(bboxes1[:, 2:],bboxes2[:, 2:])
inter_min_xy = torch.max(bboxes1[:, :2],bboxes2[:, :2])
out_max_xy = torch.max(bboxes1[:, 2:],bboxes2[:, 2:])
out_min_xy = torch.min(bboxes1[:, :2],bboxes2[:, :2])
inter = torch.clamp((inter_max_xy - inter_min_xy), min=0)
inter_area = inter[:, 0] * inter[:, 1]
inter_diag = (center_x2 - center_x1)**2 + (center_y2 - center_y1)**2
outer = torch.clamp((out_max_xy - out_min_xy), min=0)
outer_diag = (outer[:, 0] ** 2) + (outer[:, 1] ** 2)
union = area1+area2-inter_area
dious = inter_area / union - (inter_diag) / outer_diag
dious = torch.clamp(dious,min=-1.0,max = 1.0)
if exchange:
dious = dious.T
return dious
猜你喜欢
- 2024-10-12 Gaussian YOLOv3 : bbox预测值的高斯不确定性 | ICCV 2019
- 2024-10-12 在目标检测中大物体的重要性 目标检测用途
- 2024-10-12 陈明教授等:水下底栖生物轻量化目标检测算法YOLOv7-RFPCW
- 2024-10-12 手把手教物体检测——YOLOV4 物体检测 pytorch
- 2024-10-12 深度学习:读论文GPT-3《YOLO-v1 to YOLO-v8》
- 2024-10-12 YOLOv4中的数据增强 yolov5数据增强代码
- 2024-10-12 AAAI2020目标检测算法DIoU YOLOv3 更加稳定有效的目标框回归损失
- 2024-10-12 高斯YOLOv3:使用定位不确定性进行自动驾驶的精确快速物体检测器
- 2024-10-12 深度学习——YOLOv4损失函数全面解析
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)