论文提出了IoU-based的DIoU loss和CIoU loss,以及建议使用DIoU-NMS替换经典的NMS方法,充分地利用IoU的特性进行优化。并且方法能够简单地迁移到现有的算法中带来性能的提升,实验在YOLOv3上提升了5.91mAP,值得学习

论文:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

Introduction


IoU

  IoU是目标检测里面很重要的一个指标,通过预测的框和GT间的交集与并集的比例进行计算,经常用于评价bbox的优劣 。但一般对bbox的精调都采用L2范数,而一些研究表明这不是最优化IoU的方法,因此出现了IoU loss

IoU loss

  IoU loss顾名思义就是直接通过IoU计算梯度进行回归,论文提到IoU loss的无法避免的缺点:当两个box无交集时,IoU=0,很近的无交集框和很远的无交集框的输出一样,这样就失去了梯度方向,无法优化。IoU loss的实现形式有很多种,除公式2外,还有UnitBox的交叉熵形式和IoUNet的Smooth-L1形式

  这里论文主要讨论的类似YOLO的检测网络,按照GT是否在cell判断当前bbox是否需要回归,所以可能存在无交集的情况。而一般的two stage网络,在bbox regress的时候都会卡$IoU\ge 0.5$,不会对无交集的框进行回归

GIoU loss

  GIou loss在IoU loss的基础上增加一个惩罚项,$C$为包围预测框$B$和$B^{gt}$的最小区域大小,当bbox的距离越大时,惩罚项将越大

  尽管GIoU解决了IoU的梯度问题,但他仍然存在几个限制:

  • 如图1所示,在训练过程中,GIoU倾向于先增大bbox的大小来增大与GT的交集,然后通过公式3的IoU项引导最大化bbox的重叠区域

  • 如图2中的包含情况,GIoU会退化成IoU
  • 由于很大程度依赖IoU项,GIoU需要更多的迭代次数来收敛,特别是水平和垂直的bbox(后面会分析)。一般地,GIoU loss不能很好地收敛SOTA算法,反而造成不好的结果

DIoU

  综合上面的分析,论文提出Distance-IoU(DIoU) loss,简单地在IoU loss基础上添加一个惩罚项,该惩罚项用于最小化两个bbox的中心点距离。如图1所示,DIoU收敛速度和效果都很好,而且DIoU能够用于NMS的计算中,不仅考虑了重叠区域,还考虑了中心点距离。另外,论文考虑bbox的三要素,重叠区域,中心点距离和长宽比,进一步提出了Complete IoU(CIoU) loss,收敛更快,效果更好

Analysis to IoU and GIoU Losses


  为了全面地分析IoU loss和GIoU的性能,论文进行了模拟实验,模拟不同的距离、尺寸和长宽比的bbox的回归情况

Simulation Experiment

  如图3所示,实验选择7个不同长宽比(1:4, 1:3, 1:2, 1:1, 2:1, 3:1, 4:1)的单元box(area=1)作为GT,单元框的中心点固定在(7, 7),而实验共包含5000 x 7 x 7个bbox,且分布是均匀的:

  • Distance:在中心点半径3的范围内均匀分布5000中心点,每个点带上7种scales和7种长宽比
  • Scale:每个中心点的尺寸分别为0.5, 0.67, 0.75, 1, 1.33, 1.5, 2
  • Aspect ratio:每个中心点的长宽比(=为1:4, 1:3, 1:2, 1:1, 2:1, 3:1, 4:1

  给定一个loss函数$\mathcal{L}$,可以通过梯度下降来模拟bbox优化的过程。对于预测的bbox $B_i$,$B_i^t$为$t$阶段的结果,$\triangledown B_i{t-1}$为$\mathcal{L}$对$B_it$的梯度,使用$\eta(2-IoU_i^{t-1})$来加速收敛。bbox的优化评价使用$\mathcal{l}_1$-norm,共训练200轮,error曲线如图3b所示

Limitations of IoU and GIoU Losses

  论文将5000个中心点上的bbox在最后阶段的total error进行了可视化。IoU loss只对与target box有交集的bbox有效,因为无交集的bbox的$\triangledown B$为0。而GIoU由于增加了惩罚函数,盆地区域明显增大,但是垂直和水平的区域依然保持着高错误率,这是由于GIoU的惩罚项经常很小甚至为0,导致训练需要更多的迭代来收敛

The Proposed Method


  一般而言,IoU-based loss可以定义为公式5,$R(B,B{gt})$是预测box$B$和$B{gt}$的惩罚项

Distance-IoU Loss

  论文提出了能减少两个box中心点间的距离的惩罚项,$b$和$b{gt}$分别表示$B$和$B{gt}$的中心点。$\rho(\cdot)$是欧氏距离,$c$是最小包围两个bbox的框的对角线长度

  DIoU loss的完全定义如公式7

  DIoU loss的惩罚项能够直接最小化中心点间的距离,而GIoU loss意在减少外界包围框的面积

  DIoU loss保留了IoU loss和GIoU loss的一些属性:

  • DIoU loss依然是尺寸无关的,不会大尺寸产生大的loss,小尺寸产生小的loss那样
  • 类似于GIoU loss,DIoU loss能够为无交集的bbox提供梯度方向
  • 当bbox完全重合时,$\mathcal{L}{IoU}=\mathcal{L}{GoU}=\mathcal{L}{DoU}=0$,当bbox很远时,$\mathcal{L}{GoU}=\mathcal{L}_{DoU}\to 2$

  在模拟实验中,发现DIoU loss也有一些独有的属性:

  • 如图1和图3所示,DIoU loss能够直接最小化bbox的中心点距离。因此,他的收敛很快
  • 在包含的情况下,或垂直和水平的情况下,DIoU loss的收敛非常快,而GIoU loss则几乎退化成了IoU loss

Complete IoU loss

  论文考虑到bbox回归三要素中的长宽比还没被考虑到计算中,因此,进一步在DIoU的基础上提出了CIoU。其惩罚项如公式8,其中$\alpha$是权重函数,而$v$用来度量长宽比的相似性

  完整的损失函数定义如公式10

  $\alpha$的定义如公式11,重叠区域能够控制权重的大小

  最后,CIoU loss的梯度类似于DIoU loss,但还要考虑$v$的梯度。在长宽在$[0,1]$的情况下,$w2+h2$的值通常很小,会导致梯度爆炸,因此在实现时将$\frac{1}{w2+h2}$替换成1

Non-Maximum Suppression using DIoU

  在原始的NMS中,IoU指标用于抑制多余的检测框,但由于仅考虑了重叠区域,经常会造成错误的抑制,特别是在bbox包含的情况下。因此,可以使用DIoU作为NMS的标准,不仅考虑重叠区域,还考虑了中心点距离

  其中$s_i$是分类置信度,$\epsilon$为NMS阈值,$\mathcal{M}$为最高置信度的框。DIoU-NMS倾向于中心点距离较远的box存在不同的对象,而且仅需改几行代码,DIoU-NMS就能够很简单地集成到目标检测算法中

Experimental Results


YOLO v3 on PASCAL VOC

  在YOLOv3上进行实验对比,DIoU loss和CIoU的效果都很显著,mAP分别提升3.29%和5.67%,而AP75则分别提升6.40%和8.43%,而使用DIoU-NMS则能进一步提升,幅度达到5.91%和9.88%

SSD on PASCAL VOC

  在SSD-FPN上进行实验对比,因为本身模型已经精度很好了,DIoU loss和CIoU的效果不是很显著,但仍有提升。mAP分别提升0.59%和0.84%,而AP75则分别提升1.77%和2.59%,而使用DIoU-NMS则能进一步提升效果

Faster R-CNN on MS COCO

  在Faster R-CNN ResNet-50-FPN上,由于Faster R-CNN本身提供的bbox质量都比较高(即在图4的盆地),因此,GIoU的优化都很小,但此时DIoU和CIoU则表现了不错的优化效果。注意到,CIoU在小物体上的性能都有所下降,可能由于长宽比对小物体的检测贡献不大,因为此时中心点比长宽比重要

  图7对GIoU和CIoU的结果进行了可视化,可以看到,在中大型物体检测上,CIoU的结果比GIoU要准确

Discussion on DIoU-NMS

  如图8所示,DIoU-NMS能够更好地引导bbox的消除

  为了进一步验证DIoU-NMS的效果,进行了对比实验。如图9所示,DIoU-NMS的整体性能都比原生的NMS效果要好

Conclusion


  论文提出了两种新的IoU-based损失函数,DIoU loss和CIoU loss:DIoU loss最小化bbox间的中心点距离,从而使得函数快速收敛;CIoU loss则在DIoU loss的基础上加入长宽比的考量,能够进一步地快速收敛和提升性能。另外论文提出DIoU-NMS来代替原生的NMS,充分地利用IoU的特性进行优化,从实验结果来看,效果也是很好的









写作不易,未经允许不得转载~

更多内容请关注知乎专栏/微信公众号【晓飞的算法工程笔记】

AAAI 2020 | DIoU和CIoU:IoU在目标检测中的正确打开方式的更多相关文章

  1. 目标检测中的IOU和CIOU原理讲解以及应用(附测试代码)

    上期讲解了目标检测中的三种数据增强的方法,这期我们讲讲目标检测中用来评估对象检测算法的IOU和CIOU的原理应用以及代码实现. 交并比IOU(Intersection over union) 在目标检 ...

  2. 目标检测算法(1)目标检测中的问题描述和R-CNN算法

    目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...

  3. 目标检测 1 : 目标检测中的Anchor详解

    咸鱼了半年,年底了,把这半年做的关于目标的检测的内容总结下. 本文主要有两部分: 目标检测中的边框表示 Anchor相关的问题,R-CNN,SSD,YOLO 中的anchor 目标检测中的边框表示 目 ...

  4. 【计算机视觉】目标检测中的指标衡量Recall与Precision

    [计算机视觉]目标检测中的指标衡量Recall与Precision 标签(空格分隔): [图像处理] 说明:目标检测性能指标Recall与Precision的理解. Recall与Precision ...

  5. Adaboost原理及目标检测中的应用

    Adaboost原理及目标检测中的应用 whowhoha@outlook.com Adaboost原理 Adaboost(AdaptiveBoosting)是一种迭代算法,通过对训练集不断训练弱分类器 ...

  6. 目标检测中proposal的意义

    在目标检测中,从很早就有候选区域的说法,也是在2008年可能就有人使用这个方法,在2014年的卷积神经网络解决目标检测问题的文章中,这个候选框方法大放异彩,先前的目标检测方法主要集中在使用滑动窗口的方 ...

  7. 目标检测中的bounding box regression

    目标检测中的bounding box regression 理解:与传统算法的最大不同就是并不是去滑窗检测,而是生成了一些候选区域与GT做回归.

  8. 目标检测中的anchor-based 和anchor free

    目标检测中的anchor-based 和anchor free 1.  anchor-free 和 anchor-based 区别 深度学习目标检测通常都被建模成对一些候选区域进行分类和回归的问题.在 ...

  9. 目标检测中特征融合技术(YOLO v4)(下)

    目标检测中特征融合技术(YOLO v4)(下) ASFF:自适应特征融合方式 ASFF来自论文:<Learning Spatial Fusion for Single-Shot Object D ...

随机推荐

  1. github新建Repositories后具体操作步骤

    添加用户信息 第一个要配置的是你个人的用户名称和电子邮件地址.这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新,所以会随更新内容一起被永久纳入历史记录: 1 2 git c ...

  2. fastDFS 一二事 - 简易服务器搭建之--阿里云

    第一步:安装fastDFS依赖libevent工具包 yum -y install libevent 第二步:解压libfastcommon-1.0.7.tar.gz文件 tar -zvxf libf ...

  3. nginx 代理第三方邮件站点

    需求:公司业务服务器使用的是阿里云,要求内网(仅有内网IP)所有流量走网关服务器(有外网IP及内网IP),内网服务器需要调用一个公网上的第三方邮件站点.在参考了https://www.linuxba. ...

  4. classnames

    在React中编写模板时给标签添加class. 如果是固定的className="XX"就可以了. 如果要根据状态值动态应用或去除, 或使用多个class时就麻烦了. 可以使用cl ...

  5. spring cloud实战 1-高可用注册中心

    创建父maven项目 提交代码至GitHub 创建eureka-server-1 项目搭建两种方式: 父pom中继承spring-boot-starter-parent,子pom中直接结成父pom.该 ...

  6. 成为数据专家,你只差一个Quick Insights的距离

    身处如今的大数据时代,你真的知道如何处理数据和分析数据吗?或许那些被你忽视的数据背后就暗藏着重要的商业灵感.并非人人都是数据专家,有时候你需要一些专业的软件来帮你处理数据.那么如何能快速.准确地从数据 ...

  7. 数据大爆炸:KDD 2016

    2016"> 饕餮盛宴 ACM SIGKDD国际会议(简称KDD)是数据挖掘领域的顶级国际会议,由ACM (计算机协会)的数据挖掘及知识发现专委会(SIGKDD)负责组织筹办.在现今如 ...

  8. Git私服搭建

    Git私服搭建 一.Git服务器搭建方式 GIT是一个分布式版本管理系统,既然是分布那么必定会涉及远程通信,那么GIT是采用什么协议进行远程通信? Git支持的四种通信协议: Local(本地协议) ...

  9. SpringBoot入门系列(一)如何快速创建SpringBoot项目

    这段时间也没什么事情,所以就重新学习整理了Spring Boot的相关内容.今天开始整理更新Spring Boot学习笔记,感兴趣的朋友可以关注我的博客:https://www.cnblogs.com ...

  10. Ajax&Json案例

    案例: * 校验用户名是否存在 1. 服务器响应的数据,在客户端使用时,要想当做json数据格式使用.有两种解决方案: 1. $.get(type):将最后一个参数type指定为"json& ...