在前不久刚放榜的CVPR2022中有一篇来自NVIDIA的关于目标检测后处理的文章 “Confidence Propagation Cluster: Unleash Full Potential of Object Detectors”
https://arxiv/abs/2112.00342https://arxiv/abs/2112.00342

GitHub - shenyi0220/CP-ClusterContribute to shenyi0220/CP-Cluster development by creating an account on GitHub.https://github/shenyi0220/CP-Cluster

该文的整体思路是要干掉已经用了很久了的NMS和Soft-NMS。作者在文中表示传统的基于NMS的方法及其改进算法主要有以下一些缺陷:

  1. 无法达到完全并行化,因为所有算法的前提是要先按置信度进行排序
  2. 严格假设最高置信度的框就是和GT最接近的
  3. NMS系列只是去重,并没有考虑怎么加强那些重要的True positives,也没有充分利用那些被suppress的弱框

基于此,这篇论文借用了置信度传播的思路(Belief Propagation),把候选框聚类去重问题转化为在无向图中传播置信度这一任务。

 作者先把所有候选框转成无向图的集合(IOU<? 的框属于一个图)。然后在每个图中,节点之间相互同时传递正面消息(Positive Message)和负面消息(Negative Message)。最后在重复的框被消除掉的同时,那些被选出的框的置信度也被加强了(Enhanced)

我们首先来看把候选框聚类问题转化为无向图的集合,如下图所示:

接着我们来看正面消息的传递,这个是这篇文章主要创新点,因为之前从没有后处理方法涉及增强某些重要的候选框。作者提出的正面消息会加强那些周围弱样本框比较多的True Positives,如下图所示:

 红框因为周围的所谓若样本朋友(weaker friends)比较多,所以他的置信度得到了加强,超越了绿框。具体来说,用如下公式来传递正面消息:

 说完正面消息,我们来看负面消息。文中提到的负面消息其实和之前的SoftNMS里用到的负面消息类似,区别只是在于在CP-Cluster中负面消息只在单个Graph里传播,用于Suppress重复框。

 CP-Cluster是迭代执行的,作者通过实验发现一般执行2轮就能收敛到最优解。从实验效果来看mAP提升幅度对每个检测器因人而异,但基本都有提升。

从作者源代码来看,除了DETR这种完全end2end的,其他都能用这个方法涨点。比如下面的基于mmdetection的各种主流检测器

然后Yolov5(v6.1 on coco-val)

ModelNMSSoft-NMSCP-Cluster
Yolov5n28.028.328.5
Yolov5s37.437.638.0
Yolov5m45.445.645.8
Yolov5l49.049.149.4
Yolov5x50.750.851.1
Yolov5s6_128044.945.045.2
Yolov5m6_128051.351.551.7
Yolov5l6_128053.753.854.0
Yolov5x6_128055.055.155.4
Yolov5x6_1280_tta55.855.856.2

同样也能改进YoloX系列(on coco-val)

Method/mAPYoloX-NanoYoloX-TinyYoloX-SYoloX-MYoloX-LYoloX-X
NMS25.832.840.546.949.751.1
CP-Cluster26.433.441.047.350.151.4

结合MaskRCNN 检测器与实例分割一起刷(对一些大的MRCNN模型似乎效果不明显)

Box/Mask AP(test-dev)NMSSoft-NMSCP-Cluster
MRCNN_R5041.5/37.742.0/37.842.2/38.1
MRCNN_R10143.1/38.843.6/39.043.7/39.2
MRCNN_X10144.6/40.045.2/40.245.2/40.2
Box/Mask AP(val)NMSSoft-NMSCP-Cluster
MRCNN_Swin-S48.2/43.248.9/43.449.0/43.4

甚至还能改进像Centernet这种说不用后处理的检测器(直接用CP替换maxpooling)

更多推荐

Confidence Propagation Cluster: 一个来自CVPR2022的目标检测涨点神器(CP-Cluster)