Py学习  »  机器学习算法

深度学习的目标检测算法是如何解决尺度问题的?

极市平台 • 5 年前 • 464 次点击  

加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!

同时提供每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流点击文末“阅读原文”立刻申请入群~


作者:种树的左耳

来源:

https://www.zhihu.com/question/309488424/answer/577533243


如本文作者之前的回答:目标检测领域还有什么可做的?19个方向给你建议(点击前往)


基于深度学习的目标检测场景下的目标多尺度变化是未来一段时间内比较核心的问题。就这个问题,下面我介绍一些目前存在的主流研究方向论文以供大家参考。

1.Perceptual Generative Adversarial Networks for Small Object Detection


小目标问题,解决这个问题比较经典的文章是Perceptual Generative Adversarial Networks for Small Object Detection。这是CVPR2017的paper,主要针对small object detection的一篇文章,采用PGAN来提升small object detection任务的performance。据我所知也是较早的一篇将GAN用于small object的顶会文章。


论文地址:https://arxiv.org/abs/1706.05274v1


关于这篇文章的问题分析可以看这个问题:如何评价CVPR2017: PGAN for Small Object Detection?(https://www.zhihu.com/question/64861580) 后续的相关研究,由于我方向不是这个,就没有再关注了。当然小目标问题一直是一个比较不错的研究方向。


同时目标检测的尺度变化问题,是目前我关注的一个重要方向。下面我就详细的说一下目前的目标检测多尺度变化的主流解决方案。

2.A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection


最早的一个解决尝试是UC San DiegoSVCL实验室和IBM研究院的MSCNN:A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection。这篇文章发表在ECCV2016。


项目参考地址:

https://github.com/zhaoweicai/mscnn。


这篇主要解决多尺度同时存在时的结案所问题。提出了两点创新:


1)针对多尺度问题,采用类似于FCNT跟踪方法,该文章也是观察到了卷积网络不同层得到的特征特点的不同,对不同层的特征采用不同的利用方式。比如conv-3的低网络层,有更小的感受野,可以进行小目标的检测;而高层如conv-5,对于大目标的检测更加准确。对于不同的输出层设计不同尺度的目标检测器,完成多尺度下的检测问题。


2)针对速度问题,使用特征的上采样代替输入图像的上采样步骤。设计一个去卷积层,来增加特征图的分辨率,使得小目标依然可以被检测出来。这里使用了特征图的deconvolutional layer(去卷积层)来代替input图像的上采样,可以大大减少内存占用,提高速度。文章的网络结构类似RCNN,分为proposal提取和目标检测,两个部分独立进行。

3.STDN: Scale-Transferrable Object Detection

这篇文章发表在CVPR2018,这篇文章提出了一个STDN网络用语多目标检测效果的提升。本文采用了类似SSD的结构主要包括:1)实用DenseNet-169作为基础网络将高低层特征融合达到类似FPN的效果,2)提出Scale-Transfer Module,在几乎不增加参数量和计算量的情况下生成大尺度的feature map。通过DenseNet提取特征在最后一个Dense Block获得一系列9x9大小的feature map,然后通过Scale-transfer Module对feature map进行放大或缩小。最后分别对不同尺度的feature map做目标检测。

论文地址:

http://openaccess.thecvf.com/content_cvpr_2018/papers/Zhou_Scale-Transferrable_Object_Detection_CVPR_2018_paper.pdf


4.An Analysis of Scale Invariance in Object Detection – SNIP


这篇也是CVPR2018的文章。这篇文章想探讨的是Scale变化对识别和检测的影响,然后就是upsample对于小物体的检测是否有用。根据这两个问题的分析,本文提出了一种端到端的Image Pyramid Network,然后针对大物体在大尺度的图片上、小物体在小尺度的图片上不易识别的问题,提出了一种新颖的训练策略Scale Normalization。这篇文章我觉得最重要的就是把目标检测的多尺度问题进行了进一步的分析,有兴趣的可以看一下细节。

论文地址:

http://openaccess.thecvf.com/content_cvpr_2018/CameraReady/0552.pdf


5.SNIPER: Efficient Multi-Scale Training 


这篇文章发布在NIPS2018,RCNN本身具有很好的尺度不变形,因为它先从图片中提取proposal,然后都resize到224去提取特征但是这样每个proposal不共享特征的计算,很慢,而Fast系列为了解决这个问题,输入大小不固定,不同尺度的图片都经过同一个的cnn提取特征然后拿proposal去对应位置扣特征,这就破坏了RCNN原来的尺度不变形,但是它很快且整体做特征提取能捕捉更多的context,得到广泛的应用。现在大家为了解决Fast系列的问题,往往进行多尺度的训练。RCNN中只对扣出来的proposal进行放缩,小的proposal会放大,合适的proposal就会不怎么变,太大的proposal会放小,总之都会resize到一个固定的尺度,检测网络只用适应这一种尺度,而Fast系列多尺度训练时,不管图片中的proposal大还是小都要跟着图片整体做放大或者缩小,这样检测网络还是去适应这些尺度,而且上一篇中引用Naiyan Wang的说法: 这更多是通过CNN来通过capacity来强行memorize不同scale的物体来达到的,这其实浪费了大量的capacity。上一篇的SNIP是忽略掉大图中的大proposal和小图中的小proposal,也就是把一些极端的情况都忽略掉,相对来说只保留了尺度大致一致(和Imagenet的预训练模型的尺度差不多)的proposal参与训练,但是它也有个缺点就是训练太慢了,每个尺度的图片的每个像素都要参与训练。综上本文提出一种SNIPER的方法,通过生成scale specific context-regions,本文叫做chip,生成多个尺度的chips,不管是哪个尺度都采样到512x512,这样既保留RCNN的尺度不变性和Fast系列的速度,也由于过滤到了很大一部分背景而比SNIP快很多。


论文地址:

https://arxiv.org/abs/1805.09300

项目地址:

https://github.com/mahyarnajibi/SNIPER


6.Scale-Aware Trident Networks for Object Detection


这篇是图森Naiyan Wang的TridentNet ,这篇文章的创新点我可以在这里说一下,主要是基于感受野的控制来实现多尺度目标的检测,本文通过三个branch来实现多尺度目标的感受野,三个branch共享权重,感受野的大小通过dilation rate来控制,同时通过scale aware training 的方式来过了三个branch的检测。具体的可以看作者本人的解读文章:TridentNet:处理目标检测中尺度变化新思路(http://bbs.cvmart.net/articles/231),当然这篇文章还没有会议录用处于刚刚发布阶段。


论文地址:https://arxiv.org/abs/1901.01892



以上就是我接触到的一些关于解决目标尺度问题的最新解决方案,欢迎大家留言一起探讨。





*延伸阅读

目标检测领域还有什么可做的?19个方向给你建议

聊聊目标检测中的多尺度检测(Multi-Scale),从 YOLO到FPN,SNIPER,SSD 填坑贴和极大极小目标识别


每月大咖直播分享、真实项目需求对接、干货资讯汇总,行业技术交流点击左下角“阅读原文”立刻申请入群~


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