从暑期进入实验室后,一直在做与目标检测相关的工作,从最初的物体实时识别项目,到现在正在进行的阿里天池大赛,一直使用到 Faster R-Cnn,Cascade R-Cnn,YOLO 相关的算法, 但对其并不怎么了解,在此对目标检测相关的算法论文进行学习记录,本篇文章先总结对比了多步的目标检测算法即 R-Cnn 系列,再对单步的目标检测算法进行总结对比,中间穿插着一个目前在各大框架中为了进行多尺寸检测而使用的FPN,在实际应用上来看,如果要进行物体的实时检测,会选用单步检测算法,而对于追求精度的比赛,还是会选择多步的检测 算法。为了方便以后复习阅览,本篇文章采用中文编写。

1. R-CNN[1]

Title: Rich feature hierarchies for accurate object detection and semantic segmentation Tech report
Author: Ross Girshick, Jeff Donahue, Trevor Darrell, Jitendra Malik

组成部分: 共三个模块,第一个模块用于生成类别无关区域提案(使用SS算法为每幅图片生产大约2000个 region proposals),第二个模块将生成的区域提案输入卷积神经网络中提取特征,第三个模块对提取的特征进行 SVM 分类。
检测流程: 目标检测相关算法综述
a. 输入一个图像
b. 使用 SS(Selective Search)算法提取大约 2000 个 region proposals
c. 将提取的 region proposals 输入 CNN 网络中提取特征
d. 对提取到的特征进行 SVM 分类。
e. 边界框回归
创新点:
a. 不再使用滑动窗口的形式生成候选框,避免了在大量无关的区域进行检测。
b. 使用卷积神经网络提取特征。
缺点:
a. 很慢
b. SS 算法生成的 region proposals 有很多重复区域
c. 输入图片必须缩放到特定大小(原文为 227*227,因为 AlexNet CNN 需求),可能会使物体变形
d. 流程复杂

2. SPP-Net[2]

Title: Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Author: Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun
目的:
解决 R-CNN 缺点中提到的 a, b, c 缺点。
算法流程: 目标检测相关算法综述
a. 使用 SS 算法生成大约 2000 个 region proposals
b. 对整张待检测图片输入CNN中进行特征提取,在得到的特征图中找到各个region proposals 区域,对这些区域采取金字塔空间池化得到固定长度的特征向量。
c. 使用 SVM 对得到的特征向量进行分类。
d. 边界框回归
创新点:
a. 使用金字塔空间池化,这样避免了 R-CNN 中需要对提取到的 region proposals 进行缩放, 即解决了 R-CNN 缺点中的 c。
b. 加快了速度,R-CNN 是对提取到的 2000 个 region proposals 逐一输入 CNN 中进行特征提 取,而 SPP-Net 只对整个图片进行一次 CNN 特征提取,再根据 region proposals 从提取到 的特征图中获取相应的区域。
c. 在一定程度上解决了 region proposals 区域重复的问题,因为将 region proposals 映射到特 征图上时,特征图上某一区域感受野很大,可以将重复区域大的 region proposals 包含在一 起。
金字塔空间池化:
目标检测相关算法综述
论文中对金字塔空间池化的解释为在卷积层之后,全连接层之前,使用金字塔空间池化,将卷 积层得到的特征图分别分为三部分,一个分为 16 块的特征图,一个分为 4 块的特征图,一个分 为 1 块的特征图,然后对上诉每块取最大值,得到 16,4,1 即总长度为 21 的固定长度的特征, 再输入全连接层中。 因为测试类别数为 21,所以设计的金字塔空间池化最终会对任意尺寸的图片输入生成固定长度 21 的特征向量,可根据实际需求调整。这样处理后,因为输入全连接层的特征长度固定,所以 对输入图片的尺寸就没有要求了,避免了对提取的 region proposals 进行尺寸缩放。
缺点:
a. 还是比较慢
b. 流程复杂
c. 微调时不更新金字塔空间池化层之前的卷积层,无法搭建深层网络。 (部分 region proposals 的感受野太大,反向传播困难),还有个原因是 CNN 与 SVM 是分离的。

3.Fast Rcnn[3]

Title: Fast R-CNN
Author: Ross Girshick
结构:
目标检测相关算法综述
步骤:
a. 输入一张图片和在其上使用 SS 算法生成的 region proposals(此处又称 ROI)
b. 对输入的图片进行 CNN 处理,生成整张图片的特征图,将 ROI 投影到特征图上来(应用简 单的投影原则,根据比例大小变换进行投影)
c. 对投影到特征图上的ROI区域进行ROI Pooling操作,类似于SSP-Net中的金字塔池化操作, 将不同尺寸的 ROI 区域变换为固定尺寸,然后输入 FC 层。
d. 全连接层中将任务分为两部分,一部分使用 softmax **函数预测其所属类别,该部分会产 生 K+1 维的向量,K 为类别数,1 为背景;另一部分进行边界框回归,对于 K 个类别(对背 景不预测),都会生成对应的边界框回归预测(x,y,w,h),因此此处会生成 k*4 维的向量。
ROI pooling 层:
SS 算法生成生成大量候选框(region proposals),对应到整个特征图中,对应方法为比例对应, 对应到特征图上的候选框称为 ROI,对于每个 ROI,假设其大小为 hwh*w,将其划分成HWH*W个子 特征图,每个子特征图的比例为 H/hW/wH/h*W/w,再在这些子特征图上进行最大会平均池化操作,最 终得到大小固定为 HWH*W 的特征图
损失函数:
损失函数为类别预测损失和边界框回归损失,类别预测损失即 softmax 损失使用的是交叉熵损 失,边界框回归损失使用 SmoothL1 损失,注意,当类别为 0 即背景时,不进行边界框回归, 此时边界框回归损失为 0,类别预测损失和边界框回归损失之间通过系数调整各自所占比例。
创新点:
a. 将原来的多步操作(R-CNN, SSP-Net)集成在一个网络中,不再使用 SVM 分类,而是直接在 网络中使用 softmax 分类,将多步操作转换为单步操作,节省大量磁盘空间。
b. 引入 ROI Pooling 层,类似于金字塔池化层,将尺寸不同的 ROI 映射成相同尺寸的特征图。
c. SPP-Net 在训练时采用以 ROI 为中心的训练方式,即在所有图片的所有 ROI 中均匀采样, 但是因为其 ROI 映射时是通过感受野映射,因此在反向传播中要计算每个 ROI 感受野的卷 积层,通常很大,覆盖原图,反向传播速度极慢,因此只微调金字塔池化层之后的全连接 层;但 Fast R-Cnn 是以图像为中心进行训练,比如训练 2 个图像的 128 个 ROI,那么每个 图像上的 64 个 ROI 是共享计算的,这样比训练 128 个图像上的各 1 个 ROI 快了 64 倍。
缺点:
a. 仍然使用 SS 算法生成候选框(ROI),生成的候选框重复高,不够精细。
b. 不够快。 ## 合理的创建标题,有助于目录的生成

4.Faster Rcnn[4]

Title: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Author: Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
在我看来,Faster-Rcnn = Fast R-Cnn+RPN 。
其提出了 RPN 即区域提取网络,在共享主干网络的基础上添加特定网络学习分辨前景及其边界 框,打破了区域提取算法的时间壁垒。
核心思想:
目标检测相关算法综述
如图,RPN 网络与原网络共享 conv layers 层,该 conv layers 层将生成特征图,而后兵分两路, 一边输入 RPN 网络来生成 region proposals, 另一边输入 ROI pooling(同 Fast R-Cnn),与 RPN 生成 proposals 相结合进行类别预测和边界框回归。
RPN 网络:
目标检测相关算法综述
a. RPN 网络建立在主干 conv layers 之上,根据 conv layers 生成的特征图,假设特征图上的每 一点都含有 k 个 anchors, k 根据自己设定而来,设定 anchor size 和 anchor ratios 即 anchor
的大小和 anchor 的长宽比。在原论文中 k=9(33)k=9(3*3),即假设对于特征图上的每个点都有 9 个 anchors,这九个 anchors 将在后续中进行两次边界框回归。
b. 如图所示,对于上述每一点生成的 9 个 anchors,对其进行 softmax 类别预测(包含对象,不 包含对象),使用 18 个111*1的卷积层代替全连接层,最终每一点的 18 个通道中存储的是这 9 个 anchors 属于前景还是背景的概率,同理,使用 36 个 111*1 的卷积层代替全连接层,最 终每一点对应的 36 个通道中存储边 9 个 anchors 对应的边界框的偏移量(dx,dy,dw,dh)。
c. 根据预测类别结果和边界框回归结果,结合起来,得到属于前景(即含有对象)的更精确的边 界框信息,此时则生成了需要的 region proposals。
RPN 产生对应的 region proposals 后,就像 Fast R-Cnn 一样,根据生成的 region proposals 对 应的特征图上的区域,输入 ROI Pooling 中,进行类别预测和第二次边界框回归。 实际上,RPN 网络产生的结果相当于进行了一次目标定位,但没有进行目标识别,因为他只判 断 anchors 中是否包含对象,而最终类似于 Fast R-Cnn 结构中进行目标识别并再进行一次边界 框回归,得到更精确的位置信息。 注意:在训练时,先在已经训练好的 conv layer 上,训练 RPN 网络,再利用训练的 RPN 网络收 集 proposals,然后训练 Fast R-Cnn 网络,如此迭代两次。(RPN 网络和 Fast R-Cnn 网络分开训 练,但彼此之间有数据交流,即 RPN 生成的 proposals 要用于训练 Fast R-Cnn) 。

5.Cascade Rcnn[5]

Title: Cascade R-CNN Delving into High Quality Object Detection
Author: Zhaowei Cai, Nuno Vasconcelos
Cascade R-Cnn 与 Faster R-Cnn 很相似,主要在 IOU 阙值处提出了改进。 在原 Faster R-Cnn 论文中,正负样本分类使用了一个统一的 IOU 阙值(比如 0.5),而在 Cascade R-Cnn 中使用了一个级联的结构,比如第一级使用 IOU 阙值为 0.5,第二级为 0.6,第三级为 0.7, 上一级的输出作为下一级的输入,得到的结果更加精确。 使用低 IOU 阙值时容易产生大量无用的 proposals,而使用高 IOU 时,proposals 产生的质量变 高,proposals 数目变少,容易产生过拟合,所以作者使用一个级联的结构,逐级增大 IOU 阙值, 这样对上述问题进行了综合,结果更精确。
目标检测相关算法综述
上图左为 Faster R-Cnn 结构,其中 I 为输入图片,conv 为主干网络,H0 为网络头,B0 为 RPN 提取出的前景 proposals,输入 ROI Pooling 中再进行分类和边界框回归得到 C1,B1. 而 Cascade R-Cnn 结构如上图右所示,在获取 B0 即 proposals 的基础上,采用多步,使用不同 IOU 阙值构成级联网络。 我认为 Cascade R-Cnn 是一种可以通用的结构,这种思想可以用在很多模型上。

6.FPN[6]

Title:Feature Pyramid Networks for Object Detection
Author:Tsung-Yi Lin, Piotr Dollar, Ross Girshick,Kaiming He, Bharath Hariharan, and Serge Belongie
FPN 被提出是为了解决多尺寸目标检测。 如图为其结构,可以看到,先对原图片进行前向传播,在不同卷积层会产生不同尺寸的特征图, 作者称之为自底向上过程,然后是自顶向下过程,每一层向下传播,传播过程为当前层上采样
到原图 2 倍(原文为了洁简使用最近邻上采样)加上下一层(通道数使用 1*1 卷积核改变),这样得 到的每个特征图都具有该层的语义特征,再对这些不同尺寸的特征图分别进行训练预测。 目标检测相关算法综述

7.YOLO[7]

Title:You Only Look Once:Unified, Real-Time Object Detection
Author: Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi
之前的都是双步或多步的目标检测,从 YOLO 开始为单步进行目标检测的方法。这种方法将目 标检测问题视为回归问题,最终通过一个卷积神经网络生成目标类别和边界框,在速度上远快 于之前提到的方法,可以达到实时的级别,但在精度上较差。
核心思想:
目标检测相关算法综述
YOLO 将图片分为 S*S 个单元格,每个单元格负责预测中心落在其中的目标,为每个单元格分 配 B 个 anchor box,原文实验按照 2 个来,每个 anchor box 里有五个元素(x,y,w,h, confidence), 再对每个单元格预测 C 个类别的概率,因此每个单元格产生 B5+CB*5+C 个数据,最终数据维度为: SS(B5+C)S*S*(B*5+C),具体反映在通道维。需要注意的是对于较大的目标和处于单元格边界的目标,会 有多个单元格对其进行预测,最终会生成多个边界框,因此需要进行 NMS,在原文中,采用 NMS 后 map 提升了 2 到 3 个点。
创新点:
a. 将目标检测整体视为一个回归问题,单步操作就能得到结果,大大提升了速度。
b. 激励函数采用了 leak y relu,是一个全新的尝试,可以在一定程度上解决负值的梯度为 0 的 问题
缺点:
a. 原文中为每个单元格分配了两个 anchor,当遇到很小而成群的目标时很难检测,比如成群 的鸟。
b. 因为 anchor 的大小和长宽比是人为设定的,所以模型泛化能力不够强,因此精度不够。

8.YOLO v2[8]

Title: YOLO9000: Better, Faster, Stronger
Author:Joseph Redmon, Ali Farhadi
YOLO v2 对于 YOLO 有以下几点改进:
a. 加入了 BN 层,即批量归一化层
b. 学习 Faster R-Cnn 的 RPN 网络,对每个单元格根据 anchor size 和 anchor ratio 生成 9 个 anchor boxes,相对于原来的每个单元格生成 2 个 anchor boxes,准确率下降 0.3 个点,召 回率上升 7 个点,且对每个单元格分别预测 9 个单元格的置信度,边界框和 C 个类别,最 终生成 SS(9(5+C))S*S*(9*(5+C))的数据(原来为 SS(25+C))S*S*(2*5+C))
c. 使用了自定义的新网络 Darknet-19,输入图像分辨率扩大为 448448448*448
d. 划分为 131313*13 个单元格,更加精细。
e. 通过 K-Means 聚类获得更精确的 anchor 先验框。

9.YOLO v3[9]

Title:YOLOv3: An Incremental Improvement
Author:Joseph Redmon Ali Farhadi
在 YOLO v2 的基础上做了进一步更新,在这片文章中作者介绍了做出的有效的改进,以及一些 尝试了但效果不明显甚至降低了效果的改进。
a. 仍使用聚类方法获得 anchor boxes。
b. 使用平方和距离误差损失来计算边界框回归的损失,计算起来很快。
c. 在类别预测时使用二元交叉熵损失代替 softmax
d. 用三种尺寸不一的边界框,使用类似于 FPN 的方式来提取这些尺寸的特征。
e. 使用了一个新网络来提取特征:Darknet-53。

10.SSD[10]

Title: SSD: Single Shot MultiBox Detector
Author: Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy,Scott Reed, Cheng-Yang Fu, Alexander C. Berg
目标检测相关算法综述
上图显示了 SSD 与 YOLO 的对比,可以看到 SSD 在主干网络提取出特征后,添加了额外几个卷 积层获得不同大小的特征图,对每个特征图分别进行预测,在预测过程中,通过设定 anchor size 和 anchor ratios 在不同特征图的每个单元上进行预测,其中,高分辨率的特征图感受野较小, 可以预测较小的物体,低分辨率的特征图感受野大,可以预测较大的物体,如下图所示,通过 额外添加的不同的卷积层,得到 888*8444*4 的特征图,对特征图上的每个单元预测 4 个 anchor box, 其中 888*8 的特征图可以对图片中的猫(较小物体)进行较好的预测,而 444*4 的特征图可 以对图片中的狗(较大物体)进行较好的预测。
目标检测相关算法综述

总结

以上是最近整理的目标检测相关的算法,不够全面,且限于本人的知识水平难免有出错或者表述不准确的地方,图片均出自论文原文。

[1]: Girshick R, Donahue J, Darrell T, et al. Rich feature hierarchies for accurate object detection and semantic segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2014: 580-587.
[2]: He K, Zhang X, Ren S, et al. Spatial pyramid pooling in deep convolutional networks for visual recognition[J]. IEEE transactions on pattern analysis and machine intelligence, 2015, 37(9): 1904-1916.
[3]: Girshick R. Fast r-cnn[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1440-1448.
[4]: Ren S, He K, Girshick R, et al. Faster r-cnn: Towards real-time object detection with region proposal networks[C]//Advances in neural information processing systems. 2015: 91-99.
[5]:Cai Z, Vasconcelos N. Cascade r-cnn: Delving into high quality object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 6154-6162.
[6]:Lin T Y, Dollár P, Girshick R, et al. Feature pyramid networks for object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 2117-2125.
[7]:Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 779-788.
[8]:Redmon J, Farhadi A. YOLO9000: better, faster, stronger[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 7263-7271.
[9]:Redmon J, Farhadi A. Yolov3: An incremental improvement[J]. arXiv preprint arXiv:1804.02767, 2018.
[10]:Liu W, Anguelov D, Erhan D, et al. Ssd: Single shot multibox detector[C]//European conference on computer vision. Springer, Cham, 2016: 21-37.