点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文:曲終人不散丶

https://zhuanlan.zhihu.com/p/151914931

众所周知,非极大值抑制NMS是目标检测常用的后处理算法,用于剔除冗余检测框,本文将对可以提升精度的各种NMS方法及其变体进行阶段性总结。

总体概要:

对NMS进行分类,大致可分为以下六种,这里是依据它们在各自论文中的核心论点进行分类,这些算法可以同时属于多种类别。

  1. 分类优先:传统NMS,Soft-NMS (ICCV 2017)

  2. 定位优先:IoU-Guided NMS (ECCV 2018)

  3. 加权平均:Weighted NMS (ICME Workshop 2017)

  4. 方差加权平均:Softer-NMS (CVPR 2019)

  5. 自适应阈值:Adaptive NMS (CVPR 2019)

  6. +中心点距离:DIoU-NMS (AAAI 2020)

分类优先

传统NMS有多个名称,据不完全统计可以被称为:Traditional / Original / Standard / Greedy NMS,为统一起见,下称Traditional NMS。

Traditional NMS算法是最为经典的版本,伪代码如下:

作为最为人所知晓的版本,Traditional NMS不仅有CPU版本,并且现已有GPU版本,GPU版本为Ross Girshick大神编写,俗称CUDA NMS。多个深度学习框架也已将CUDA NMS纳入,作为基本函数使用,如Pytorch在Torchvision 0.3中正式集成了CUDA NMS。

缺点:

  1. 顺序处理的模式,计算IoU拖累了运算效率。

  2. 剔除机制太严格,依据NMS阈值暴力剔除。

  3. 阈值是经验选取的。

  4. 评判标准是IoU,即只考虑两个框的重叠面积,这对描述box重叠关系或许不够全面。

Soft-NMS是Traditional NMS的推广,主要旨在缓解Traditional NMS的第二条缺点。

数学上看,Traditional NMS的剔除机制可视为

显然,对于IoU≥NMS阈值的相邻框,Traditional NMS的做法是将其得分暴力置0。这对于有遮挡的案例较不友好。因此Soft-NMS的做法是采取得分惩罚机制,使用一个与IoU正相关的惩罚函数对得分  进行惩罚。

线性惩罚:

其中  代表当前的最大得分框。

线性惩罚有不光滑的地方,因而还有一种高斯惩罚:

在迭代终止之后,Soft-NMS依据预先设定的得分阈值来保留幸存的检测框,通常设为0.0001

该文对两种惩罚方法的超参数也进行了实验,结果验证了超参数的不敏感性。经本人实测,Soft-NMS在Faster R-CNN中的提升约有0.5-0.8个点的AP提升。

缺点:

  1. 仍然是顺序处理的模式,运算效率比Traditional NMS更低。

  2. 对双阶段算法友好,而在一些单阶段算法上可能失效。

  3. 如果存在定位与得分不一致的情况,则可能导致定位好而得分低的框比定位差得分高的框惩罚更多(遮挡情况下)。

  4. 评判标准是IoU,即只考虑两个框的重叠面积,这对描述box重叠关系或许不够全面。

定位优先

IoU-Guided NMS出现于IoU-Net一文中,研究者认为框的定位与分类得分可能出现不一致的情况,特别是框的边界有模棱两可的情形时。因而该文提出了IoU预测分支,来学习定位置信度,进而使用定位置信度来引导NMS。

具体来说,就是使用定位置信度作为NMS的筛选依据,每次迭代挑选出最大定位置信度的框  ,然后将IoU≥NMS阈值的相邻框剔除,但把冗余框及其自身的最大分类得分直接赋予  ,这样一来,最终输出的框必定是同时具有最大分类得分与最大定位置信度的框。

优点:

IoU-Guided NMS有助于提高严格指标下的精度,如AP75, AP90。

缺点:

  1. 顺序处理的模式,运算效率与Traditional NMS相同。

  2. 需要额外添加IoU预测分支,造成计算开销。

  3. 评判标准是IoU,即只考虑两个框的重叠面积,这对描述box重叠关系或许不够全面。

加权平均

多框共同决定一框

Weighted NMS出现于ICME Workshop 《Inception Single Shot MultiBox Detector for object detection》一文中。论文认为Traditional NMS每次迭代所选出的最大得分框未必是精确定位的,冗余框也有可能是定位良好的。那么与直接剔除机制不同,Weighted NMS顾名思义是对坐标加权平均,加权平均的对象包括  自身以及IoU≥NMS阈值的相邻框。

加权的权重为  ,表示得分与IoU的乘积。

优点:

Weighted NMS通常能够获得更高的Precision和Recall,以本人的使用情况来看,只要NMS阈值选取得当,Weighted NMS均能稳定提高AP与AR,无论是AP50还是AP75,也不论所使用的检测模型是什么。

缺点:

  1. 顺序处理模式,且运算效率比Traditional NMS更低。

  2. 加权因子是IoU与得分,前者只考虑两个框的重叠面积,这对描述box重叠关系或许不够全面;而后者受到定位与得分不一致问题的限制。

方差加权平均

Softer-NMS同样是坐标加权平均的思想,不同在于权重  发生变化,以及引入了box边界的不确定度。

关于目标检测box不确定度,可参考笔者的另一篇文章《一文了解目标检测边界框概率分布》

加权公式如下:

其中权重  抛弃了得分  ,而只与IoU有关。

在加权平均的过程中,权重越大有两种情形:1. 与  的IoU越大;2. 方差越小,代表定位不确定度越低。

var voting表示方差加权平均

优点:

  1. 可以与Traditional NMS或Soft-NMS结合使用。

  2. 通常可以稳定提升AP与AR。

缺点:

  1. 顺序处理模式,且运算效率比Traditional NMS更低。

  2. 需要修改模型来预测方差。

  3. 加权因子是IoU与方差,前者依然只考虑两个框的重叠面积,这对描述box重叠关系或许不够全面。

自适应阈值

以上这些NMS都基于这样的假设:与当前最高得分框重叠越大,越有可能是冗余框。这在物体之间有严重遮挡时可能带来不好的结果。我们期望当物体分布稀疏时,NMS大可选用小阈值以剔除更多冗余框;而在物体分布密集时,NMS选用大阈值,以获得更高的召回。既然如此,该文提出了密度预测模块,来学习一个框的密度。

一个GT框  的密度标签定义如下,

模型的输出将变为  ,分别代表box坐标,宽高,分类得分,密度,其中密度  越大,代表该框所处的位置的物体分布越密集,越有可能是遮挡严重的地方;反之密度  越小,代表该框所处的位置的物体分布越稀疏,不太可能有遮挡。

论文以Traditionnal NMS和Soft-NMS的线性惩罚为基础,将每次迭代的NMS阈值更改如下:

其中  代表最小的NMS阈值。

优点:

  1. 可以与前面所述的各种NMS结合使用。

  2. 对遮挡案例更加友好。

缺点:

  1. 与Soft-NMS结合使用,效果可能倒退 (受低分检测框的影响)。

  2. 顺序处理模式,运算效率低。

  3. 需要额外添加密度预测模块,造成计算开销。

  4. 评判标准是IoU,即只考虑两个框的重叠面积,这对描述box重叠关系或许不够全面。

+中心点距离

DIoU-NMS出现于Distance-IoU一文,研究者认为若相邻框的中心点越靠近当前最大得分框  的中心点,则其更有可能是冗余框。也就是说,考虑IoU相同的情况,如下所示

第一种相比于第三种越不太可能是冗余框。基于该观点,研究者使用所提出的DIoU替代IoU作为NMS的评判准则,公式如下:

DIoU的定义为

DIoU=IoU-d²/c²

而在实际操作中,研究者还引入了参数  ,用于控制  的惩罚幅度。即

由公式可以看出,

  1. 当  时,DIoU退化为IoU,此时的DIoU-NMS与Traditional NMS效果相当。

  2. 当  时,此时几乎所有中心点不与  重合的框都被保留了。

研究者进一步比较了Traditional NMS和DIoU-NMS的性能,在YOLOv3和SSD上,选取NMS阈值为[0.43,0.48]。可以看到DIoU-NMS在每个阈值上都优于Traditional NMS,此外还值得一提的是,即便是性能最差的DIoU-NMS也比性能最好的Traditional NMS相当或更优,说明即便不仔细调整NMS阈值,DIoU-NMS也通常能够表现更好。

YOLOv3(左)和SSD(右)在VOC 2007 test集

这里顺便一提,既然都比了[0.43, 0.48]的阈值,就让人比较好奇更宽的阈值范围会怎样?Traditional NMS会不会有反超DIoU-NMS的情况?当然我个人比较认同DIoU-NMS更优的范围会大一些,也就是NMS阈值不必精调也可放心使用DIoU-NMS。

优点:

  1. 从几何直观的角度,将中心点考虑进来有助于缓解遮挡案例。

  2. 可以与前述NMS变体结合使用。

  3. 保持NMS阈值不变的情况下,必然能够获得更高recall (因为保留的框增多了),至于precision就需要调  来平衡了。

  4. 个人认为+中心点距离的后处理可以与DIoU/CIoU损失结合使用,这两个损失一方面优化IoU,一方面指引中心点的学习,而中心点距离学得越好,应该对这种后处理思想的执行越有利。

缺点:

  1. 依然是顺序处理模式,运算效率低。

  2. DIoU的计算比IoU更复杂一些,这会降低运算效率。

  3. 在保持NMS阈值不变的情况下,使用DIoU-NMS会导致每次迭代剩余更多的框,这会增加迭代轮数,进一步降低运算效率。(经本人实测,DIoU-NMS是Traditional NMS 起码1.5倍耗时)

总结:

  1. 加权平均法通常能够稳定获得精度与召回的提升。

  2. 定位优先法,方差加权平均法与自适应阈值法需要修改模型,不够灵活。

  3. 中心点距离法可作为额外惩罚因子与其他NMS变体结合。

  4. 得分惩罚法会改变box的得分,打破了模型校准机制。

  5. 运算效率的低下可能会限制它们的实时应用性。

参考文献

  • Soft-NMS --Improving Object Detection With One Line of Code. ICCV 2017

  • Acquisition of Localization Confidence for Accurate Object Detection. ECCV 2018

  • Inception Single Shot MultiBox Detector for object detection. ICME Workshop 2017

  • Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR 2019

  • Adaptive NMS: Refining Pedestrian Detection in a Crowd. CVPR 2019

  • Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression. AAAI 2020

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

一文打尽目标检测NMS | 精度提升篇相关推荐

  1. 一文打尽目标检测NMS——效率提升篇

    在笔者上一篇文章<一文打尽目标检测NMS--精度提升篇>中,总结了近几年出现的一些可以提升NMS精度的方法.可以看到,NMS由于顺序处理的原因,运算效率较为低下.在笔者的实际项目中,NMS ...

  2. 【基础积累】目标检测NMS—精度提升篇

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要10分钟 Follow小博主,每天更新前沿干货 作者:曲終人不散丶 知乎链接:https://zhuanlan.zhihu.com/p/151 ...

  3. 李沐等将目标检测绝对精度提升 5%,不牺牲推理速度

    本文授权转载自机器之心 未经许可禁止二次转载 天下没有免费的午餐?李沐等研究者在一份名为<Bag of Freebies for Training Object Detection Neural ...

  4. 经验 | 如何提升目标检测NMS精度

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:作者:曲終人不散丶 知乎链接:https://zhuanla ...

  5. 实战解析:真实AI场景下,极小目标检测与精度提升 | 百度AI公开课

    主讲人 | 哈利 百度高级研发工程师 量子位整理编辑 | 公众号 QbitAI 目前,各个企业行业在AI落地应用中,常常会遇到极小目标检测问题.在这些AI应用中,都需要在一个大图中精准识别出极小目标, ...

  6. 一文了解YOLO-v4目标检测

    一.YOLO-v4主要做了什么? 通俗的讲,就是说这个YOLO-v4算法是在原有YOLO目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理.主干网络.网络训练.激活函数.损失函 ...

  7. tensorflow2 目标检测_一文了解YOLO-v4目标检测

    一.YOLO-v4主要做了什么? 通俗的讲,就是说这个YOLO-v4算法是在原有YOLO目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理.主干网络.网络训练.激活函数.损失函 ...

  8. 一文总结旋转目标检测全面综述:论文方法与代码

    参考一文总结旋转目标检测全面综述:论文方法与代码 - 云+社区 - 腾讯云 首先放上DOTA数据集官网(http://captain.whu.edu.cn/DOTAweb/index.html),官网 ...

  9. Yolo 一文看懂目标检测

    Yolo 一文看懂目标检测 概述 one-stage two-stage Yolo 原理 分割图片 预选框 计算参数 预测物体 得到结果 网络架构 (v1) 概述 Yolo (You Only Loo ...

最新文章

  1. ROS中使用摄像头的问题
  2. OpenCV卡尔曼滤波介绍与代码演示
  3. 大话软件测试与职业生涯
  4. python中set和frozenset方法和区别
  5. 二十一、Python中的Scipy统计库
  6. Circle Loss: A Unified Perspective of Pair Similarity Optimization 圆损失函数,统一优化视角,革新深度特征学习范式 CVPR 2020
  7. 郁闷的C小加(一)(后缀表达式)
  8. c语言天数转换成周数,如何将周数转换为日期?
  9. 设计模式-行为性模式(模板方法模式,策略模式,命令模式,责任链模式,观察者模式,中介者模式,迭代器模式)
  10. 局域网联机_局域网联机
  11. 再谈回声消除测评丨Dev for Dev 专栏
  12. 1 初识Mybatis
  13. 《终身成长》读书笔记
  14. 气传导耳机是什么原理?气传导蓝牙耳机优缺点分析
  15. 【报告分享】2021百度快消人群洞察-百度营销研究院(附下载)
  16. 介绍一款可悬浮的截图软件
  17. 动网三部曲(二)dvbbs7.0sp2后台权限提升
  18. 最新研究表明:熬夜会增加患癌症几率
  19. project(2)
  20. 金融作业:股吧评论_爬取、情绪与股价对比(贵州茅台和上证指数)

热门文章

  1. 解读 | 2019年10篇计算机视觉精选论文(上)
  2. 扶稳!四大步“上手”超参数调优教程,就等你出马了 | 附完整代码
  3. 百度与华为重磅合作!李彦宏:技术是百度的信仰
  4. Python一键转Java?“Google翻译”你别闹
  5. AI一分钟 | 马斯克证实:特斯拉私有化的幕后推手是沙特主权基金;DeepMind的AI可以检测出超过50种眼疾...
  6. 融资2.1亿商汤领投,他要用VR+AR解决无人驾驶的路测难题
  7. HTTP Host 头攻击,是什么鬼?
  8. 谁再说不熟悉Linux命令,就把这个给他扔过去!
  9. 图解Spring解决循环依赖
  10. 那些总是写“烂代码”的同学,强烈推荐你使用这款IDEA插件!