深度学习·神经网络·计算机视觉机器学习程序员

R-CNN系列其三-Fast_R-CNN

2018-06-10  本文已影响19人  manofmountain

介绍

R-CNN的创始人Girshick(同样来自微软)对R-CNN与SPP-Net有了更多思考后,对这种需要多阶段进行训练的目标检测框架做了重大更新。使得整体的目标检测这一部分不再由多阶段来完成,而是统一使用一个CNN网络来完成特征提取,区域提案分类及后期对检测框的微调等三样工作。这个创新算是不小,相对于之间流程的复杂,简单后了的模型不只实现了训练与推理速度的提升,同时也带来了目标检测精度的增加。大牛水平就是高啊!往往能够通过将模型简单化来使得问题得到更好的解决。高山仰止!

R-CNN目标检测框架的缺点

SPP-Net应用在目标检测框架上的缺点

Fast_R-CNN带来的改进

Fast_R-CNN网络结构

下图所示为Fast_R-CNN的基本网络结构,同过跟上篇的SPP-Net的网络结构对比,我们能够发现它结构最本质的创新即在于直接将最后FC层后得到的特征向量分别使用Softmax层与Regressor层来直接对区域方案的类别与位置进行预测与调整,这一网络结构改进后来也为其它的模型像Yolo系列与SSD所采用。

Fast_R-CNN网络结构

Fast_R-CNN检测模型部署

一旦我们训练出了正确的Fast_R-CNN模型,那么可按以下步骤来进行模型部署。

实验得到的发现

Fast_R-CNN Caffe代码

本质上它相对于SPP-Net的主要改进在于将原来R-CNN框架下分为三个阶段去做的事情整合为一个阶段,反映在caffe model 上面即是最终的loss层实现了多目标损失函数学习。另外因为ROI层也是SPP层的一个特例,因此我们也放在这里。

---------------ROI层-----------------------

layer {
name: "roi_pool5"
type: "ROIPooling"
bottom: "conv5"
bottom: "rois"
top: "pool5"
roi_pooling_param {
pooled_w: 6
pooled_h: 6
spatial_scale: 0.0625 # 1/16
}
}

---------------最后几层的损失函数层----------------------

layer {
name: "cls_score"
type: "InnerProduct"
bottom: "fc7"
top: "cls_score"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
inner_product_param {
num_output: 21
weight_filler {
type: "gaussian"
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
name: "bbox_pred"
type: "InnerProduct"
bottom: "fc7"
top: "bbox_pred"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}
inner_product_param {
num_output: 84
weight_filler {
type: "gaussian"
std: 0.001
}
bias_filler {
type: "constant"
value: 0
}
}
}

layer {
name: "loss_cls"
type: "SoftmaxWithLoss"
bottom: "cls_score"
bottom: "labels"
top: "loss_cls"
loss_weight: 1
}

layer {
name: "loss_bbox"
type: "SmoothL1Loss"
bottom: "bbox_pred"
bottom: "bbox_targets"
bottom: "bbox_loss_weights"
top: "loss_bbox"
loss_weight: 1
}

参考文献

上一篇下一篇

猜你喜欢

热点阅读