目标检测 (Detection) 算法综述

以下是我在2018年7月份找工作时,根据个人所学总结出的目标检测 (Detection) 算法综述。
其中,仅仅挑出我认为比较重要的一系列算法,按照时间顺序进行简要概述。

如有阐述不对的地方,恳请指出。

R-CNN

时间

2013

意义

  1. 鼻祖级CNN detector;
  2. 真正实现了“将检测任务转换为分类任务”;
  3. 检测算法的主流由传统模型转为CNN模型;
  4. CVPR2014。

创新点

解决了两大问题:

  1. 如何定位;
  2. 如何在缺少检测专用数据集的情况下实现检测任务。

解决方案

  1. 采用对region proposal进行定位回归,并设计了encode/decode机制;
  2. 在ImageNet上预训练,移到VOC上进行fine-tune。2. 在ImageNet上预训练,移到VOC上进行fine-tune。

缺点

  1. 对每个RP均走了一遍特征抽取,太低效。

基础网络

AlexNet。

思考

  1. 尽管R-CNN是划时代的,但在它身上也能看到很多前人(如OverFeat)的智慧。

SPPNet

时间

2014

意义

  1. 共享特征抽取,SPP layer;
  2. ECCV2014。

创新点

  1. 共享特征抽取:使得特征抽取不再成为时间瓶颈,几个月后的Fast R-CNN正是吸收了这部分的核心精华并进行了进一步分改进;
  2. SPP layer:对proposal进行pooling,使得检测网络可以输入任意size的图片。因为从输入图片到fc之间契入了对proposal的pooling,使得fc的存在也无法写死输入图片的size。

缺点

  1. pooling后得到的一根根tensor并没有按先前的位置关系排成阵列,而是直接头尾相接,丢弃了重要的位置信息,不利于对proposal的分类(Fast R-CNN提出的RoIPooling改进了这点)。

基础网络

  1. AlexNet。

思考

  1. SPPNet是一个被人忽视的杰出贡献。

Fast R-CNN

时间

2015

意义

  1. 4-stage -> 2-stage;
  2. RoIPooling;
  3. ICCV2015。

创新点

  1. 通过将三个任务(特征抽取、分类、回归)整合到一个CNN里,检测算法从4-stage进入了2-stage时代;
  2. RoIPooling:简化和修正了SPP layer的设计,更好地保留了位置信息;
  3. 提出了mini-batch=2的认知,成为共识;
  4. 回归loss:L2 -> Smooth L1。

结构

后半段:2个共享的fc,接着两个平行的单fc,分别负责分类和回归。

基础网络

VGG-16。

Faster R-CNN

时间

2015

意义

  1. SS -> RPN+anchor机制,第一个end-to-end detector;
  2. NIPS2015;
  3. COCO2015 1st。

创新点

  1. RPN+anchor机制:用RPN替换下SS,使得“生成RP”这个task也能享受到GPU的利好。每张图片生成的RP数量不变,但效率从0.5fps跃升到了100fps。RPN本质是“基于滑窗的二分类检测器”,额外开销只有一个两层的网络。
  2. 新的target机制。

缺点

  1. 只用到了顶层的feature map (在FPN中被修正)。

基础网络

ZFNet或VGGNet。

细节

  1. 一共四个loss,RPN占两个、detector子网络占两个。

思考

  1. Faster R-CNN将Fast R-CNN中的“网络化”趋势做到了极致,实现了“All in one network”。此后所有two-stage方法无不为其变种。

YOLOv1

时间

2015

意义

  1. 第一个1-stage detector;
  2. 第一个real-time detector;
  3. CVPR2016。

创新点

  1. 不需要一个额外的stage来生成RP,而是直接分类回归出output;
  2. 每个grid只负责预测一个物体,这样自然将候选框数量大幅缩减到了S×S×B,有效缓解了类别不平衡。

优点

  1. 超级快:YOLOv1 45fps;Fast YOLOv1 155fps。

基础网络

GoogleNet。

思考

  1. 每个grid只负责一个物体,这种设计非常简单粗暴,明显带有先验信息。因为数据集中大部分图片都是常规图片,分布有秩,大小合理。但是对于小部分非常规图片(如两个以上物体的中心位置落入同一个grid)就只能漏检了。
  2. 由于YOLOv1只针对最后的7*7的特征图进行分析,使得它对小目标的检测效果不佳。
  3. YOLOv1在检测速度和检测精度的两难抉择中选择了短平快的方式,突破了2-stage的格局限制,创造出1-stage。虽然精度不高,但使得real-time detector成为了现实,也指明了real-time detector的大方向。
  4. YOLO系精度普遍不高,因此实际落地中,基本不使用YOLO系。甚至连对实时性要求极高的自动驾驶,用的也是FPN(+Faster R-CNN)那一套。

SSD

时间

2015

意义

  1. multi-scale feature map;
  2. ECCV2016。

创新点

  1. 第一个挖掘和利用了不同scale的feature map。从此,在多个scale的feature map上进行检测成为了共识。
  2. Anchor是Faster R-CNN先提出的,却是SSD第一个进行了深入研究(包括anchor的数量、尺寸、长宽比),后续的YOLOv2便是在此基础上更进一步。

基础网络

VGGNet。

思考

  1. 自称是第一个高精度的real-time detector,其实精度也没有多高;
  2. 后人在SSD的基础上加上了FPN,进化成了DSSD。

R-FCN

时间

2016

意义

  1. 第一个共享头部的子网络;
  2. NIPS2016。

创新点

  1. 针对“不共享的proposal处理过程(即尾部的subnet)”,提出了位置敏感得分图,丢弃RoIPooling,检测网络的前半段和后半段被完整地连到了一起,形成一个全卷积网络。

优点

  1. 精度和Faster R-CNN相差无几,inference speed快了2~20倍。

缺点

  1. 头部太厚重,有 k×k×(C+1) 之厚,为Light-head R-CNN埋下伏笔。

YOLOv2

时间

2016

意义

  1. 第一个large-scale detector;
  2. CVPR2017 Best Paper Mention。

创新点

  1. 一大堆的trick,并设计了自己的basemodel——DarkNet-19。
  2. Large-scale:Softmax嵌套softmax,从而实现分级语法树。带有分级语法树的YOLOv2称为YOLO-9000。

缺点

  1. 虽然贵为第一个large-scale detector,但是由于精度不高,并不实用。后续的R-FCN-3000继承其思想并继续拓荒,在large-scale上取得了较高的精度。

FPN(+Faster R-CNN)

时间

2016

意义

  1. 解决小物体漏检;
  2. CVPR2017。

创新点

  1. 设计出包含”top-down路径”和“横向连接”的module,来融合“缺少细节信息但多语义信息的顶层feature map”和”多细节信息但缺少语义信息的底层feature map”。

优点

FPN开销小,又能检测出小物体,因此成为了检测算法的标准组件。

缺点

顶层的feature map并没有享受到多少FPN的利好,依然是多语义信息但缺少位置信息,依然对检测大物体不利。(该问题为PAN的出现埋下了伏笔)

DSSD

时间

2017

意义

SSD+FPN。

思考

水文一篇。

Mask R-CNN

时间

2017

意义

  1. RoIPooling -> RoIAlign;
  2. 加上第三个pipe-line用于实例分割;
  3. ICCV2017 Best Paper。

DCN

时间

2017

意义

  1. Deformable module(可行变模块)。

创新点

  1. 在传统的方正的卷积、RoIPooling的输出后面加上一层2-D offset,使得输出能够“自动形变”。逐层叠加“形变”,CNN就能更精准地读取目标的语义。

优点

  1. 设计简单、增加的参数量少、支持end-to-end训练、对各种复杂的视觉task都能general。

思考

  1. 一般只用于最后几层,因为后面的细节信息丢失较多,才需要形变操作来更好地刻画目标。
  2. 当大家趋之若鹜地压榨fm、head、proposal的剩余价值的时候,DCN另辟蹊径,对最基础的卷积计算方式开刀,insight很棒。

RetinaNet

时间

2017

意义

  1. CE -> FL;
  2. ICCV2017 Best Student Paper。

创新点

  1. 发现了1-stage系的精度输给2-stage系的根本原因是在anchor中占绝对大头bg导致了“类别不平衡”。而1-stage有RPN罩着,不受影响,1-stage却没有人罩着。于是设计了focal loss来罩着1-stage。

缺点

  1. fp多。

思考

  1. 发现问题根源的意义远大于解决问题;
  2. RetinaNet十分强大,成为了当下最佳的detector之一,也被广泛落地使用。

MegDet

时间

2017

意义

  1. large-mini batch;
  2. COCO2017 1st;
  3. CVPR2018。

创新点

  1. 工程上的创新,真正实现了large-mini batch。

缺点

  1. 难以复现,除非你有128块GPU。

Light-head R-CNN

时间

2017

意义

  1. 投CVPR被拒。

创新点

  1. 将R-FCN的厚重头部压缩得非常薄,因此极大地提速。

思考

  1. 这么剧烈地压缩模型,性能居然不降反升,很反直觉。作者有没有给出一个很好的解释,所以投CVPR被拒。

SNIP

时间

2017

意义

  1. Image Pyramid;
  2. CVPR2018。

创新点

  1. 重新挖掘Image Pyramid的价值,并在此基础上加入了每层scale的有效生成范围。得益于此,三个pipe-line可以各司其事,扬长避短。v创新点】重新挖掘Image Pyramid的价值,并在此基础上加入了每层scale的有效生成范围。得益于此,三个pipe-line可以各司其事,扬长避短。

缺点

  1. 模型太大,1080ti的11G显存根本带不动,根本不实用。

思考

  1. 通过分配任务,大大降低了每个pipe-line的检测难度,从而“作弊式”地实现了“尺度不变性”。

Cascade R-CNN

时间

2017

意义

  1. 第一个级联detector的做法,2-stage -> 4-stage;
  2. CVPR2018。

创新点

  1. 作者受人脸检测的启发,采用“级联引导”的方式,通过一轮轮的级联来提升box的定位质量。

思考

  1. Faster R-CNN将检测算法从4-stage进化到了2-stage,而Cascade R-CNN又将2-stage发展回了4-stage,可以算是一种螺旋式上升吧;
  2. 第一个将级联思想引入目标检测。

R-FCN-3000

时间

2017

意义

  1. 第一个有效的large-scale detector。

创新点

  1. 按子类别进行回归 -> 按大类别进行回归。

PAN

时间

2018

意义

  1. FPN -> PAN;
  2. COCO2017 2nd。

YOLOv3

时间

2018

创新点

  1. 改善了YOLO系的一大痛病:小物体漏检。

DetNet

时间

2018

意义

  1. 第一个专为Detection定制的backbone;
  2. ECCV2018。

创新点

  1. 将原本32倍的下采样,用两个16倍的卷积来替换,号称既可以通过叠加卷积实现感受野的扩张,又可以避免因为下采样所导致的位置信息的丢失。

思考

  1. 16年的YOLOv1早就这么做了,只不过没有拿出来大书特书。
发布了599 篇原创文章 · 获赞 856 · 访问量 184万+

猜你喜欢

转载自blog.csdn.net/JNingWei/article/details/86607160