『计算机视觉』Generalized Intersection over Union: A Metric and A Loss for Bounding BoxRegression
论文地址: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-IOU 作为距离度量,(数学可证的)满足非负性、同一性、对称性和三角不等性(non-negativity, identity of indiscernibles, symmetry and triangle inequality)
- IOU 具有尺度不变性,不受 bbox 于 ground truth 的大小影响
2、IOU 的问题
- 只要两个框不相交,IOU 就为0,这使得它无法衡量两个框是相邻还是相距甚远
- IOU 无法反映两个框相交的方式,解释如 Figure2 所示:
3、GIOU 算法介绍
对于同形状的 A 和 B,C 为相同形状的最小的可以包含 A、B 的图形(例如通常 A 和 B 是矩形框,此时 C 也取矩形框),下面公式给出 GIOU 的计算过程:
然后作者给出了 GIOU 的5个特点:
- 将 1-GIOU 作为距离度量,其继承了 IOU 的优良数学特性
- GIOU 同样具有尺度不变性
- GIOU 永远小于 IOU,且当 A 趋近于 B 时(即两者趋于重合),GIOU 趋于 IOU
- IOU 取值区间为 [0,1],GIOU 取值区间为 [-1,1]:
和 3 中所说对应,A 和 B 趋于重合时 IOU 和 GIOU 均趋向 1
A 和 B 差别越大,GIOU 趋向于 -1 - 如 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的更多相关文章
- 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 ...
- 论文阅读笔记四十七: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 ...
- 『计算机视觉』Mask-RCNN_从服装关键点检测看KeyPoints分支
下图Github地址:Mask_RCNN Mask_RCNN_KeyPoints『计算机视觉』Mask-RCNN_论文学习『计算机视觉』Mask-RCNN_项目文档翻译『计算机视觉』Mas ...
- 『计算机视觉』Mask-RCNN_训练网络其三:训练Model
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- 『计算机视觉』Mask-RCNN_训练网络其二:train网络结构&损失函数
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- 『计算机视觉』Mask-RCNN_训练网络其一:数据集与Dataset类
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- 『计算机视觉』Mask-RCNN_锚框生成
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- 『计算机视觉』Mask-RCNN_推断网络终篇:使用detect方法进行推断
一.detect和build 前面多节中我们花了大量笔墨介绍build方法的inference分支,这节我们看看它是如何被调用的. 在dimo.ipynb中,涉及model的操作我们简单进行一下汇总, ...
- 『计算机视觉』Mask-RCNN_推断网络其六:Mask生成
一.Mask生成概览 上一节的末尾,我们已经获取了待检测图片的分类回归信息,我们将回归信息(即待检测目标的边框信息)单独提取出来,结合金字塔特征mrcnn_feature_maps,进行Mask生成工 ...
随机推荐
- 求你显示pdf
123 <iframe src='http://km.shengaitcm.com/ADC/_layouts/15/WopiFrame.aspx?sourcedoc=%2FADC%2FDocLi ...
- Python记录wsgi
类实现wsgi app from wsgiref.util import setup_testing_defaults from wsgiref.simple_server import make_s ...
- 搭建Karma+Jasmine的自动化单元测试
最近在打算将以前的代码进行重构,过程中发现自己不写自动化测试代码,而是手动的写,这样并不好,所以就学了Karma+Jasmine的自动化单元测试,以后写代码尽量要写自动化单元测试,也要测一下istan ...
- Python基础训练题-简单数学公式
1.在100内,将遇到被7除余数为0的都显示PASS: n=1 while n < 101: if n % 7 == 0: pass print('pass') else: print(n) n ...
- spring boot + vue + element-ui全栈开发入门——项目部署
前言 常用的部署方式有两种: 1.是把生成好的静态页面放到spring boot的static目录下,与打包后的spring boot项目一起发布,当spring boot运行起来后,自然而然就能访 ...
- 字符串Contains匹配失效
参考博客:https://blog.csdn.net/lewky_liu/article/details/79353151 在编码过程中发现一个很神奇的事情,使用String.contains方法失效 ...
- java线程学习之yield方法
yield方法是暂停当前正在执行的线程对象,并执行其他线程. 这是一个静态方法,一旦执行,它会使当前线程让出CPU.让出的cpu并不代表当前线程不执行了.当前线程让出CPU后,还会CPU资源的争夺,但 ...
- C语言实例:结构体
结构体: #include <stdio.h> #include <stdlib.h> //#pragma pack(1) typedef struct{ short i; / ...
- 5、Storm集成Kafka
1.pom文件依赖 <!--storm相关jar --> <dependency> <groupId>org.apache.storm</groupId> ...
- python学习之——习题一
习题一:使用while循环输入1 2 3 4 5 6 8 9 10 (不含7) 首先想到,先使用while循环打印出1-10数字,然后再将数字“7”剔除. # 先打印出1-10 n = 1 whi ...