RCNN系列总结

各类方法主要的创新点

  1. RCNN解决的是用CNN网络对每个proposal region进行特征提取
  2. SPP-RCNN实现了对整个图片进行特征提取,然后再在feature map寻找特定的proposal region, 并提出了特征金字塔池化来解决不同大小proposal region输出到固定尺寸的问题。
  3. Fast-RCNN实现了卷积网络的权重共享,使用RoI pooling来保持多尺度输入(SPP-RCNN), 并去除了SVM分类器,改用softmax实现了端到端。
  4. Faster-RCNN提出了RPN, 用卷积层提取proposal region,实现了端到端训练

R-CNN

这是基于一篇CVPR2014的文章,由于Alex-Net和VGG等深度网络在分类任务的成功应用,大家发现,深度神经网络自主提取的特征要比传统的手工方式提取的特征更加丰富,于是开始尝试在检测任务中使用深度网络来提取特征。其中R-CNN (Regions with CNN feature) 就是一个比较好的例子

算法
  1. 输入测试图片
  2. 利用selective search算法从图像中提取约2k左右个region proposals
  3. 把每一个region proposal的图像块缩放成等比例大小后输入CNN网络,在最后一层全连接输出图像特征
  4. 把每一个region proposal 的CNN特征输入到SVM进行分类处理
  5. 对SVM分类好的region proposal进行边框回归处理,使得预测框和真实框更加吻合
优点:
  1. 将CNN网络应用于目标检测领域并实现了图像特征自动提取
  2. 精度显著提高, PASCAL VOC2010从35.1%到53.7%
缺点:
  1. 每一个region proposal 都需要resize然后经过CNN网络提取特征,region proposal大量重叠区域被重复提取的特征。
  2. 每个region proposal经过CNN网络提取出来的特征得保留下来,用于训练SVM分类,占用过多的物理内存
  3. 训练分成多个阶段 region select + CNN特征提取 + SVM分类 + 边框回归。无法实现端到端训练。

SPP-Net

刚刚讲到了R-CNN的缺点:region proposal之间有大量重叠的区域被重复的提取特征。我们能不能共享特征,在特征提取阶段,直接对一整张图片进行特征提取,得到feature map, 然后在feature map中找到region proposals的区域,但是由于CNN网络中存在全连接层,所以在全连接层前还是得进行缩放处理,但这样处理会丢失一些信息,基于此SPP-Net在全连接层前面,加入了一个空间金子塔结构,用来适应不同尺寸的特征图。
综上,SPP-Net相对于R-CNN主要做了两点改进:1. 对整张图进行一次特征提取 2. 引用了空间金字塔

空间金字塔池化

不同尺寸的region proposal经过CNN网络后生成的feature map大小不同,我们该怎么提取特征让它的输出为固定维数呢?在SPP结构中,feature map被均分成三类不同大小的块。分别是4 × \times × 4个网格格, 2 × \times × 2个网络格, 1 × \times × 1个网络格. 假设feature map 大小为 w*h*c, feature map 被分成 4 × \times × 4个大小为 w 4 \frac{w}{4} 4w * h 4 \frac{h}{4} 4h *c的块,然后通过池化层,就能得到固定的16*c的feature vector。同理,feature map被均分成2 × \times × 2块或1 × \times × 1块,然后对每一个块进行池化,就可以得到固定的4*c或者1*c的feature vector。然后将它们连接起来,就可以得到固定大小为17*c的vector。然后通过全连接层得到最终的特征用于分类。

优点
  1. 对整张图进行一次特征提取,加速运算速度,并提出了权重共享的策略 。
  2. 提出了空间金字塔池化,解决了不同尺寸特征图输入的固定输出大小问题。
缺点
  1. 缺点还是在于分类器使用SVM, 不能端到端训练,且需要磁盘存储大量的特征。
  2. 分阶段训练,训练过程复杂

Fast R-CNN

与SSP-Net类似, Fast R-CNN的网络将图像和region proposal作为输入,经过卷积层得到feature map后,经过特定RoI pooling后输出固定大小的特征图,然后输入到全连接层。与SPP-Net和R-CNN不同的是,通过全连接层后的特征不是用SVM进行分类。而是将其分成两个分支,一个是再通过全连接层以及softmax层进行分类(类别个数+1背景),另一个用于边框回归,输出检测框位置信息的纠正值。

优点
  1. 使用了softmax代替了SVM进行多分类的预测,从而实现了端到端的训练。
  2. 提出了一个分支用于边框回归,解决了R-CNN和SPP-Net的多stage训练的方式,变成多任务的方式训练网络。
  3. 实现了CNN网络的权重贡献,使用RoI pooling来保持多尺度的输入
缺点

在region proposal模块还是用selective search, 并且只能在CPU中运行这个算法,这个阶段还可以改进。

Faster-RCNN

刚刚讲到了Faster-RCNN的缺点就是region proposal还是用selective search的方法求得,能不能也用卷积网络。于是大佬们Ross Girshick 和 kaiming He提出了RPN(region proposal network)用于提取proposal region, 使得检测算法在VGG 16的模型中实现了5ps, 做到了实时检测。

优点
  1. 优化论文region proposal 模块,不再使用selective search, 而是提出了RPN题产生建议区域,真正实现了end to end训练。
  2. 在GPU上达到了实时 (5fps based VGG && 17 fps based ZF)
  3. 精度提高了,COCO检测42.1%, 而Fast R-CNN为39.3%
缺点

商用的话速度依然是问题,需要模型轻量化或者one-stage算法

到此,R-CNN系列的基本结构已经基本改进完成了。首先采用卷积网络提取图片特征,利用RPN提取region proposal,其次,为了适合不同候选区域的尺寸,我们采用了ROI Pooling 进行尺度的固定化,最后,将多阶段的训练方式改变为多任务的训练方式。

Reference

如何评价rcnn、fast-rcnn和faster-rcnn这一系列方法?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注