目标检测框回归问题
本文转自知乎,作者mileistone,已获作者授权转载,请勿二次转载。
https://zhuanlan.zhihu.com/p/330613654
目标检测模型训练的时候有两个任务,框分类(框里是什么)和框回归(框在哪),本文主要讲第二点。
框回归可以分为两大类,基于x,y,w,h的回归(比如Faster R-CNN、YOLO、RetinaNet里框回归的loss),基于IoU的回归(比如IoU loss、GIoU loss、DIoU loss、CIoU loss)。
基于x,y,w,h的回归
基于x,y,w,h的回归,可以细分为x、y(GT框的中心)的回归和w、h的回归。
w、h的回归
Faster R-CNN、YOLO、RetinaNet的w、h回归方式大体相同。假设 、
为拟合目标,
、
为网络预测值,
为GT框的宽,
为样本对应anchor框的宽,
为GT框的宽,
为GT框对应的anchor框的高,
为
、
、
等。
其中通过anchor的归一化和取log,可以一定程度增加 和
对框scale的invariance。
x、y的回归
x、y的回归方式可以分为两类,一类以YOLO为代表,一类以Faster R-CNN和RetinaNet为代表。后者x、y的回归方式与它们对w、h的回归方式相同,不再赘述。
YOLO中x、y的回归方式比较奇特。假设 、
为拟合目标,
、
为网络预测值,
为对应head输出feature map的宽,
为对应head输出feature map的高。
为GT框中心的x坐标,
为GT框中心的y坐标,
为GT框匹配上的grid cell的x坐标,
为GT框匹配上的grid cell的y坐标,x坐标的范围缩放到化到
,y坐标的范围缩放到到
。
对scale进行reweight
关于x、y、w、h的回归,YOLO还会对不同scale的框回归loss进行reweight,减小大scale的框回归loss,增大小scale的框回归loss,Fatser R-CNN和RetinaNet没这么做。总体而言,YOLO里很多操作都是比较特立独行的,不过在论文里讲得很少,只有看作者的C代码实现才能发现。
基于IoU的回归
IoU loss有两个所谓的优点,一个是“Given the choice between optimizing a metric itself vs. a surrogate loss function, the optimal choice is the metric itself”,另一个是IoU loss对框的scale具有invariance特性,大家觉得这个对于框回归而言非常必要。
IoU loss关注预测框与GT框的IoU,而其他基于IoU loss的变体,关注的点除了IoU 之外还有:
1、预测框与GT框并集占据预测框与GT框最小包络框的比例(越大越好);
2、归一化(以预测框和GT框最小包络框的对角线为分母)的预测框中心与GT框中心距离(越小越好);
3、预测框长宽比与GT框长宽比的相似程度(越大越好)。
GIoU loss关注了1,DIoU loss关注了2,CIoU loss关注了2和3。
GIoU loss缓解了IoU loss在预测框和GT框之间IoU为0,梯度为0的问题。实验中GIoU收敛比较慢,DIoU缓解了GIoU这个问题;CIoU基于DIoU,添加了一个关于长宽比的惩罚项。
一些想法
1、the optimal choice is the metric itself?
将IoU作为loss是不是真的如论文中所说“Given the choice between optimizing a metric itself vs. a surrogate loss function, the optimal choice is the metric itself”。
这句话很对,但是IoU只是整体metric(比如mAP)中的一部分,这一个部分达成了“optimizing a metric itself”,问题是局部最优不一定能达到全局最优,这个问题导致IoU loss提出来之后,后续大家打了一个接一个的补丁(比如GIoU、DIoU、CIoU),甚至PP-YOLO发现把基于x、y、w、h的回归和基于IoU的回归结合起来效果更好。
事情并不如IoU提出来的时候想的那么美好。
相信后面还会有更多的补丁。一个问题在于无论是IoU也好,还是后面提出来的其他惩罚项也好,既缓解了一部分问题,也带来了新的问题;另一个问题是,整体地“optimizing a metric itself”这个命题听起来很美好,但是基本不可实现:想象很美好,现实很骨感。
后面我们大概率会从不同角度提出更多的惩罚项,这里会带来一个问题,当惩罚项越来越多的时候,如何平衡各个惩罚项loss,进而如何平衡框回归与框分类loss,里面会涉及到很多超参。
2、对框scale的invariance特性
框回归问题中,对框scale具有invariance是否一定是优点呢?我想不尽然,因为不同scale的框之间可能存在不平衡,在这种条件下,对框scale具有invariance可能不一定是最好的,我们可能需要做一些reweight。
3、anchor free
备注:目标检测
目标检测交流群
2D、3D目标检测等最新资讯,若已为CV君其他账号好友请直接私信。
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到
本文分享自微信公众号 - 我爱计算机视觉(aicvml)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
看看人家接口写得,那叫一个优雅!
点击上方java项目开发,选择设为星标 优质文章,及时送达 -- 来源:https://zhuanlan.zhihu.com/p/265318078 在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。 一般系统的大致整体架构图如下: 需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。因为老顾这篇主要介绍的是API接口,所以我们聚焦点,其他的模块小伙伴们自行去补充。 接口交互 前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。 针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_version,device等),老顾这里就不介绍了,小伙伴们可以自行去了解,也比较简单。 着重介绍一下后端服务器如何实现...
- 下一篇
常见开源协议介绍
世界上的开源许可证(Open Source License)大概有上百种,今天我们来介绍下集几种我们常见的开源协议。大致有GPL、BSD、MIT、Mozilla、Apache和LGPL等。 BSD BSD是"Berkeley Software Distribution"的缩写,意思是"伯克利软件发行版"。 BSD开源协议:是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件: 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。 BSD代码鼓励代码共享,也允许使用或在BSD代码上开发商业软件发布和销售,因此很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。 Apache Licence...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7设置SWAP分区,小内存服务器的救世主
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块