ECCV 2018 | OR-CNN行人检测:为‘遮挡’而生
极市平台是专业的视觉算法开发和分发平台,加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!
同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流。点击文末“阅读原文”立刻申请入群~
本文是ECCV2018行人检测的一篇力作,基于Faster R-CNN的检测框架,为自遮挡情况下的行人检测问题贡献了两种全新的策略。
论文地址:https://arxiv.org/abs/1807.08407
背景介绍
与通用目标检测相比,遮挡情况在行人检测中更为普遍,为此也是行人检测领域最广为关注的问题之一。现实场景中行人的遮挡情况主要分为两种情况:一种是行人个体之间的相互遮挡,这往往会引入大量的干扰信息,进而导致虚检;一种是其他物体对行人的遮挡,这往往会带来目标信息的缺失,进而导致漏检。近年来,已有很多解决遮挡问题的相关工作发表,主要有两种思路:一是对目标候选框分成不同part逐一处理、区别对待再加以特征融合,这种思路更适用于第一种遮挡情况;二是从loss的角度使得目标候选框对相互遮挡的情况更具判别性,如CVPR2018的RepLoss[1],这种思路更适用于第二种遮挡情况。
作为通用目标检测中的一个特定问题,现有基于CNN的行人检测方法主要来源于通用目标检测,目前主流的行人检测算法多基于Faster R-CNN框架,本文也不例外,但提出了两种全新的策略,分别针对性地解决以上两种遮挡问题,并实验验证了其有效性。
本文方法
OR-CNN遵循两阶段的Faster R-CNN的检测框架,其主要包括两个部分:第一阶段RPN产生目标候选框,第二阶段Fast R-CNN对目标候选框进行进一步的分类和回归。为了处理遮挡问题,本文提出两种策略:aggregation loss和PORoI pooling unit,分别加持在两个阶段上,当然aggregation loss也适用于第二阶段,详情见下文。
Aggregation Loss:
在行人个体之间的相互遮挡时,会产生相互重叠的虚检。为了减少这种虚检,作者从anchor出发,通过设计一种loss,使得训练过程中多个匹配到真实目标上的anchor尽量靠近,具体实现方式为在原有的regression loss基础上加上compactness loss,因此本文提出的Aggregation Loss就包括两部分:
其中
为正常的regression loss,采用原始Faster R-CNN中选用的smooth l1 loss;
是本文设计的compactness loss,使得多个匹配上真实目标的anchor能够更加紧密围绕在真实目标周围,具体实现方式为:
也即对多个匹配上真实目标的anchor的回归目标取平均值再与真实目标计算误差,误差度量依然采用的是smooth l1 loss。值得注意的是,Aggregation Loss既可以用在第一阶段也可以用在第二阶段。
Part Occlusion-aware RoI Pooling Unit:
Faster R-CNN的第二阶段需要提取每个目标候选框的特征,如果对目标候选框分成不同的Part分别提取特征,就可以减少遮挡位置对全局特征的影响,这也是处理遮挡问题的一种常用方式。与已有方式不同的是,本文并非随机选取part,而是根据先验将行人目标分成5个part(如下图1所示),分别提取这5个part的特征,这种根据人体布局的先验能够获得互补的局部特征,再结合整个目标的全局特征做加权求和,得到融合特征再做进一步的分类和回归。显然,这里的加权方式就显得尤为重要,为此作者提出了一种遮挡处理单元(图1(b)所示),该单元的输出是一个sigmoid值,意味着该part没被遮挡的程度,因此遮挡处理单元就是一个二分类问题,可以和检测网络联合训练了。
综上,第二阶段的损失函数包括三个部分:分类loss、定位loss和遮挡处理单元loss,如下式所示:
其中的定位loss和第一阶段一致,也是采用的本文提出的第一个遮挡处理策略:Aggregation Loss。
实验分析
实验细节:
本文的detector采用的是改进版的Faster R-CNN[2],以保证实验对比的公平性,验证实验是在CityPersons验证集上做的。对比实验是在CityPersons、Caltech-USA、ETH和INRIA,其中Caltech训练和测试均采用新标注[3]。
实验结果:
首先我们看下在CityPersons验证集上的剥离实验(如下表),其中Scale x1.3代表将图像扩大1.3倍进行测试,heavy partial bare代表不同的遮挡程度,可见本文OR-CNN不仅在Reasonable设定下取得了最佳性能,而且在严重遮挡情况下也取得了最好的检测结果,miss rate比RepLoss降低了4个点。此外,通过对本文提出的两个策略进行剥离分析,可见AggLoss和PORoI二者对检测性能的提升均有贡献,其中AggLoss聚焦于loss层面,因此测试时不会带来算法耗时的增加,是一种更为经济的处理遮挡情况的方式。
下图对AggLoss的作用做了进一步的可视化分析,通过有无AggLoss的对比,图(a)表明训练时,目标候选框能够更加紧密集中在目标周围,图(b)表明测试时,加上AggLoss训练的检测器对NMS阈值的选取更为鲁棒,而Baseline则对NMS阈值的选取则非常敏感,由于CityPersons数据集中遮挡情况较为普遍,所以NMS阈值达到0.55时才能取得最好效果。
下图则对PORoI的作用做了进一步的可视化分析,本文共对行人目标分成5个part,遮挡处理单元会对每个part进行打分,得分越低代表遮挡越严重,从图3可以发现图(a)(b)中没有遮挡的情况下,每个part的得分都普遍偏高,而在图(e)(f)存在严重遮挡时,下面两个part(黑色)的得分较低,充分验证了本文PORoI的有效性。
同样在Caltech测试集上的表现也是state-of-the-art(如下图4):在Reasonable设定下取得了4.1的表现,仅次于第一名RepLoss0.1个百分点。此外论文中还展示了在ETH和INRIA数据集上的结果,同样也是state-of-the-art,在此不再赘述。
总结展望
本文贡献:
(1)本文重点关注行人检测中的遮挡问题,并为此提出了两种遮挡处理策略。
(2)本文提出的两种遮挡处理策略分别来自不同的角度,分别加持在Faster R-CNN检测框架的两个阶段,因而具有互补性,在CityPersons严重遮挡子集上展现了非常出色的性能。
个人见解:
(1)本文重点针对行人检测中长期以来广为关注的问题——遮挡,已有工作中主要从‘分part’的角度加以解决,而CVPR2018的RepLosss[1]首次提出从loss的角度加以解决,使网络在自动学习的过程中不断提升定位性能。本文分别从以上两个角度提出了两种全新的策略,思路简洁而有效。有关RepLosss[1]的技术解读已在极市平台发表,详情可见[4]。
(2)值得注意的是,尽管近年来有大量工作聚焦于行人检测中的遮挡问题,但现有算法距离该问题的解决依然还有很长的路要走,从论文中展现的结果来看,遮挡情况下的检测结果要远远劣于非遮挡情况下的结果。一个很关键的原因来自于人群密集场景下行人自遮挡的情况普遍存在,在训练数据有限的情况下,基于有监督训练得到的检测器难以学习到无法穷尽的各种遮挡情况,因此如何利用现有的无监督或者半监督方式来改善这个问题,应该是非常值得探索的一个方向,期待你的精彩发现。
参考文献
[1] Repulsion Loss: Detecting Pedestrians in a Crowd. CVPR (2018)
[2] Citypersons: A diverse dataset for pedestrian detection. CVPR (2017)
[3] How Far are We from Solving Pedestrian Detection? CVPR (2016)
[4] CVPR 2018 | Repulsion loss:专注于遮挡情况下的行人检测
END