faster RCNN[2015 Ren]
回顾
R-CNN ==> 1image/mni
Fast R-CNN ==> 1~2 fps
1. faster RCNN
- Backbone(神经网络模型)
- pre-train(预训练)
- fine-tuning(微调)
- re-train
- RPN:Region Proposal Net(区域生成网络 )
- 代替selective searchs生成区域建议
- 输入feature map(特征图),输出一系列ROI(感兴趣区域)
- Fast RCNN:ROI + {Classification; Regression}
- 可近似的Faster RCNN = RPN + Fast R-CNN
2. Backbone
-
作用:提取特征(一次)
- 不用给每个ROI都提取特征
- 通过RPN将提取的特征来生成区域建议
-
结构:ZF / Resnet / VGG16(13 conv + 13 Relu + 4 Pooling)
- 把网络结构当积木来用的思维
- 比如想要算快一些,网络换成mobile net, shuffle net都是可以的
-
输出 Batchsize x Channel x H/16 x W / 16 (VGG16举例)
- faster rcnn将尺寸为1000 x 800大小的feature map归一化到600 x 800的尺寸,则其输出的特征图大小为
1 x 256 x 38 x 50
- faster rcnn将尺寸为1000 x 800大小的feature map归一化到600 x 800的尺寸,则其输出的特征图大小为
-
backbone获取特征图信息,然后用RPN网络筛选候选框和ROIPooling输出相同尺寸的特征图,整个faster rcnn如下图
3. RPN
Test 网络结构
- 3x3卷积主要作用是语义转化,可以增加网络复杂程度,增加RPN的拟合能力
- 1x1卷积用于通道转换,原则上可以转换成任意通道的特征图
- 例如经过上面支线的1x1卷积后的尺寸为38x50x18,经过第一个reshape将尺寸变为(2, 38x50x9)其中2表示用于二分类判断是否是ROI;判断完后再reshape回38x50x18
- 经过下面支线的1x1卷积后的尺寸为38x50x36,36等于4x9,其中4表示坐标信息,用于左边回归预测
- 3和4中的9指的是9个anchor
- 3x3卷积后两条支线合并,输出区域建议(坐标)信息
RPN目标
- 生成region proposal区域建议
- 因为流程为先RPN找出区域建议的物体,然后在做更加精细的类别划分和Bbox回归,这种方式被称为Two-Stage
- 因此有人认为两阶段检测比一阶段检测更准
Anchor
- 代表在原图中的区域(目标在的地方)
- 有不同的大小和比例anchor去覆盖所有种类的对象
- 3种大小(8,16,32),3种比例(1:1,1:2,2:1),共9个框
- 以特征图w=50,,h=38为例,特征图中每个特征点对于原图中9个框(anchor)
- 对应生成 anchor = 1 x 9 x 38 x 50 = 17100个框
- 边缘筛除去除一些出了边界的anchor,及其去除一些比较小的anchor,得到12k左右anchor,再用IOU计算和NMS算法筛选,最后剩余2k左右anchor
Train 网络结构
Train网络结构中RPN的Test两条支线如下
faster RCNN 网络结构手绘制版
- gt为图片中真实标记的框,与init anchor(anchor create)生成的anchor做iou计算和NMS算法筛选,得到分类和回归的正负样本(2k个左右anchor box),是监督网络学习的监督信息
- 通过***gt生成anchor的过程***(对应手绘制RPN网络结构中左边的rpn-data)如下,每个anchor都有分类信息(2个)、和gt对应的偏移量(4个, △x,△y,△w,△h)
共6个值,9个anchor共54个值
- 将正负样本分别和分类回归的预测做loss计算,一个为分类loss,一个为回归loss,两个loss加一起就可以训练RPN网络
- 手绘制RPN网络结构蓝色部分为测试,红色部分为训练
- 蓝色(20+1) x 4 中20为类别
- RPN在做回归时,上图Train网络结构中绿线框选的部分,需要先做掩膜版(Mask)
- Smooth L1 Loss公式
- Smooth L1 loss作用
- 预测偏移量
- 对大小物体一视同仁,做归一化
- 偏移量回归
we hope a -> t,
but actually a generate p.
So as long as p -> t,
we get a good result.
So as long as the offset of
p-a -> t-a
We get a good result
So here we hope t. -> t.*
RPN训练细节
- 取IOU > 0.7 的anchor作为前景FG
- 取IOU < 0.3 的anchor作为背景BG
- IOU在0.3和0.7的anchor去除
- batchsize为128,fg和bg的比例为1:3
4. 训练
Faster RCNN = RPN + Fast R-CNN
问题
rpn需要训练,fast rcnn也需要训练;共用的话,训练rpn时backbone变了,用rpn的数据训练fast rcnn时,backbone又变了,会导致rpn不准确
weight share(权重共享) RPN包含backbone,Fast rcnn也包含backbone,Fast rcnn需要用到RPN的输出
训练四阶段
分布联合训练
- 仅训练rpn,backbone更新,rpn-unique(专有部分网络)也更新
- 把1中rpn的结果用于fast rcnn训练,backbone共享,backbone更新,fast rcnn(专有部分网络)也更新
- 使用2中更新过的backbone重新训练rpn,固定rpn,更新rpn unique
- 使用3中的rpn训练fast rcnn,backbone固定,更新fast rcnn unique
rpn的region proposal区域建议用于fast rcnn训练,backbone更新,fast rcnn的专有网络也更新
附: