Detection总结一之rcnn系列

最近在做目标检测的相关项目, 对这一领域近几年的paper都梳理了一下. 总结归纳一下目标检测近几年的发展, 一共分为三篇来写, 分别是

本文先梳理一下基于Region Proposal的检测方法. 在梳理中不会涉及太多细节, 只会谈一下大概的思路和每篇论文的关键点. 关于细节处可以去查看对应的paper.

RCNN系列基本步骤

RCNN — features matter, 将CNN引入目标检测

RCNN论文开篇第一句便说明了论文的关键工作 — 特征, 而特征提取正是CNN网络所擅长的地方.

回顾一下在RCNN之前目标检测的一个基本流程:

而RCNN的重大改进在于:

rcnn

RCNN的基本步骤为

RCNN中几个注意的点

RCNN将CNN网络引入到了目标检测领域, 可以说是这一系列方法的开山之作. 但其存在几个明显局限.
RCNN的几个明显局限

SPPNet — Spatial Pyramid Pooling 解决候选区resize问题

  针对RCNN中存在的2、3缺点, SPPNet提出了Spatial Pyramid Pooling来进行改进. Spatial Pyramid Pooling能够接收不同大小的输入, 但产生相同大小的输出.

sppnet

引入Spatial Pyramid Pooling后, SPPNet在以下步骤上与RCNN不同:

  同时此处需要注意的是, 经过Spatial Pyramid Pooling的feature先保存在了硬盘了, 所以在用Softmax进行finetune的时候只对后面的几个全连接层进行了fine-tune. 这个问题将在Fast RCNN里得到解决. 其之所以不对卷积层进行finetune的原因我们在后面说.

sppnet2

Spatial Pyramid Pooling基本含义
  我们知道传统的pooling操作是以固定的滑动窗口大小对feature map进行滑动得到, 其输出与输入大小有关. 而Spatial Pyramid Pooling解决不同大小输入却同样大小输出的关键在于, 使用的是输入feature map的相对大小的滑窗来进行滑动. 相对大小的引入使得不同大小的feature map有与之对应的不同大小的滑动窗口, 从而便得到了统一大小的输出.

  同时为了提取多尺度信息, 进行几个不同scale的相对大小pooling操作, 将它们拼接起来, 便形成了Spatial Pyramid Pooling的输出结果(如上图所示).

Spatial Pyramid Pooling的优点

SPPNet还存在的局限

Fast R-CNN — ROI pooling & Multi-task loss解决多阶段训练和硬盘缓存问题

  Fast R-CNN顾名思义就是比较快的RCNN, 那么它快在哪里, 相比于SPPNet又进一步解决了哪些问题呢?

  前面我们说到SPPNet中还是使用多阶段的训练方式, 并且还需要额外的存储. Fast R-CNN通过引入ROI pooling以及Multi-task loss将训练都放在网络中来进行. 至此除了Region Proposal的提取外其余的都是利用卷积神经网络来解决了.

fast_rcnn

Fast R-CNN基本步骤

下面具体来说说其改进之处.

ROI pooling
  ROI pooling借鉴了SPPNet中的spatial pyramid pooling, 其实质是只包含一个scale的spatial pyramid pooling, 所以得到的结果也是尺度无关的.

  这个地方不同之处在于, 在训练过程中Fast R-CNN不会先将这些feature缓存起来, 而是直接在挑选后进行前向传播, 并在反向传播时传播回前面的卷积层, 这样前面的参数便也得到了更新. 这一点是其与SPPNet中很大的不同之处. 因为在SPPNet中, feature经过了缓存, 而后再随机挑选进行训练, 此时如果想要更新前面的卷积层便很困难了—因为需要把所有feature对应的image都前向传播一次, 这十分低效.

  比如在Fast R-CNN中, 先随机挑选了N张图像, 进行前向传播, 然后再从每张图像中选择\(\frac{R}{N}\)个Region proposal进行计算和更新. 但是在SPPNet中, 如果要达到R个Region proposal同样的效果便需要前向传播R张图像(假设R个区域来自不同的图像). 显然Fast R-CNN要高效得多. 由于前面的卷积层得到了更新, 整体检测效果也得到了提升.

Multi-task loss
  相比于之前先用softmax微调, 再用svm训练, 最后再用regression进行回归调整的方法. Fast R-CNN将这个过程整合到了一起, 避免了硬盘存储.

  具体来说网络的最后输出分为了两个分支, 一个分支输出为C+1(含背景)用于判断是否某个类, 另一个分支为4C输出用于对box进行回归调整.

  可以说这一设计十分巧妙, 以后的detection任务中基本都是基于这个loss思路的变型.

  此处 \(u\)代表类别, 控制了只有当存在物体时regression的loss才会有贡献值, 而 \(v=(v_x, v_y, v_w, v_h)\)表示真实坐标值, 而\(t^u\)表示预测值. 注意此处的回归问题是没有约束的, 为了避免回归函数对于outlier过于敏感, 使用了分段的损失函数

  即只有当值较小时使用欧拉距离, 否则使用\(L1\)距离.

  到此为止检测工作中除了Region Proposal的产生外都是由卷积网络来完成的了, 而且没有中间的缓存步骤, 基本实现了端到端.
Fast R-CNN中还存在局限

Faster R-CNN—RPN网络提取proposal, 所有工作统一到CNN网络结构中来

faster_rcnn

  在Fast R-CNN后, 这一体系的相关方法便只剩Region Proposal的提取为速度和精度瓶颈了. Faster R-CNN提出了Region Proposal Networks(RPN)用于提取proposal, 通过与Fast R-CNN共享大部分卷积层, 实现了实时的Region Proposal提取, 同时由于这些proposal从数据中学得, 会受益于好的feature. Faster R-CNN可以看做是RPN与Fast R-CNN的一个结合.

Region Proposal Network(RPN)的基本概念
  RPN接收一张图像, 输出一系列的Region Proposal和其对应的score. 注意此时的Region Proposal是不带类别属性的.

rpn

  RPN可以看做一个全卷积的网络结构(FCN), 图像经过一系列的卷积层后, 输出一张feature map. 其基本步骤基本表达为

  注意到上面每个\(n \times n\)的feature都共享了后面的全连接层, 因此可以通过一个大小为\(n \times n\), 卷积核个数为256的卷积操作; 再分别加上两个\(1 \times 1\), 卷积核分别为2k和4k的卷积操作来实现这一过程. 可以看到整个RPN网络是全卷积形式的.

rpn2

  特别注意此处anchor的选择上, 每一个固定大小\(n \times n\)的feature区域都负责一系列不同尺度和大小的anchor, 作者将其称为a pyramid of anchors, 利用其解决图像金字塔/特征金字塔想解决的多尺度问题. 与之对应的则是预测结构的设计, 在Fast R-CNN中的基本步骤是从任意大小的ROI区域提取相同大小的feature, 然后以每个ROI区域的feature作为一个单位进行训练—regression weights是被所有feature共享的, 只训练一个regressor. 而在这里是以\(n \times n\)的feature作为一个单位, 而每个区域对应于k个可能ROI区域, 所以训练了k个regressor.

  在损失函数的设计方面, RPN借鉴了Fast RCNN以及RCNN中的设计. RPN这种基于先验知识的box提取方法十分经典, 后面被yolo v2等方法借鉴.

  在训练好RPN以后便可以直接用其提取Region Proposal, 然后结合Fast R-CNN来做进一步的detection工作了. 由于RPN和Fast R-CNN共享了前面的卷积层, 怎么进行训练便成为一个问题, 作者提出了4-step training. 具体来说为:

  至此基于Region Proposal的detection方法就都统一到CNN网络中来进行了, 算是完成了深度学习搞定detection的大统一, 当然后面还有很多改进工作的进行. 结合做semantic segmentation研究热点, 我个人认为目前主要有两个可能的改进方向.

参考文献
[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[C]//European Conference on Computer Vision. Springer, Cham, 2014: 346-361.
[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]Zhao H, Shi J, Qi X, et al. Pyramid scene parsing network[J]. arXiv preprint arXiv:1612.01105, 2016.