学号:20021110085 姓名:郑佳
转载自:https://zhuanlan.zhihu.com/p/86843133 (这是我个人的知乎文章)
嵌牛导读】目标检测的发展已经有近20年的历史了,2013年,诞生了R-CNN目标检测方法,该方法是第一个真正为工业级别提供解决方案的深度学习目标检测框架。此后,关于深度学习的目标检测进入了一个崭新的时代。本文将讲述目标检测的相关方法及未来发展方向。
【嵌牛鼻子】基于深度学习的目标检测
【嵌牛正文】
1、简要综述
目标检测的发展已经有近20年的历史了,2013年,诞生了R-CNN目标检测方法,该方法是第一个真正为工业级别提供解决方案的深度学习目标检测框架。此后,关于深度学习的目标检测进入了一个崭新的时代。本文将讲述目标检测的相关方法及未来发展方向。(如果您有任何问题,敬请批评指正)
2、目标检测的四大任务
目标检测的四大任务:语义分割,目标分类,目标检测,实例分割。具体如下图所示:
3、目标检测方法研究
3.1传统目标检测方法
传统目标检测方法核心思想:
在多尺度图像上应用多尺度窗口进行滑窗,每个roi位置提取出固定长度的特征向量,然后采用SVM进行学习判别。这在小数据上比较奏效;传统方法的工作主要聚焦于设计更好的特征描述子,将roi信息映射为embedding feature。
传统目标检测方法的瓶颈:
(1)大量冗余的proposal生成,导致学习效率低下,容易在分类出现大量的假正样本。(2)特征描述子都是基于低级特征进行手工设计的,难以捕捉高级语义特征和复杂内容。(3)检测的每个步骤是独立的,缺乏一种全局的优化方案进行控制。
3.2深度学习目标检测方法
深度学习发展至今,目标检测的发展进展部分代表的检测器如下图所示:
4、重点讲述深度学习目标检测方法
4.1 Two-stage Detectors(两阶段目标检测器)
诸如R-CNN,Fast R-CNN,Faster R-CNN到最新的Mask Scoring R-CNN等网络结构,都属于Two-stage检测方法。如下图:
4.2 One-stage Detectors(单阶段目标检测器)
从最早的OverFeat到现在的YOLO,SSD,RetinaNet,YOLOv2,CornerNet等都属于one stage目标检测方法。如下图:
4.3 CNN Backbone for Object Detection(目标检测的骨干卷积神经网络)
介绍了几种常见的backbone,如VGG16,ResNet,DenseNet,DPN,ResNeXt,GoogleNet,Hourglass。在这里详细说下DPN。
其中,提到DenseNet时指出ResNet的缺点是捷径连接中,浅层的原始特征在像素级的操作上会丢失信息,不能很好利用所有的特征;所以DenseNet采用密集连接以及concat方式充分利用之前各层的特征信息。
事实证明是有效的,在较小的stage以及没有多尺度特征融合策略下提取的特征已经很丰富(但是全部的前向concat内存占用巨大)。
针对DenseNet的连接方式,在此基础上为了改进其信息组合过程中的大量冗余,提出了DPN(NIPS2017),相当于ResNet+DenseNet进行concat,既能组合新的特征,也能降低冗余。
4.4 Proposal(建议框)的发展
4.4.1 传统的目标检测发展
传统方法基于低级特征如方向、边缘、色彩等,对于大的数据集不能很好地辅助表示学习,而且这个过程不能很好地嵌入到检测系统中进行统一的反馈学习和评价。虽然作者说这些方法很简单,但是实际上耗时未必就短。
4.2基于Anchor的方法
常见的就是Faster RCNN提出的RPN为开山之作,后来陆续基于此工作进行改进。如DeRPN将anchor回归的四信息维度分解成两个线段信息(AAAI2019),更易回归(但是效果而言不算特别惊艳);DeepProposal(ICCV2015)从低分辨率特征图到高分辨率特征图路线预测proposal然后精炼;RefineDet(CVPR2018)将手工设计的anchor进行逐级精炼获得更好的候选区域;Cascade RCNN(CVPR2018)通过Iou阈值的match观察,通过iou阈值的筛选逐渐提高高质量proposal的比例;MetaAnchor(NIPS2018)尝试学习如何设计anchor,但是其自定义的基础anchor组仍是手工设计的(这一点和GA相似)。
4.3基于关键点的方法
这里强行将基于关键点的检测器分为两类:corner-based和center-based。前者直接预测一对角点,代表是CornerNet;后者预测特征图上每个位置的中心点出现的概率并在此基础上预测宽高,如FSAF;还有两种思路结合的方法,如CenterNet。
4.4其他方法
其他如AZNet(CVPR2016),通过将整张图片进行不断划分子区域,生成proposal,适用于物体稀疏的场景,实际效果对于一般检测不是特别好用。
4.5关于特征表示学习
4.5.1 常见的多尺度方法如下:
图像金字塔左上图所示。训练多尺度检测器进行不同尺度的检测,这样保留的图像信息最为全面,但是囿于巨大的计算消耗,一般不用。比较近的方法如SNIP使用不同样本训练独立的多尺度检测器,思路很简单并达到了不错的效果,但是这一点上有悖于严格的“通用性”。
特征整合左下图所示。如ION将不同层的特征通过RoIpooling进行裁剪融合,在预测中结合了多尺度的信息;类似的还有HyperNet,Multi-scale Location-aware Kernel Representation等。这种用的不多了,一般现在都是多尺度预测,即使不是也不怎么会这样跨层直接融合(如STDN这样)。
预测金字塔右上图所示。最早是SSD中使用,后来还有MSCNN等使用,这种多尺度预测现在用的很多。作者还把RFBNet归到这里,RFBNet其实核心思想不是这个。
特征金字塔经典的就是FPN了,针对FPN的变体十分多,思路大同小异,结果而言没有特别值得关注的新的点。
4.5.2 Region Feature Encoding(区域特征编码)
主要就是RoIPooling这部分的内容。改进从Pooling到Warping然后是Align以及清华的那个PrRoipooling,减少量化误差。其他的变式如R-FCN的PSRoIPooling;Couplenet的整合pooling输出;可变性卷积的变形RoIPooling等。
4.5.3 context reasoning(语境推理)
4.5.3.1 Contextual Reasoning(情境推理)
物体的出现往往和一定的上下文具有关联性,这对于网络推理信息不足的场景更适用,如遮挡、小物体等。但是其实感觉现实世界背景的关联性没有那么强,比如人可以出现在很多很复杂的环境中,这和人脸检测的强结构关联不同。所以也有文献指出盲目加上下文效果变差。
4.5.3.2 Global Context Reasoning(全局语境推理 )
学习整张图片的上下文信息,并通过这些上下文信息进行目标的推断。代表工作如ION,DeepId,改进版的Faster R-CNN。前两个都没看过,第三个是将全图embedding与区域特征concat以改善预测结果。
4.5.3.3 Region Context Reasoning(区域语境推理)
区域上下文推理只编码候选区域附近的上下文信息,即检测目标与其附近环境的关系。直接建模物体与其周围的关系是很难的,因为目标的周围环境具有很大的变化性,难以抽象和建模。
相关工作有:SMN模块(ICCV2017)记录关联并作为先验判断;SIN(CVPR2018)将物体作为节点,进而推理边的关系的图推理问题;设计了一种Relation Network(CVPR2018)替代掉传统的NMS过程;扩大proposal滑窗尺寸得到更广域的上下文信息然后和本ROI进行concat融合(ECCV2016);GBDNet(ECCV2016)学习门函数选择上下文信息的融合。
4.5.4 Deformable Feature Learning(可变形卷积特征学习)可参考DCNV1,DCNV2等论文。DCNV1参考网址:https://blog.csdn.net/sum_nap/article/details/81097257DCNV2参考网址:https://blog.csdn.net/qq_21949357/article/details/85231270
5、学习策略
5.1训练方面
5.1.1 数据增强可参考:https://zhuanlan.zhihu.com/p/76044027
5.1.2 样本不平衡
proposal的样本不平衡可分为:类别不平衡和难分程度不平衡。
(1)类别不平衡主要是proposal的背景数远多于正样本。解决方法有不均衡采样,如Faster RCNN的1:3采样;SSD中提出困难样本采样策略,将难分proposal喂给网络更新参数。
(2)难度不平衡focal loss,GHM,OHEM。
5.1.3 定位优化
这部分主要是对proposal的位置精修以便获得更准确的bbox。
方法有:(1)得到更高质量的proposal(2)Fast R-CNN的smoothL1回归损失(3)LocNet的连续回归(感觉和IoUNet一样)(4)Multipath Network多尺度Roi以及多个不同阈值IoU分类器的共同学习(5)Grid RCNN
5.1.4 级联学习
级联学习其实出现地很早,并不是由Cascade RCNN先发明的。
(1)(CVPR2001)在人脸检测器中提出级联学习的思想。在早期将大量样本拒绝掉,把困难样本送到下一个stage。(2)在不同层的不同尺度目标应用layer-wise cascade classifier(CVPR2016)。思想和之前类似,将多个分类器放在不同阶段的特征图,进行样本拒绝后送入后面。(3)Cascade RCNN的多级回归。
5.1.5 其他学习
5.1.5.1 Adversarial Learning(对抗性学习)
典型的对抗学习思想就是GAN。还有网络的对抗样本训练有助于提高网络的鲁棒性。
5.1.5.2 Training from Scratch(从无到有的训练)
出发点是分类与检测任务不同,分类预训练模型可能对检测的初始化带来不好的对抗偏置(但是实际来看,预训练能解决很多问题,这个说法有点牵强)。
最早提出Training from Scratch的是DSOD,后来陆续有基于此的结构改进以便实现从头训练的更好收敛。包括Detnet就以这个为标准进行了比较。但是何恺明的Rethinking imagenet pre-training表示只要数据够大(10k),直接训练不逊色于fine-tune的,无关具体结构,这间接否定了一些这方面设计的工作。
5.1.5.3 Knowledge Distillation(知识升华)
两篇论文:Revisiting rcnn: On awakening the classification power of fasterrcnn和Mimicking very efficient network for object detection
5.2测试阶段
5.2.1 Duplicate Removal(重复删除)
介绍NMS,soft-NMS,还有可学习的Learning NMS。
5.2.2 Model Acceleration(模型加速)
主要是针对两阶段检测器耗时问题的解决。针对R-FCN的heavy位敏特征图,Light Head R-CNN进行简化取得不错的速度和性能的tradeoff;backbone方面有MobileNet深度可分离卷积加速特征提取;非线性计算部分有PVANet采用CReLU激活函数加速;还有一些离线加速方法,如模型压缩量化,剪枝等。
5.2.3 其他测试策略
图像金字塔的多尺度测试;数据增强。但是这些办法的问题都是时间耗费大。
6、在不同数据集上的检测效果
6.1在VOC数据集上的检测效果
6.2在coco数据集上的检测效果
7、目标检测未来可能研究方向
(1)Proposal的Anchor生成方式(2)对上下文信息更有效的编码(3)更好更大的数据集(4)Low-shot目标检测(5)适用于检测任务的backbone(6)轻量级目标检测:加速检测算法,使其能够在移动设备上平稳运行。(7)AutoML:未来的一个方向是使用神经结构搜索,减少设计检测模型时的人为干预(例如,如何设计引擎,如何设置锚盒)。AutoML可能是目标检测的未来。(8)弱监督检测(9)小目标检测(10)在视频中检测(11)信息融合检测(12)其他,如batch的大小、增强学习等
8、分享一些关于目标检测的资料
(1)目标检测既然如此重要,那么关于object detection方面的论文,以及代码如何准确的追踪和学习呢?
这里推荐GitHub上一个知名项目,该项目详细的讲述了目标检测的发展,项目地址为:https://github.com/hoya012/deep_learning_object_detection
有了这个,可实时关注最新的目标检测新动态,你想要的论文地址和代码地址它都有。
(2)目标检测既然如此重要,有没有封装好的深度学习目标检测工具箱可供使用学习呢?
这里推荐两个开源的目标检测工具箱:
如果你习惯使用Pytorch深度学习框架的话,推荐mmdetection目标检测工具箱,项目地址为:https://github.com/open-mmlab/mmdetection
如果你习惯使用MXNet深度学习框架的话,推荐使用simpledet目标检测工具箱,项目地址为:https://github.com/TuSimple/simpledet
(3)然而有没有关于该框架的深度学习优质书籍可供学习呢?
答案是有的,MXNet深度学习框架的作者李沐大神,写了一本《动手深度学习》的畅销书。资料地址如下:https://zh.d2l.ai/
当下Pytorch深度学习框架比较火热,然而,《动手深度学习》这本书使用的是MXNet框架。好消息是,印度的一个大神,将该书翻译成了Pytorch版本。项目地址为:https://github.com/dsgiitr/d2l-pytorch
《动手深度学习》下载地址:链接:https://pan.baidu.com/s/1qWJj3iFi3xD-KxPMWmUocg 提取码:icji
References https://blog.csdn.net/jningwei/article/details/80642054Xiongwei Wu a,∗ , Doyen Sahoo a , Steven C.H. Hoi a,b. Recent Advances in DeepLearning for Object Detection.https://zhuanlan.zhihu.com/p/76515809