什么是nms,为什么需要nmsnms是柠檬树的简称,懂得都懂,不懂请退出吧。nms原理请自行搜索。为啥需要柠檬树呢?因为CNN做预测的时候,往往会对同一个目标产生多个proposal,因此需要nms过滤掉多余的预测框。产生duplicate bbox的原因有CNN自身结构的原因,有时候feature map上很难决定相邻的两个特征点谁表示目标谁表示背景。尤其在一些目标边缘比较模糊的时候,如下图。另一方面,既然会产生duplicate bbox,还不如拥抱duplicate,通过规则让一个目标匹配多个proposal来增加正样本数量,使训练的前景与背景更加均衡,最后理直气壮用nms过滤就好了。Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR2019图片来源:Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR2019[1]此处统一术语。模型输出的框是候选框(proposal)。proposal会预测一个目标称为instance。人工标注的框为GT。训练阶段,如何让具体哪个proposal与哪个GT匹配的策略称为label assign,上面提到一个GT只跟一个proposal匹配称为one-to-one(o2o),一个GT匹配多个proposal的方法称为many-to-one(m2o)。so,要想实现nms-free,label assign必须是one-to-one的。
02
什么是nms-free,有啥好处?nms-free就是不需要nms的目标检测,甚至可以认为没有后处理的目标检测。优势1.整体框架简洁,更少超参数。2.目标之间重叠严重的话就无法用了。但目前的主流依然存在nms,足以说明nms的优势大于劣势。很多场景的目标检测,目标是稀疏的,此时many-to-one + nms组合简直不要太爽。出现重叠怎么办?忽略就行,出现概率很低啦。教育甲方不能这样玩。甲方要退钱了?RotateAnchor[2]改一波。Nice。甲方说不可描述场景依然漏检,还发来了图片[色迷迷]。此时,nms党不慌不忙的掏出了《Detection in Crowded Scenes: One Proposal, Multiple Predictions》[3]。每个proposal预测K个instance,意思是该proposal预测的地方可能有K个instance高度重叠。上图K>=2即可。是不是有点类似anchor-base一个特征点有k个anchor,但anchor形状差异很大,人工匹配规则也无法解决高度重叠场景。一个proposal预测k个instance可看作对anchor做了修改。匹配的规则也做了修改:b_i是第i个proposal,L_cls和L_reg分别是label交叉熵和bbox回归的loss。L(b_i)可以看作是EMDLoss(推土机距离),距离最小就是匹配方案。由于一个proposal包含了多个instance,所以nms也做了相应的修改,称为set-nms,出自同一个proposal的k个instance必然非同一目标,iou再高也不能干掉。等等,nms-base好像没啥毛病了,增加后处理算啥毛病。标题起错了,”who care nms-free”。有一说一,nms使检测算法不够直观、简单,更像tradeoff的行为[挽尊]。nms-free简单的结构,降低了det学习的门槛。
03
nms-free的发展历程此处挑比较有意思的论文介绍。如有遗漏或指正,欢迎留言。
《End-to-end people detection in crowded scenes》CVPR2016[4]
《Relation Networks for Object Detection》CVPR2018[5]
作者借鉴了隔壁NLP的《attention is all your need》的思想,在backbone里面融合self-attention,思路是每个proposal通过attention了解图片中存在什么proposal,从而知道自身处于什么场景,提升准确率。例如一个屏幕,在沙发旁边是电视,在键盘旁边是显示器。如今没人会怀疑self-attention在cv的作用。另外,论文提出了Duplicate removal network(DRN)代替nms,实现端到端训练。参考下图,DRN的思路是匹配到同一个GT的proposal,只取iou最大的,其他都是duplicate。DRN模块里面有个attention,让匹配到同一个GT的proposal只有iou最大的那个s1是1,其余是0。score是前景置信度,0-1之间,这里做了rank embed,根据score的大小降序排序,赋值范围是[1,N]。
《End-to-End Object Detection with Transformers》ECCV2020[6]
鼎鼎大名的DETR,借鉴了隔壁NLP的transformer,跟上文提到的《End-to-end people detection in crowded scenes》基于一样的方式,基本就是把LSTM部分改成了transformer。由于transformer同时输出结果的特性,作者默认DETR固定输出100个预测结果,如果没有那么多目标,则多出来的预测结果为空。同样通过匈牙利算法做label assignment。后面基于transformer的XXDert/SwinXX不一一介绍了。coco的最高记录不断被刷新,可见transformer之强悍。
《Pix2seq: A Language Modeling Framework for Object Detection》[7]
1.Bounding Box Regression with Uncertainty for Accurate Object Detection. CVPR2019 https://readpaper.com/paper/29626770132.Arbitrary-Oriented Scene Text Detection via Rotation Proposals https://readpaper.com/paper/31062289553.Detection in Crowded Scenes: One Proposal, Multiple Predictions .CVPR2020 https://readpaper.com/paper/30353230394.End-to-end people detection in crowded scenes. CVPR2016 https://readpaper.com/paper/6077488435.Relation Networks for Object Detection. CVPR2018 https://readpaper.com/paper/29640806016.End-to-End Object Detection with Transformers. ECCV2020 https://readpaper.com/paper/30966092857.Pix2seq: A Language Modeling Framework for Object Detection https://readpaper.com/paper/31992455378.End-to-End Object Detection with Fully Convolutional Network. CVPR2021 https://readpaper.com/paper/31112722329.What Makes for End-to-End Object Detection?. ICML2021 https://readpaper.com/paper/317909268210.Object Detection Made Simpler by Eliminating Heuristic NMS https://readpaper.com/paper/312572898