社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

【VALSE前沿选介2018-05期】谈谈深度学习目标检测中的遮挡问题

VALSE • 6 年前 • 527 次点击  

今天给大家介绍的两篇工作的目的都是试图解决目标检测中最为棘手的遮挡问题。两篇文章的作者分别从loss设计和two stage detector中最关键的操作ROI Pooling/Align出发来针对遮挡问题进行针对性设计,从而减轻遮挡问题对于检测结果的影响。

在开始介绍这两篇文章具体的工作之前,我先来和大家回顾一下为什么遮挡会对检测结果造成很大影响。其实遮挡本身也可以分为两种类型,一种是由于非目标造成的遮挡,一种是由于也是需要检测的目标造成的遮挡。这两种遮挡在[1]中分别被叫做occlusion和crowded。对于前一种类型遮挡,很难有针对性的办法去解决,最好的办法也就是使用更多的数据和更强的feature。但是对于后一种类型的遮挡,现在的pipeline其实并没有很好充分利用信息,例如下面示意的这个情况,两个黑色的框代表的是两个Ground Truth,红色和绿色分别是被assign到1号的GT上的anchor或者proposal。


虽然这两个proposal和左面GT的IoU一样,但是显然绿色的更容易受到2号GT的影响,从而远离它真实的目标,这也是为什么crowded的情况中,误检经常出现在两个真正GT中间的原因。但是我们为了抑制这样的误检,又不能一味减小NMS的阈值,否则会对于真正靠近的情况错误抑制。

下图是在真实数据中的一些误检情况:


在[1]中,作者还在CityPersons数据集上分别做了定量统计,可以看到在不同的误检率下,有这两种遮挡导致的漏检基本都占到了2/3之多。所以很有必要针对这两个问题进行一些针对性设计。


在[1]中,作者提出了两个针对这个问题的loss,除了常用的smooth L1使回归目标与GT接近之外,这两个loss一个的目标是使proposal和要尽量远离和它overlap的第二大的GT,另一个目标是要上被assign到不同GT的proposal之间尽量远离。通过这两个loss,不仅仅使得proposal可以向正确的目标靠近,也可以使其远离错误的目标,从而减少NMS时候的误检。在具体实现方面,作者大量使用了之前的IoU loss[3]的工作,可以直接对IoU进行优化。两者的loss function分别如下所示,具体严谨的符号定义可参见原文[1]:


注意,第一个loss中作者使用了Intersection over GT而不是传统的IoU,原因在于GT无法改变,如果使用IoU则网络可以通过放大proposal的方式来降低loss,这并不是我们所期望的。如果直接使用IoG,分母是GT的面积无法改变,从而规避了这样的问题。

其中这个Smooth_ln是针对0到1的输入变量设计的一个robust function,具体形状如下所示:


可以看到,正如Smooth_l1不会对特别大的偏差给予过大的penalty,Smooth_ln对于很小接近于1的输入也不会像原始的ln函数一样给予负无穷那么大的loss,从而可以稳定训练过程,而且对抗一些outlier。


在[2]中,作者分别从loss和two stage detector中核心的ROI Pooling操作出发改善遮挡物体的检测问题。在loss方面,想法与[1]类似,但是采用了一个更简单更容易实现的形式,即被assign到同一个GT的proposal要接近于这些proposal本身的均值。由于优化目标只是接近,而不需要远离,所以可以不需要[1]中的IoU和Smooth_ln从而简化了实现。


除此之外,作者还对行人这个特殊的物体进行了针对性的设计:作者将行人分为5个独立的区域,分别对这5个区域加上整个的ROI进行ROI Pooling/Align,除此之外,还对这5个局部分别预测了一个0到1之间的遮挡score,代表这5个局部区域是不是被遮挡。这部分可以认为是一个简略版的mask。而后使用这5个visibility score分别和对应区域的feature相乘后相加,得到最终的ROI feature。


这里不太明确的是将不同part的feature和全局feature直接相加得到的表示究竟是什么,直接相加看上去多少有点不太合理。另外就是这个设计是专门针对行人的,对于其他任务而言,并不通用。

在实验中,两篇文章都在大规模的行人数据集上进行了测试,两者性能接近,都可以达到目前的最好的行人检测结果。两者分别在Caltech-USA Reasonable set上取得了4.0和4.1的MR-2。在其他数据集上的趋势也是类似,具体有兴趣的读者可以查阅原文。

除此之外,两篇文章中都做了一个很有意思的ablation analysis,分别变化了NMS时候的threshold来看对于最终结果的影响。可以看到一个有意思的趋势是原始的baseline,NMS threshold从0.35增长到0.5的过程中结果会一直改进,但是超过0.5后结果会急剧上升。这符合我们文中最前分析的结果。分别使用了[1][2]提出的方法后,各个threshold下结果都有提升,尤其是[2],threshold超过0.5后继续提升也不会对结果产生反作用,一方面证明了对这样一个超参数的稳定性,也是从一个侧面印证了所提出的方法确实可以提升定位框的准确性。

总结以上,虽然基于deep learning的top-down detection这座大厦基本已经建成,但是针对一些特定问题的设计仍然大有可为,例如遮挡,例如小物体。这些问题都需要大量的实践经验,分析提炼和思考,虽然技术实现上可能很简单,但是背后都蕴含着对问题的理解。


[1] Wang, X., Xiao, T., Jiang, Y., Shao, S., Sun, J., & Shen, C. (2017). Repulsion Loss: Detecting Pedestrians in a Crowd. arXiv preprint arXiv:1711.07752.

[2] Zhang, S., Wen, L., Bian, X., Lei, Z., & Li, S. Z. (2018). Occlusion-aware R-CNN: Detecting Pedestrians in a Crowd. arXiv preprint arXiv:1807.08407.

[3] Yu, J., Jiang, Y., Wang, Z., Cao, Z., & Huang, T. (2016, October). Unitbox: An advanced object detection network. In Proceedings of the 2016 ACM on Multimedia Conference(pp. 516-520). ACM.



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/0NMI2DgIU2
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23531
 
527 次点击