前言:faster-RCNN是区域卷积神经网络(RCNN系列)的第三篇文章,是为了解决select search方法找寻region proposal速度太慢的问题而提出来的,整个faster-RCNN的大致框架依然是沿袭了fast-RCNN的基本能结构,只不过在region proposal的产生上面应用了专门的技术手段——区域推荐网络(region proposal network,即RPN),这是整个faster最难以理解的地方,本文也将以他为重点进行说明。鉴于篇幅较长,本次系列文章将分为3篇来说明:
第一篇:faster-RCNN的背景、结构以及大致实现架构
第二篇:faster-RCNN的核心构件——RPN区域推荐网络
第三篇:faster-RCNN的训练以及补充
本次为系列文章第一篇。
目录
一、faster-RCNN的背景
二、faster-RCNN的网络结构
2.1 faster-RCNN的基本结构
2.2 faster-RCNN的大致实现过程
2.3 faster-RCNN的基本组成
2.3.1 faster-RCNN 的四大部分
2.3.2 faster-RCNN 的三步走流程
一、 faster-RCNN的背景
Faster R-CNN 发表于 NIPS 2015,其后出现了很多改进版本,后面会进行介绍.
R-CNN - Rich feature hierarchies for accurate object detection and semantic segmentation 是 Faster R-CNN 的启发版本. R-CNN 是采用 Selective Search 算法来提取(propose)可能的 RoIs(regions of interest) 区域,然后对每个提取区域采用标准 CNN 进行分类.
出现于 2015 年早期的 Fast R-CNN 是 R-CNN 的改进,其采用兴趣区域池化(Region of Interest Pooling,RoI Pooling) 来共享计算量较大的部分,提高模型的效率.
Faster R-CNN 随后被提出,其是第一个完全可微分的模型. Faster R-CNN 是 R-CNN 论文的第三个版本.R-CNN、Fast R-CNN 和 Faster R-CNN 作者都有 Ross Girshick.
二、faster-RCNN的网络结构
Faster R-CNN 的结构是复杂的,因为其有几个移动部件. 这里先对整体框架宏观介绍,然后再对每个部分的细节分析.
问题描述:
针对一张图片,需要获得的输出有:
- 边界框(bounding boxes) 列表,即一幅图像有多少个候选框(region proposal),比如有2000个;
- 每个边界框的类别标签,比如候选框里面是猫?狗?等等;
- 每个边界框和类别标签的概率。
2.1 faster-RCNN的基本结构
除此之外,下面的几幅图也能够较好的描述发图尔-RCNN的一般结构:
2.2 faster-RCNN的大致实现过程
整个网络的大致过程如下:
(1)首先,输入图片表示为 Height × Width × Depth 的张量(多维数组)形式,经过预训练 CNN 模型的处理,得到卷积特征图(conv feature map)。即将 CNN 作为特征提取器,送入下一个部分。这种技术在迁移学习(Transfer Learning)中比较普遍,尤其是,采用在大规模数据集训练的网络权重,来对小规模数据集训练分类器. 后面会详细介绍.
(2)然后,RPN(Region Propose Network) 对提取的卷积特征图进行处理. RPN 用于寻找可能包含 objects 的预定义数量的区域(regions,边界框)。这是整个文章最核心的改进,也是本文会着重介绍的点。
基于深度学习的目标检测中,可能最难的问题就是生成长度不定(variable-length)的边界框列表. 在构建深度神经网络时,最后的网络输出一般是固定尺寸的张量输出(采用RNN的除外). 例如,在图片分类中,网络输出是 (N, ) 的张量,N 是类别标签数,张量的每个位置的标量值表示图片是类别 labeli{ label_i }labeli 的概率值.
在 RPN 中,通过采用 anchors 来解决边界框列表长度不定的问题,即,在原始图像中统一放置固定大小的参考边界框. 不同于直接检测 objects 的位置,这里将问题转化为两部分:
对每一个 anchor 而言,
- anchor 是否包含相关的 object?
- 如何调整 anchor 以更好的拟合相关的 object?
这里可能不容易理解,后面会深入介绍anchor以及RPN相关的实现原理。
(3)当获得了可能的相关objects 和其在原始图像中的对应位置之后,问题就更加直接了. 采用 CNN 提取的特征和包含相关 objects 的边界框,采用 RoI Pooling 处理,并提取相关 object 的特征,得到一个新的向量.
最后,基于 R-CNN 模块,得到:
- 对边界框内的内容进行分类,(或丢弃边界框,采用 background 作为一个 label.)
- 调整边界框坐标,以更好的使用 object.
上面的过程没有涉及到一些重要的细节信息. 但包括了 Faster R-CNN 的大致实现过程。
2.3 faster-RCNN的基本组成
faster-RCNN其实就是由几个基本的网络架构组成的。
Faster R-CNN的整体流程如下图所示。
从上面的图形中可以看出,Faster R-CNN主要分为四部分(图中四个绿色框)
(1)Dataset数据。提供符合要求的数据格式(目前常用数据集是VOC和COCO);
(2)Extractor卷积神经网络。 利用CNN提取图片特征features(原始论文用的是ZF和VGG16,后来人们又用ResNet101);
(3)RPN(Region Proposal Network)。 负责提供候选区域rois(每张图给出大概2000个候选框);
(4)RoIHead。 负责对由RPN产生的ROI进行分类和微调。对RPN找出的ROI,判断它是否包含目标,并修正框的位置和座标。
Faster R-CNN整体的流程可以分为三步:
(1)提特征。 图片(img)经过预训练的网络(Extractor),提取到了图片的特征(feature)
(2)Region Proposal。 利用提取的特征(feature),经过RPN网络,找出一定数量的rois(region of interests)
(3)分类与回归。将rois和图像特征features,输入到RoIHead,对这些rois进行分类,判断都属于什么类别,同时对这些rois的位置进行微调。
就是第二步是关键所在,第一步和第三部同fast-RCNN一样。