摘要: 2015年提出的Faster R-CNN架构在基于机器视觉的物体识别领域占据重要的地位,从R-CNN到fast R-CNN再到faster R-CNN,乃至后续的Mask-R-CNN形成了一条完整的两步识别的物体识别技术生态。
概述
物体识别技术一直是机器视觉中业务场景最丰富,关注度最高的一个类别。将花几期来分别对主流的物体识别技术如Faster RCNN,SSD,YOLO,Mask-RCNN进行整理和分析,并利用实践的方式进行强化。
在R-CNN,Fast R-CNN,Faster R-CNN中,物体识别被分为两个步骤实现(与SSD、YOLO的主要差异):候选区域选择和基于深度网络的物体识别。
传统的物体识别算法
传统的物体识别技术采用的滑动窗口+图像金字塔+分类器的算法,可以参见前述博文在基于机器视觉技术的品牌LOGO检测中做的实际测试,原理易于理解,但效率较低,很难达到实时处理的需求:
- 速度慢,效率低:需要利用滑动窗口遍历图像的不同位置;
- 受图像畸变影响严重:由于CNN的输入必须是固定大小的图像,所以限制了检测目标的长宽比例,比如这种方法不能同时检测矮胖对象和长瘦对象;
- 错误率高,没法识别图像的全局特征,每个窗口只能看到局部特征,所以检测精度也受到了比较大的影响。
物体识别精度的衡量指标
参考论文
- R-CNN: Rich feature hierarchies for accurate object detection and semantic segmentation
- Faster R-CNN
R-CNN
论文: Rich feature hierarchies for accurate object detection and semantic segmentation,2013,Girshick
问题:解决目标检测网络
R-CNN的实现包括如下图所示的4个主要步骤:
- 接受输入图像;
- 利用Selective Search算法从图像中抽取大约2000个候选区域;
- 对每个候选区域利用预训练的CNN进行特征抽取(迁移学习);
- 对每个特征抽取区域利用线性SVM进行分类

论文的主要贡献:
- 使用Selective Search替代了特征金字塔和滑动窗口实现的兴趣区域选择,提升了效率;
- 利用预训练的神经网络进行特征提取替代了手工特征如HOG的特征提取方法,正是由于CNN学习的特征具备的鲁棒性大大提供了系统的泛化性能
仍然存在的问题:
- 识别慢,效率低;
- 不是一个端到端的解决方案
Selective Search算法
论文:Selective Search for Object Recognition,2012,J.R.R.Uijings
之前很多算法都是基于蛮力搜索(Exhaustive Search),对整张图片进行扫描,或者是采用动态窗口的方法,这种方法耗时严重,操作麻烦。J.R.R提出的选择性搜索的方法,在识别前期在整张图片中生成1~3K个proposal的方法,再对每个proposal进行处理。
Selective Search [4], one of the most popular methods, greedily merges superpixels based on engineered low-level features.
缺点:效率低,计算量大,使用1个CPU处理一张图片,需要2s1
Fast R-CNN
问题提出:解决端到端训练的问题,提出了Region of Interest(ROI)Pooling
跟R-CNN中使用深度CNN的方式不同,Fast R-CNN中首先将CNN应用到整个图像中进行特征提取,利用一个固定窗口在抽取特征上滑动,分别进行分类预测和回归预测。Fast R-CNN的主要处理流程包括:
- 输入图像和标定的识别框信息;
- 利用深度卷积神经网络抽取图像特征;
- 利用ROI pooling获取ROI特征向量;
- 利用两个全联通层进行分类和回归预测

端到端的训练过程源于提出了多任务损失函数,将分类问题和回归问题整合在一起,打通了梯度的更新路径,下图描述了Fast R-CNN的训练和测试过程:

缺点:仍然没有摆脱Selective Search算法在推理阶段进行候选区域生成。
Faster R-CNN
论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, 2015, Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun
实现:Github上作者提供的Python实现
商业实现:Pinterests2
问题提出:在基于候选区域选择的CNN(region-based CNN)物体识别网络中,候选区域选择的效率成为了整个系统的瓶颈;Faster R-CNN中提出了Region Proposal Netwrok与物体识别网络共享网络参数(替代了Fast R-CNN中的Selective Search算法),降低了候选区域选择的时间代价。
- 基础网络(Base Network):特征抽取(迁移学习),抽取的特征将同时应用于RPN和RoIP阶段
- RPN:候选区域选择(利用了网络的Attention机制),用于发掘图像中潜在的可能存在物体的区域
- RoIP:兴趣区域特征提取
- R-CNN:分类预测和候选框回归

使用一块GPU,性能大概在7-10 FPS
基础网络
基础网络的主要作用是利用迁移学习完成原始图像的特征抽取,在论文中使用了 在ImageNet预训练的ZF 或 VGG来完成这一任务。当然根据物体识别任务的不同应用场景可以在模型精度和推理时间上进行折中选择 MobileNet, ResNet-152, DenseNet。
文献中,Faster R-CNN的基础网络在使用VGG作为特征提取网络时,使用conv5/conv5_1
层的输出特征;
目前ResNet在很多情况下已经替代了VGG16作为特征提取网络;
为了保证网络是全卷积神经网络架构,需要把全连接层剔除,保证可以输入任意维度的输入图像

Anchor Box
替代传统算法的特征金字塔或filter金字塔
一张图像中被识别目标形状大小各异,这也是在原始算法中加入特征金子塔来对原始图像进行多个维度特征变换的原因。
Anchor Box也是为了解决上述问题,我们可以不改变图像的形状,通过改变预测每个区域物体的“窗口”来框出不同大小的物体。首先在原始图像中均匀的选取一些Anchor Box中心点,然后在每个中心点上预制多个Anchor Box。

在Faster R-CNN是使用3个不同形状(1:1, 1:2,2:1)和3个不同大小(128x128,256x256,512x512,按照原图尺寸生成)进行组合共计3x3=9种不同的Anchor box。
使用VGG16做特征提取的情况下,一张输入图片总共可以刻画为512个窗口区域,生成512x(4+2)x9个输出参数。

由于直接预测bouding box难以实现,作者将问题转变为预测预测值与真实值之间的偏移,将问题转变为四个偏移值的预测问题。
Region Proposal Network(RPN)
RPN的主要目的是对每个区域是否可能有物体进行打分,基于打分值决定是否进行下一步的分类任务。在基础网络抽取的特征图上使用一个3x3的滑动窗口(512个卷积核),每个滑动窗口的中心点位置为上述Achor Box的中心点区域,在每个滑动窗口区域,将得到两个1x1卷积网络输出,分别为2k的前景/背景预测(该区域是否存在可被预测物体,分类问题)以及4k的位置信息预测(回归问题),四个值分别是
k是Anchor Box的数目
我们将从候选区域中选择打分较高的前N个进行下一轮分析,如果物体打分足够高,下一步将进行非极大抑制和区域选择,如果打分值很低将抛弃这些区域

目标和损失函数
The RPN does two different type of predictions: the binary classification and the bounding box regression adjustment.
For training, we take all the anchors and put them into two different categories. Those that overlap a ground-truth object with an Intersection over Union (IoU) bigger than 0.5 are considered “foreground” and those that don’t overlap any ground truth object or have less than 0.1 IoU with ground-truth objects are considered “background”.
其中分类的损失函数为:
$p_i$为第$i$个参考框是物体的预测概率值,$p_i^*$为实际值,如果anchor是物体的话该值为1,否则为0。
回归损失函数为:
其中R为smooth L1平滑方程:
$t_i$与 $ t_i^ $ 分别对应四个偏差值。$ t_i $ 是预测框与anchor之间的偏差,$ t_i^ $ 是ground truth与anchor之间的偏差
参数选择
参数选择与其说是一个技术活倒不如认为是一个经验活,是通过大量实践验证出来的最佳实践,所以有必要分析整理每篇文章对参数选择和优化的技巧。
- 非极大抑制的IoU阈值一般使用0.6;
- 论文中关于候选区域选择了N=2000,但一般而言比这个小的数目也能取得不错的效果,比如50,100 …
Region of Interest(ROI)Pooling
ROI阶段的主要作用为使用矩阵操作(Array Slicing)从特征图中捕获N个兴趣区域,并降采样到7x7xD的尺寸,服务于接下来的全联同网络。

Region-based CNN
使用两个不同的全联通网络(Fully-Connected Network,FC):
- A fully-connected layer with N+1units where N is the total number of classes and that extra one is for the background class.
- A fully-connected layer with 4N units. We want to have a regression prediction, thus we need $\Delta{center{x}}$, $\Delta{center{y}}$, $\Delta{width}$, $\Delta{height}$ for each of the N possible classes.

在这个步骤中同样由两个损失函数构成:Categorical cross-entropy分类损失和Smooth L1回归损失
网络训练
- 实验表明:联合训练(使用weighted sum)优于单独训练两个网络;
- 将每个阶段的4个损失函数(其中RPN阶段2个,R-CNN阶段2个)组合在一起,并赋不同的权重,分类损失需要获得比回归损失更多的权重;
- 使用L2正则损失
- 是否单独训练基础网络取悦于目标与预训练网络的差异,这个跟迁移学习类似;
- 使用带动量的随机梯度下降(SGD with momentum),其中
monmentum=0.9
,初始学习率lr=0.001
, 50k步之后,lr调整为0.0001
实践时间
数据集:LISA交通标志数据库
- 下载地址:http://cvrr.ucsd.edu/LISA/lisa-traffic-sign-dataset.html
- 47 US sign types
- 7855 annotations on 6610 frames.
- Sign sizes from 6x6 to 167x168 pixels.
- Images obtained from different cameras. Image sizes vary from 640x480 to 1024x522 pixels.
- Some images in color and some in grayscale.
- Full version of the dataset includes videos for all annotated signs.
- Each sign is annotated with sign type, position, size, occluded (yes/no), on side road (yes/no).
- All annotations are save in plain text .csv-files.
- ~7.7GB大小
参考
1. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks, 2015, Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun ↩
2. D. Kislyuk, Y. Liu, D. Liu, E. Tzeng, and Y. Jing, “Human curation and convnets: Powering item-to-item recommendations on pinterest,” arXiv:1511.04003, 2015. ↩
3. Faster R-CNN: Down the rabbit hole of modern object detection ↩