论文地址:Generalized Intersection over Union

一、相关工作

目标检测精度标准

度量检测优劣基本基于 IOU,mAP 是典型的基于 IOU 的标准,但是 mAP 仅有一个 threshold,对于过了线的预测框一视同仁,不能进一步衡量其优劣,所以 MS COCO 挑战赛提出了多 IOU 阈值的综合 mAP 评价标准(就是同时采用几个阈值,计算出多个 mAP 综合打分)。

Bounding box 表示方法和损失函数

YOLO v1 直接回归 bbox 的位置参数(x,y,h,w),并在(h,w)采用预测平方根的方式回避尺度敏感

RCNN 预测的是相对预先检测出的候选区的位置偏移,采用 log 空间回避尺度敏感

此时的损失函数以 l2 为主

Faster RCNN 提出 l1 smooth 损失函数,使得学习鲁棒性更好

Faster RCNN 提出了 anchor boxes 取代了 RCNN 系列中的候选生成算法,但是过多的 anchor 候选框导致了正负样本不平衡的问题,其作者进一步提出了 focal loss 进行应对(存疑,一般来说 one stage 法更易受到正负样本不平衡的困扰,而 two stage 法由于会在候选框阶段通过得分和nms筛选过滤掉大量的负样本,然后在分类回归阶段又固定正负样本比例,相较 one stage 法情况会好很多)。

二、Generalized Intersection over Union

1、IOU 的优点

  1. 将 1-IOU 作为距离度量,(数学可证的)满足非负性、同一性、对称性和三角不等性(non-negativity, identity of indiscernibles, symmetry and triangle inequality)
  2. IOU 具有尺度不变性,不受 bbox 于 ground truth 的大小影响

2、IOU 的问题

  1. 只要两个框不相交,IOU 就为0,这使得它无法衡量两个框是相邻还是相距甚远
  2. IOU 无法反映两个框相交的方式,解释如 Figure2 所示:

3、GIOU 算法介绍

对于同形状的 A 和 B,C 为相同形状的最小的可以包含 A、B 的图形(例如通常 A 和 B 是矩形框,此时 C 也取矩形框),下面公式给出 GIOU 的计算过程:

然后作者给出了 GIOU 的5个特点:

  1. 将 1-GIOU 作为距离度量,其继承了 IOU 的优良数学特性
  2. GIOU 同样具有尺度不变性
  3. GIOU 永远小于 IOU,且当 A 趋近于 B 时(即两者趋于重合),GIOU 趋于 IOU
  4. IOU 取值区间为 [0,1],GIOU 取值区间为 [-1,1]:
      和 3 中所说对应,A 和 B 趋于重合时 IOU 和 GIOU 均趋向 1
      A 和 B 差别越大,GIOU 趋向于 -1
  5. 如 Figure2 所示,GIOU 相对 IOU 更能反映两个框相交形式的好坏(how overlap between two symmetrical objectsoccurs)

4、GIOU 应用为损失函数

基于 min、max 和 分段函数的BP算法是可行的,所以 IOU 与 GIOU 的应用就不是问题了。作者说,虽然 IOU(GIOU) 计算不能得到解析解,但在限定了形状为矩形时就大大简化了问题:对角点进行 min、max 操作即可:

作者还画了图试图证明 GIOU 损失函数的梯度相对于 IOU 损失函数更大,不过我感觉有点牵强(没看懂),所以不贴了。

三、实验

作者将 GIOU 损失函数应用到已有 2D 物体检测算法中,结果相对从前在两个指标上:IOU、GIOU 均有提高,毕竟优化目标就是检测指标,比起使用中间量的 l2 损失效果好是情理之中的。

文章源码还没有被释放,不过原理并不复杂,只要修改已有算法的损失函数即可,但是最近比较忙,没有时间实践一下了。个人觉得是篇很中肯的文章,期待其他人复现实验验证一下,如果效果好说不定就像 BN、Relu 一样成为相关领域的标准配置了。

『计算机视觉』Generalized Intersection over Union: A Metric and A Loss for Bounding BoxRegression的更多相关文章

  1. Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression

    Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression 2019-05-20 19:3 ...

  2. 论文阅读笔记四十七:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression(CVPR2019)

    论文原址:https://arxiv.org/pdf/1902.09630.pdf github:https://github.com/generalized-iou 摘要 在目标检测的评测体系中,I ...

  3. 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支

    下图Github地址:Mask_RCNN       Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...

  4. 『计算机视觉』Mask-RCNN_训练网络其三:训练Model

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  5. 『计算机视觉』Mask-RCNN_训练网络其二:train网络结构&损失函数

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  6. 『计算机视觉』Mask-RCNN_训练网络其一:数据集与Dataset类

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  7. 『计算机视觉』Mask-RCNN_锚框生成

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  8. 『计算机视觉』Mask-RCNN_推断网络终篇:使用detect方法进行推断

    一.detect和build 前面多节中我们花了大量笔墨介绍build方法的inference分支,这节我们看看它是如何被调用的. 在dimo.ipynb中,涉及model的操作我们简单进行一下汇总, ...

  9. 『计算机视觉』Mask-RCNN_推断网络其六:Mask生成

    一.Mask生成概览 上一节的末尾,我们已经获取了待检测图片的分类回归信息,我们将回归信息(即待检测目标的边框信息)单独提取出来,结合金字塔特征mrcnn_feature_maps,进行Mask生成工 ...

随机推荐

  1. RestTemplate的使用介绍汇总

    一 常用方法 https://blog.csdn.net/u012843361/article/details/79893638 二 关于client的选择和设置(通过设置ClientHttpRequ ...

  2. 全局路径规划算法Dijkstra(迪杰斯特拉算法)- matlab

    参考博客链接:https://www.cnblogs.com/kex1n/p/4178782.html Dijkstra是常用的全局路径规划算法,其本质上是一个最短路径寻优算法.算法的详细介绍参考上述 ...

  3. 关于C++ return * this

    转自 :https://blog.csdn.net/u011846436/article/details/45222905 不废话,直接上例子,使用赋值构造函数解释为什么需要 return *this ...

  4. [转载非常好的文章]JLink+GDBServer调试S3C6410裸板的初始化代码 For OK6410开发板

    要调试裸板,有两种初始化方法,一个是用烧好的uboot初始化,再有就是直接用JLink+GDBServer初始化.代码参考了网上的资料,根据手头的OK6410开发板做了修改.整体代码如下: # Con ...

  5. arcgis for js 之 获取两点之间的距离

    换了新公司,接触新行业,半路出家,看着别人的代码,看着api慢慢理解. 需求如下:已知两点坐标求距离. 思路,没有,站在同事的肩膀上踩路子,给的这个链接 https://developers.arcg ...

  6. 日常开发自己遇到异常(BUG未完待续!!!)

    在面试的时候经常会被问到你在项目中遇到的bug有哪些,或者你感觉你解决什么问题让你感觉有成就感.以此类似的面试问答,楼主现在开始不断更新日常遇到的BUG汇总 1:ConcurentModificati ...

  7. volatile关键字作用

    1.阻止编译器对代码进行优化.即读取某个变量值时,不从寄存器中读取而是从变量里读. 2.编译器的优化 在本次线程内,当读取一个变量时,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中:以后 ...

  8. was系统的远程调试

    1.进入websphere页面 2.servers->server types->websphere application servers->点击Additional Proper ...

  9. 安装与配置apache WEB服务器(Linux环境)

    Linux环境下安装一个软件的方式多数为两种: 1.通过命令从远程源下载自动默认安装 2.编译安装 第一种较为简单,直接通过 yum 或者 apt-get 直接安装即可,但是对我来说,编译安装可能更加 ...

  10. DRF认证组件流程分析

    视图函数中加上认证功能,流程见下图 import hashlib import time def get_random(name): md = hashlib.md5() md.update(byte ...