一 RCNN
1 流程
(1)对一张图片生成1k~2k个候选区域
(2)对每一个候选区域,用深度网络提取特征
(3)将特征送入每一类的SVM分类器,判断是否属于该类
(4)使用回归器精细修正候选框位置
2 select search提取候选区域
没什么讲的,这不是重点
3特征提取
(1)候选区域归一化成同一尺寸227×227。
(2)训练一个基础特征提取网络
使用Hinton 2012年在Image Net上的分类网络,利用ILSVRC2012,输入图片,输出1000维的类别标号。
(3)将第二步得到的网络加一个1000~21的全连接层,代表二十类和背景,然后用PASCAL VOC 2007数据集进行训练。训练的数据:重叠区域大于0.5的为对应的类别样本,小于0.5为背景。
步骤3的网络pool5层提取的4096维特征就是特征提取的结果。至此,特征提取阶段结束。
4 类别判断
对每一类目标,使用一个线性SVM二类分类器进行判别。输入为深度网络输出的4096维特征,输出是否属于此类。
由于负样本很多,使用hard negative mining方法。
正样本:本类的真值标定框,就是由本类的真实位置所提取的特征向量。
负样本:重叠区小于0.3的区域的特征向量。
5 位置精修
模型:线性回归模型,输入为4.96维特征向量,输出为xy方向的缩放和平移(4维向量)。
数据:重叠区域大于0.6的区域的特征向量。
二 fast RCNN
1 改进
相比之前的RCNN:在保证准确率的前提下,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。
改进:
- 先对整幅图像提取特征,再加入候选框信息。
- 将特征提取之后的分类和回归合并到一个网络中。
2 特征提取
将图像归一化为224×224的图像输入到特征提取网路中,在特征提取最后一层roi_pool5中加入roi信息(一个图像序号和四个位置信息)。roi_pool5利用max_pooling将特征图统一为6*6*256*p的格式,其中p为roi个数。
要点:
(1)roi_pool5的工作原理。将roi分为n*m分(本例中为6*6),在每一份里用maxpool。
roi_pool5层反向传播:由于特征图上一个x可能对应多个roi特征图,在反向传播过程中需要相加。这里有个知识点是maxpooling是如何反向传播的。
(2)参数初始化
用如下网络在image Net上进行训练,训练结束后对相应的层进行参数初始化,其余随机初始化。
(3)训练数据
每一个mini_batch首先选择n张图片,然后在n张图片选择p个roi。n张图片以50%的概率水平随机翻转,p个roi中:
3 分类回归
将特征提取中全连接层得到的4096维向量输入到两个并行的全连接中(称为multi_task):
cls_score输出k+1维的向量。
bbox_pred输出4k维的向量。
损失函数:
三 faster RCNN
1 特征提取
原始特征提取(上图灰色方框)包含若干层conv+relu,直接套用ImageNet上常见的分类网络即可。本文试验了两种网络:5层的ZF,16层的VGG-16,具体结构不再赘述。
额外添加一个conv+relu层,输出51*39*256维特征(feature)。
得到的51*39*256维特征应该这样看:51×39对应原图的大小,51×39的每个位置都对应一个256维的向量。后续对每个位置上的分类和回归都是利用相应位置的256维向量来计算的
2 候选区域(anchor)
(1)anchor的提取
特征可以看做一个尺度51*39的256通道图像,对于该图像的每一个位置,考虑9个可能的候选窗口:三种面积{128,256,512}×三种比例{1:1,1:2,2:1}。这些候选窗口称为anchors。共51×39×9个anchor。
(2)训练样本
考察训练集中的每幅图像:
- 对每个标定的真值候选区域,与其重叠区域最大的anchor计为正样本。
- 除去第一步anchor外,iou大于0.7标记正样本,小于0.3标记负样本,其余舍弃。
- 跨越图像边界的anchor舍弃。
(3)同时最小化分类误差和回归误差
(4)原始特征提取网络使用ImageNet的分类样本初始化,其余新增层随机初始化。
每个mini-batch包含从一张图像中提取的256个anchor,前景背景样本1:1.
前60K迭代,学习率0.001,后20K迭代,学习率0.0001。
momentum设置为0.9,weight decay设置为0.0005。
3 分类回归
cls_score输出为51×39×(9×2),51×39为特征图像的大小,9个anchor,2代表前景和背景的得分。
bbox_pred输出为51×39×(9×4),4代表xy轴的缩放和平移。
4 RPN和特征提取共享模型
文章提出了三种方法:
注意轮流训练的过程
以下未完成———————————————————————————————————————————————–
方法轮流训练中训练RPN和训练faster rcnn的详细过程(自己脑补):
训练RPN:RPN训练的目标是训练一个网络输入图像,输出roi,第二步中的训练样本可以用来训练RPN网络
训练faster rcnn: