论文: Repulsion Loss: Detecting Pedestrians in a Crowd
论文地址: https://arxiv.org/abs/1711.07752
代码地址: https://github.com/bailvwangzi/repulsion_loss_ssd
这是一篇 face++ 和同济大学联合出品的论文,主要的 motivation 是解决密集人群中的遮挡检测问题,从两个方面入手,一个方面是吸引目标框向 target 靠拢,另外一个方面是同时防止候选框向周围的目标移动。
介绍
我们知道在密集人群检测中,遮挡是一个非常大的挑战,同时遮挡也分为两个类型,一种是类内遮挡(inter-class occlusion),也就是被相同种类的目标遮挡,一种是类间遮挡(intra-class occlusion),也就是被不同种类的目标遮挡。遮挡会导致一些严重的后果,比如两个人很近的重叠在一起,检测的时候框就会 confused 该靠近哪个目标,这个时候框会出现偏移,可以看看图1的结果,预测的虚线框会往蓝色的框上面靠拢。在用 non-maximum supression (NMS) 做后处理的时候,偏移的框就有可能被 NMS 抑制,出现漏检的情况,换句话说,遮挡会让检测器对 NMS 的 threshold 比较敏感,如果 threshold 设置的比较高,会出现很多的误检,如果 threshold 设置的比较低,目标偏移的框就会被抑制,从而出现漏检。考虑到密集人群周围的物体对 target 的影响,这篇文章设计了一个新的 loss 函数叫做 repulsion loss 来解决这个问题。除此之外,我觉得这篇文章还有一个比较好的贡献就是研究了密集人群检测中到底是哪些因素会对检测器的效果有影响。
人群遮挡的影响
作者通过 baseline Faster R-CNN 来探索人群遮挡对 detector 的影响,将 CityPersons 的数据集分成了三个部分,分别叫做 Reasonable-crowd, Reasonable-occ 和 Resonable。所有的验证集就是 Reasonable,而 CityePerons 提供了每个行人的可见区域,所以根据公式 来定义遮挡的面积,如果 则是 Reasonable-occ,如果 同时和任何一个其他的人 ,则认为是人群遮挡,就是 Reasonable-crowd。下面的图2给出了不同的数据漏检情况,可以看到蓝色的部分在整个遮挡漏检的部分占了超过60%的权重,说明这是人群检测中的一个主要的挑战,而且类内之间的遮挡比内间的遮挡更加困难。
同时作者也研究了误检的情况,对所有误检bbox分成了三种类型,一种是bbox预测成背景,也就是和任何一个标注的框 ,一种是定位准确的误检,即和一个标注的框 ,一种是人群误检,和两个或两个以上的框 。通过统计这些误检框的数量,作者发现人群误检的比例大约占了 20%,这类误检离真正的标注框有一些轻微的偏移,或者偏移到周围的北京,同时这类误检有着比较高的置信度,也使得模型不够 robustness。
Repulsion Loss
为了解决上面提到的问题,作者提出了 repulsion loss,其由三个部分组成
Attraction Term
就是一个正常的回归loss,希望候选的正样本能够靠近其对应的标注框,正样本就是和候选框有最大的 IoU 的 ground truth,公式如下
Repulsion Term (RepGT)
是用来防止 proposal 靠近其周围不应该属于他的 ground-truth 目标,对于任何一个 positive proposal,其有一个和他最大 IoU 的 ground-truth 目标,除了这个目标之外和他 IoU 最大的 ground-truth 目标就是需要原理的对象
最后用一个 smooth 来优化 IoG,这里的
Repulsion Term (RepBox)
最后一项 是为了解决后处理 NMS 对阈值的敏感问题,主要的想法是推开不同的 target 的 proposal。我们把 positive proposal 分成 ground-truth object 这么多个不交的子集,我们希望每个子集之间都互相排斥,即
最后作者也提了为什么要用 IoU 和 IoG 来计算 loss 而不是直接用 来计算,这是因为 IoG 和 IoU 都是 bound 在 [0, 1] 之间,而 是无界的,同时作者的意图也是希望这些 proposal 之间的重叠会更少,所以用 IoU 和 IoG 非常 make sense。
Ablation Study
最后作者做了一组对比实验,可以看到 RepGT 和 RepBox 都对漏检有着一定的效果,对于 baseline 而言,RepGT 和 RepBox 都能有减小接近1个点,而两个 loss 联合训练,能够减小接近1.5个点。最后作者也可视化了一组效果对比
可以看到加了 repulsion loss 之后的结果能够有效的防止 proposal 生成的框的偏移,而且一个框同时框住多个 object 的情况也有所改善。