R-CNN、Fast-RCNN、Faster-RCNN思想总结

本文对运用深度学习卷积神经网络来进行目标检测(object detection)的 tow-stage两阶段法的思想用自己的理解做一个总结,本人新手一个理解可能有错误或者不完备。在运用卷积神经网络处理目标检测之前还有很多的传统算法这里不做介绍。

一、传统的滑窗算法

VGG16

所谓目标检测就是要在图片中用一个框框出物体并且进行分类。而用深度学习去解决这样的问题还得从滑窗算法说起。滑窗算法就是用一个特定尺寸大小的窗口以特定的步长在图片上滑动截取小图像块Resize之后将其送入一个为分类任务所训练的卷积神经网络中,比如VGG16,如果我们是想加测出十类物体那么把VGG16或者其他分类网络迁移过来去掉最后一层保持其他层的网络参数一致,然后在写一个softmax输出元素个数为10的向量,之后在网络上接着训练进行微调(Fine-tuning)就可以了。本质上来说这种滑窗算法就是将目标检测问题转变成了一个分类问题,这样处理过于简单,算法的缺陷是很明显的:

  1. 要设置给定的步长和窗口大小,窗口太小框不住物体,太大又产生数据冗余,框被定死了不能变通

2.计算量太大,没滑动一次都将图像块输入网络中分类,这样可能将背景图片也输入进去了进行分类这是很没必要的。而且窗口滑动的时候与上一次滑动的结果可能有重叠区域,这样就重复计算了,且滑动产生的区域很多计算量很大。

二、R-CNN

image.png

R-CNN算法的提出才是真正奠定了深度学习在目标检测领域的应用。R-CNN算法主要解决了滑窗算法的两个弊端:
1.随着窗口的滑动导致产生的数据量异常多,计算量非常大,R-CNN将滑窗截取图像块的方法替换成选择性搜索(Selective Search)生成建议区域(Region Proposal),选择性搜索通过图像的纹理和像素聚类来分割出图像可能存在物体的小区域,让后给这些小区域打上边框送入网络中进行分类和边框回归建议区域极大的降低了滑窗生成的数据量。

2.边框回归改进了用固定大小的窗口框出物体所在位置,使得目标定位更加准确

R-CNN算法流程

  1. 对输入图像进行选择性搜索生成不同大小的Region Proposal,将Region Proposal的区域Resize到固定尺寸
  2. 并进将某个分类网络迁移过来提取出建议区域的特征,并在现有数据集上进行微调。
  3. 用提取出的特征训练多个支持向量机,每一个都用来进行二分类
  4. 将每个提议区域连同其标注框一起进行边界框回归

R-CNN虽然对比滑窗法有了很大的改进但是依旧存在很大的问题:
1.R-CNN虽然减少了滑窗算法的计算量但是选择性搜索生成了数千个建议区域这意味着每张图片都要进行上千次前向传播,这个巨大的计算量令R-CNN依旧难以在实际应用中被广泛使用。
2.由于R-CNN建议区域的尺寸不一样而输入到全连接层的时候又要以固定的尺寸进行输入,这就意味着要将每一个建议区域都进行Resize操作使得图像在一定程度上发生了形变和扭曲,对分类任务很不利。
3.每个提议区域都要经过卷积层的特征提取过程,重复了卷积操作过程。
4.R-CNN在进行预测的时候边框仍旧不够准确。

三、Fast RCNN

image.png

Fast RCNN在R-CNN的基础上进行了改善,主要有以下几条:

1 . Fast RCNN共享卷积层也就是说不对每个提议区域分别进行卷积操作提取特征,而是直接将输入图片输入一个全卷积神经网络提取特征,减少了计算量。

  1. Fast RCNN引入了一个ROI(region of interest)池化层,这个池化层的作用简而言之就是将所有的提议区域池化成同样尺寸的张量。避免了R-CNN中通过resize操作造成的图片扭曲和失真。
  2. 不用分别对分类器和边框回归模型进行训练,两者能够同时进行。

Fast-RCNN算法大致步骤

1.对图片进行选择性搜索提取出建议区域
2.将图片输入共享全卷积神经网络进行特征抽取
3.将建议区域映射到全卷积神经网络的feature map上。
4.将feature map输入ROI池化层池化到固定尺寸输入全连接层根据边框回归还是分类器训练输出不同尺度的张量。

Fast RCNN虽然通过共享卷积层降低计算量、ROI池化层避免了Resize的负面影响。但是由于其预测框太少,召回率不高。

四、Faster-RCNN

Faster-RCNN

Faster-RCNN在Fast-RCNN上的改动主要是以下两点:

1.引入了anchor机制
2.用RPN网络代替选择性搜索

什么是anchor机制?


anchor机制图

anchor机制简要而言就是在原始图像ground truth box的中心位置标注几个不同长宽比例的bounding box就是anchors,之所以要引入anchors的目的其一是因为图中的物体大小不一形状各异,用一种类型的bounding box不能够很成功的给物体定位,当anchor数量很多密密麻麻布满整个图片的时候我们就有理由认为这些bounding box已经框住了物体。下满结合RPN网络的作用来介绍Faster-RCNN中使用anchor机制的作用

RPN网络

RPN网络的作用是代替选择性搜索来提取建议区域,先来看Faster RCNN的网络图,图中将输入图片通过一个全卷积神经网络输出之后的feature map然后将feature map通过一个3x3的卷积层生成表示anchor的张量,比如feature map的尺寸为40x40的feature map,这个feature map的每一个点都可以映射到输入图片的某个位置上,每一个点都可以看做是原图的某个领域特征抽取池化之后的像素,每个点都是某个区域的中心,那么通过卷积层输出一个40x40x(4*9)的张量,也就是说feature map中每个点对应到原图中的区域中心点处都有9个anchor,每个anchor都有4个参数(x_1,y_1,w_1,h_1)这四个参数代表了anchor的中心点以及box 的宽和高。然后要做的就是通过与ground truth的交并比来对anchor框柱的是背景还是物体进行分类并且对有物体的anchor进行与之前在输入图像中标注的anchor进行边框回归,之后在通过非极大值抑制对anchor概率小的anchor进行剔除。之后得到的(x_1,y_1,w_1,h_1)所有anchor的4个参数就是我们通过RPN得出来的建议区域。然后在将anchor的参数映射到feature map上输入ROI池化层将所有anchor区域池化成相同尺寸输入全连接层。之后的处理与Fast-RCNN是一样的,最后的边框回归是针对ground truth的而不是针对在原图像中标注的辅助anchor。这样我们的anchor就可以看做是一个先验信息,表示物体大致在什么方位,对最后的边框回归有辅助作用。而且当物体以不同的形状中心出现在相同的位置时能够更好的给物体定位。

Fast-RCNN由于引入了anchor机制增强了网络的定位能力。

尽管到Fast-RCNN two-stage的性能已经提升了不少但是由于模型训练困难,计算速度慢的弱点很多情况下还是不能使用,如何来提高计算速度嘞?这就要说到one-stage中经典的 YOLOV1-V3的算法了。且看下集YOLOV1

你可能感兴趣的:(R-CNN、Fast-RCNN、Faster-RCNN思想总结)