CVPR2019目标检测论文看点:并域上的广义交
CVPR2019目标检测论文看点:并域上的广义交
Generalized Intersection over Union
Generalized Intersection over Union: A Metric and A Loss for BoundingBox Regression
并域上的广义交Intersection over Union(IOU)是目标检测标准最流行的评估手段。可是,使用boundingbox回归参数方法计算距离误差和最大化度量值优化之间有一个缺陷gap。度量优化目标是度量本身,在2D bounding boxes轴对齐情况下,IOU可直接用作回归loss。但是,IOU有一个困难,在没有重叠的bounding boxes情况下不容易优化。本文,通过使用一种新的loss和新的度量metric版本来消除这个缺陷。使用融合这种推广的IOU(GIOU)作为loss导入目标检测框架的手段,使得检测性能得到持续的改进,使用两种方法,standard-IOU和新的IOU,也就是诸如PASCAL VOC和MS COCO这种基于通用的的目标检测信性能优化算法。
先看看论文的实验示例演示效果。

下面来介绍具体的算法原理
1. Motivation
包围框回归是2D/3D 视觉任务中一个最基础的模块,不管是目标检测,目标跟踪,还是实例分割,都依赖于对bounding box进行回归,以获得准确的定位效果。目前基于深度学习的方法想获得更好的检测性能,要么是用更好的backbone,要么是设计更好的策略提取更好的feature,然而却忽视了bounding box regression中L1、L2 loss这个可以提升的点。
IoU是目标检测中一个重要的概念,在anchor-based的方法中,他的作用不仅用来确定正样本和负样本,还可以用来评价输出框(predict box)和ground-truth的距离,或者说predict box的准确性。IoU有一个好的特性就是对尺度不敏感(scale invariant)。
在regression任务中,判断predict box和gt的距离最直接的指标就是IoU,但所采用的loss却不适合,如图所示,在loss相同的情况下,regression的效果却大不相同,也就是说loss没有体现出regression的效果,而IoU却可以根据不同的情况得到不同的数值,能最直接反应回归效果。

2.Method
因此本文提出用IoU这个直接的指标来指导回归任务的学习。与其用一个代理的损失函数来监督学习,不如直接用指标本身来的好。此时损失函数为:

但直接用IoU作为损失函数会出现两个问题:
- 如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度)。同时因为loss=0,没有梯度回传,无法进行学习训练。
- IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。

针对IoU上述两个缺点,本文提出一个新的指标generalized IoU(GIoU):

GIoU的定义很简单,就是先计算两个框的最小闭包区域面积,再计算IoU,再计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用IoU减去这个比重得到GIoU。GIoU有如下4个特点:
与IoU相似,GIoU也是一种距离度量,作为损失函数的话,
,满足损失函数的基本要求
- GIoU对scale不敏感
- GIoU是IoU的下界,在两个框无线重合的情况下,IoU=GIoU
- IoU取值[0,1],但GIoU有对称区间,取值范围[-1,1]。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1,因此GIoU是一个非常好的距离度量指标。
- 与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。
其实GIoU不仅定义简单,在2D目标检测中计算方式也很简单,计算重合区域和IoU一样,计算最小闭包区域只需要得到两者max和min坐标,坐标围城的矩形就是最小闭包区域。
GIoU和IoU作为loss的算法如下所示:

步骤:
- 分别计算gt和predict box的面积
- 计算intersection的面积
- 计算最小闭包区域面积
- 计算IoU和GIoU
- 根据公式得到loss
3. Experiments
GIoU loss可以替换掉大多数目标检测算法中bounding box regression,本文选取了Faster R-CNN、Mask R-CNN和YOLO v3 三个方法验证GIoU loss的效果。实验在Pascal VOC和MS COCO数据集上进行。
实验效果如下:



可以看出YOLOv3在COCO上有明显涨点,但在其他模型下涨点并不明显,作者也指出了faster rcnn和mask rcnn效果不明显的原因是anchor很密,GIoU发挥作用的情况并不多。
总体来说,文章的motivation比较好,指出用L1、L2作为regression损失函数的缺点,以及用直接指标IoU作为损失函数的缺陷性,提出新的metric来代替L1、L2损失函数,从而提升regression效果,想法简单粗暴,但work的场景有很大局限性。
CVPR2019目标检测论文看点:并域上的广义交的更多相关文章
- CVPR2019:无人驾驶3D目标检测论文点评
CVPR2019:无人驾驶3D目标检测论文点评 重读CVPR2019的文章,现在对以下文章进行点评. Stereo R-CNN based 3D Object Detection for Autono ...
- CVPR2019目标检测方法进展综述
CVPR2019目标检测方法进展综述 置顶 2019年03月20日 14:14:04 SIGAI_csdn 阅读数 5869更多 分类专栏: 机器学习 人工智能 AI SIGAI 版权声明:本文为 ...
- AAAI2019 | 基于区域分解集成的目标检测 论文解读
Object Detection based on Region Decomposition and Assembly AAAI2019 | 基于区域分解集成的目标检测 论文解读 作者 | 文永亮 学 ...
- 三维目标检测论文阅读:Deep Continuous Fusion for Multi-Sensor 3D Object Detection
题目:Deep Continuous Fusion for Multi-Sensor 3D Object Detection 来自:Uber: Ming Liang Note: 没有代码,主要看思想吧 ...
- 目标检测论文解读5——YOLO v1
背景 之前热门的目标检测方法都是two stage的,即分为region proposal和classification两个阶段,本文是对one stage方法的初次探索. 方法 首先看一下模型的网络 ...
- CenterNet算法笔记(目标检测论文)
论文名称:CenterNet: Keypoint Triplets for Object Detectiontection 论文链接:https://arxiv.org/abs/1904.08189 ...
- 目标检测论文解读1——Rich feature hierarchies for accurate object detection and semantic segmentation
背景 在2012 Imagenet LSVRC比赛中,Alexnet以15.3%的top-5 错误率轻松拔得头筹(第二名top-5错误率为26.2%).由此,ConvNet的潜力受到广泛认可,一炮而红 ...
- 目标检测论文解读10——DSSD
背景 SSD算法在检测小目标时精度并不高,本文是在在SSD的基础上做出一些改进,引入卷积层,能综合上下文信息,提高模型性能. 理解 Q1:DSSD和SSD的区别有哪些? (1)SSD是一层一层下采样, ...
- 目标检测论文解读6——SSD
背景 R-CNN系列算法检测速度不够快,YOLO v1检测准确率较低,而且无法检测到密集目标. 方法 SSD算法跟YOLO类似,都属于one stage的算法,即通过回归算法直接从原图得到预测结果,为 ...
随机推荐
- 03- HTML基本结构
初始HTML HTML(英文Hyper Text Markup Language的缩写)中文译为"超文本标签语言",主要是通过HTML标签对网页中的文本.图片.声音等内容进行描述. ...
- 【并发编程】Java中的锁有哪些?
0.死锁 两个或者两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,他们都将无法让程序进行下去: 死锁条件: 不可剥夺条件: T1持有的资源无法被T2剥夺 请 ...
- hdu4081 最小树+DFS或者次小树的变形
题意: 给你一个全图,在里面找到一棵树,这棵树最多只有一条边可以不是最小树(也可以是), 要求 那对特殊的边的两个权值/除了这条边其他边的和最大. 思路: 方法有很多,最少有三种 ...
- hdu4291 暴力循环节+矩阵快速幂
题意: 给你一个关系式,x[n] = 3*x[n-1] + x[n-2],求x(x(x[n]))%1000000007. 思路: 做这个题目要明确一点,就是对于取余操作大多数时 ...
- php笔记之魔术方法、魔法常量和超全局变量
一.魔术方法(13个)1.__construct()实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用.2.__destru ...
- 19.Quick QML-GroupBox自定义
GroupBox用来将子类的部件显示在其边框内部,并且一般默认左上有一个标题.GroupBox不提供自己的布局.所以需要我们自己通过ColumnLayout或者其他布局方式来进行布局.GroupBox ...
- 改善c++程序的150个建议(读后总结)-------27-35
27. 区分内存分配的方式 c++中内存分为5个不同的区 ①栈区 栈是一种特殊的数据结构,其存取数据特点为(先进后出,后进先出).栈区中主要用于存储一些函数的入口地址,函数调用时的实参值以及局部变量. ...
- Spring循环依赖问题的解决
循环依赖问题 一个bean的创建分为如下步骤: 当创建一个简单对象的时候,过程如下: 先从单例池中获取bean,发现无 a 创建 a 的实例 为 a 赋值 把 a 放到单例池中 当创建一个对象并且其中 ...
- 记一次golang内存泄露
记一次golang内存泄露 最近在QA环境上验证功能时,发现机器特别卡,查看系统内存,发现可用(available)内存仅剩200多M,通过对进程耗用内存进行排序,发现有一个名为application ...
- 常用加密算法学习总结之散列函数(hash function)
散列函数(Hash function)又称散列算法.哈希函数,散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来.该函数将数据打乱混合,重新创建一个叫做散列值(hash values ...