RCNN
标题:Rich feature hierarchies for accurate object detection and semantic segmentation
作者:Ross Girshick 作者主页
来源:arXiv:1311.2524
代码:MATLAB/Caffe
要解决的问题
- 利用深度网络对目标进行定位
- 利用少量带注释的检测数据训练大容量模型。
RCNN算法分为4个步骤:
1、 候选区域生成: 采用Selective Search 方法生成1K~2K个候选区域
2、 特征提取: 对每个候选区域,使用CNN提取特征
输入:227*227(候选区域采用采用各向异性缩放、padding=16处理后的精度最高——下图中D列的第二行)
采用AlexNet,在ImageNet数据集上先进行预训练,然后用得到的参数作为初始化值,在PASCAL VOC数据集上再一次训练,进行fine-tuning(迁移学习)
输出:4096维的特征向量
3、 类别判断: 特征送入每一类的SVM分类器,判别是否属于该类
CNN在训练的时候,对训练数据做了比较宽松的标注,比如一个bounding box可能只包含物体的一部分,那也把它标注为正样本,用于训练;采用这个方法的主要原因在于因为CNN容易过拟合,所以需要大量的训练数据,所以在CNN训练阶段我们是对Bounding box的位置限制条件限制的比较松(IoU只要大于0.5都被标注为正样本了);然而svm训练的时候,因为SVM适用于少样本训练,所以对于训练样本数据的IoU要求比较严格,我们只有当bounding box把整个物体都包含进去了,我们才把它标注为物体类别,然后训练SVM。
4、位置精修: 使用回归器精细修正候选框位置
Fast RCNN
标题:Fast R-CNN
作者:Ross Girshick 作者主页
来源:arXiv:1504.08083
代码:作者——Python and C++ (using Caffe) // tensorflow
RCNN存在的问题
- 训练分多步骤
- 时间和空间开销大(RCNN一张图像内候选框之间大量重叠,提取特征操作冗余;在训练SVM和回归的时候需要用网络训练的特征作为输入,特征保存在磁盘上再读入的时间开销较大)
- 测试比较慢(每张图片的每个region proposal都要做卷积,重复操作太多)
在Fast RCNN之前提出过SPPnet来解决R-CNN中重复卷积问题,但SPPnet仍然存在与R-CNN类似的缺陷:
- 训练分多步骤
- 空间开销大
主要贡献
- 训练是端到端的,使用多任务损失函数(同时进行多类检测的可能性)
- mAP高于R-CNN、SPPnet
- 训练时可以更新所有网络层
- 特性缓存都暂存在显存中,不需要磁盘存储
框架
- 输入:224 x 224的归一化图像+RoIs
- 输出
分类:K+1类
bounding box偏移: t k = ( t x k , t y k , t w k , t h k , ) t^{k}=(t_x^{k},t_y^{k},t_w^{k},t_h^{k},) tk=(txk,tyk,twk,thk,)
- RoI pooling layer
- 前向传播:
使用max pooling将大小不一的region proposals转化为固定大小的H x W(本文:7 x 7) - 反向传播
x i x_i xi为输入层的节点, y r j y_rj yrj为第r个候选区域的第j个输出节点:
其中判决函数 δ ( i , j ) δ(i,j) δ(i,j)表示 i 节点是否被 j 节点选为最大值输出。不被选中有两种可能: x i x_i xi不在 y j y_j yj范围内,或者 x i x_i xi不是最大值。
判决函数 δ ( i , r , j ) δ(i,r,j) δ(i,r,j)表示 i i i节点是否被候选区域 r r r的第 j j j个节点选为最大值输出。代价对于 x i x_i xi的梯度等于所有相关的后一层梯度之和。
- 前向传播:
- 分层数据
在调优训练时,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。
本文:N=2, R=128。 - 训练数据构成
N张完整图片以50%概率水平翻转。
R个候选框的构成方式如下: - 损失函数
注:[smoothL1] 中的x即为[公式] 即对应坐标的差距。该函数在 (−1,1) 之间为二次函数,而其他区域为线性函数,作者表示这种形式可以增强模型对异常数据的鲁棒性。
结果
基于VGG16的Fast RCNN模型在训练速度上比R-CNN快大约9倍,比SPPnet快大约3倍;测试速度比R-CNN快大约213倍,比SPPnet快大约10倍,在运行时,检测网络对图像的处理时间为0.3秒(不包含候选区域提取);在PASCAL VOC2012数据集上的mAP大约为66%。
Faster RCNN
标题:Faster R-CNN
作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun
来源:arXiv:1506.01497
代码:https://github.com/ShaoqingRen/faster_rcnn
之前存在的问题
regional proposal需要单独计算
主要贡献
- 提出RPN,可以同时预测bound box和objectness score
- 提出了anchor box,可以用多种宽高比和尺度来预测proposal
- 几乎是cost-free的,因为RPN和提取特征的CNN网络共享参数
- 可以使得整个目标检测的网络进行端对端的训练
框架
- Shared Conv Layers:使用13个卷积和4个pooling层来提取图片的feature map,这部分是Fast R-CNN模块和Region Proposal Network模块共享的。
- Region Proposal Network:用神经网络取代传统的方法来产生region proposal。
- RoI pooling:根据region proposal和feature map来提取每个region对应的feature,这和Fast R-CNN中的 RoI Pooling Layer相同。
- Classification and Regression:和Fast R-CNN类似,这部分主要完成两个工作:
(1)经过FC layer + softmax进行分类,主要是对object proposal进行分类的,一共包括(K+1)类,即K类物体加上1个背景类。
(2)经过FC layer + bbox regressor输出的,为K个类各输出4个值(K*4),而这4个值代表着精修的bounding box position。
各层更具体的分析可看:https://zhuanlan.zhihu.com/p/61202658
数据集
- PASCAL VOC
- ILSVRC
- MS COCO
训练过程
和之前的目标检测网络训练类似,都是在一个预训练网络的基础上进行训练的。在本文中主要使用4-step交替训练法来训练Faster R-CNN,主要步骤如下:
- 首先使用在ImageNet预训练的网络来训练RPN网络。
- 同样使用ImageNet预训练的网络来训练一个单独Fast
R-CNN检测网络,网络中的proposal是第一步训练RPN网络中得到的porposal。 - 使用上一步训练的detection网络的参数来初始化练RPN网络,并且在训练过程中固定shared conv layers这部分,只更新RPN网络专有的那些层。
- 接着固定shared conv layers这部分,只更新Fast R-CNN专有的那些层,其中proposal也是上一步训练RPN网络中得到的proposal。
Mask RCNN
参考文档
[1] RCNN- 将CNN引入目标检测的开山之作
[2] Fast R-CNN
[3] Selective Search for Object Detection
[4] 作者在ICCV15上的讲座 Training R-CNNs of various velocities
[5] shenxiaolu1984:【目标检测】Fast RCNN算法详解