参考:https://blog.csdn.net/WoPawn/article/details/52463853
1 R-CNN的主要问题
- 1.CNN对selective search推荐的每一个区域进行一次特征提取,需要对一张图片进行1k-2k的特征提取,非常耗时。
- 2.目标分类需要根据一个单独训练的SVM,耗时。
- 3.需要对proposa直接进行resize提取特征,会造成拉伸变形。
image.png
2 Fast R-CNN过程
Fast R-CNN依然使用selective search生成推荐框,但只对原始图像提取一次特征,将推荐框的坐标映射到特征图上,根据ROI Pooling将ROI转换成相同的尺寸(7*7)后接全连接层,再接两个全连接层,分别进行分类与回归。
具体过程如下:
1.任意size图片输入CNN网络,经过若干卷积层与池化层,得到特征图;
2.在任意size图片上采用selective search算法提取约2k个建议框;
3.根据原图中建议框到特征图映射关系,在特征图中找到每个建议框对应的特征框,并在RoI池化层中将每个特征框池化到H×W【VGG-16网络是7×7】的size;
4.固定H×W【VGG-16网络是7×7】大小的特征框经过全连接层得到固定大小的特征向量;
5.第4步所得特征向量经由各自的全连接层【由SVD分解实现】,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归;
6.利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口。
3.细节
3.1 ROI Pooling实现
首先假设建议框对应特征图中的特征框大小为h×w,将其划分H×W个子窗口,每个子窗口大小为h/H×w/W,然后对每个子窗口采用max pooling下采样操作,每个子窗口只取一个最大值,则特征框最终池化为H×W的size。
例如推荐框在feature map上的尺寸为1414,将其划分为77个子窗口,每个窗口使用maxpooling,变为一个数字,最终变为7*7个feature.
3.2 尺度处理
文中提及两种方式处理:brute-force(单一尺度)和image pyramids(多尺度)。单一尺度直接在训练和测试阶段将image定死为某种scale,直接输入网络训练就好,然后期望网络自己能够学习到scale-invariance的表达;多尺度在训练阶段随机从图像金字塔【缩放图片的scale得到,相当于扩充数据集】中采样训练,测试阶段将图像缩放为金字塔中最为相似的尺寸进行测试。多尺度性能更佳,但单尺度在保证测试时间的前提下,精度下降不多。
3.3 多任务训练
R-CNN中是单独训练的。Fast R-CNN将分类与回归在一个损失函数进行训练,后续的Faster R-CNN也沿用了。
image.png










网友评论