Fast R-CNN总结

程序

创新点

多任务损失:在单个训练过程中引入multi-task loss,简化学习的同时,提高检测精度,通过multi-task loss,在分类候选区域的同时,refine目标框的空间位置;
参数更新:所有层参数均可在训练中更新,SPPNet共享卷积层特征的情况下,阻止了误差反向传播通过网络,限制了检测精度的提升;
存储问题:无需在磁盘中存储特征;

R-CNN缺点

  1. multi-stage pipeline:卷积层调优->线性SVM调优->bounding box回归
  2. 训练占用太多空间和时间:
    空间:需要将抽取的特征保存到disk,用来训练SVM和bounding box回归
    时间:在GPU上训练需要2.5天
  3. 由于每个候选区域特征需要单独计算,导致检测时间较长。

SPPNet缺点

相对RCNN的改进:在最后一层feature map上将不同大小的proposal,映射成固定长度的向量,主要减小了特征抽取的时间,排除了输入特征大小的限制。
缺点: multi-stage pipeline:特征抽取->卷积层调优->线性SVM调优->bounding box回归
需要将抽取的特征保存到disk;
仅能对全连接层调优,不能对卷积层调优(由于卷积层特征是离线计算的,也就是分多阶段计算得出的卷积层特征),导致精度有较大的提升空间。

Fast R-CNN

克服了前两者带来的缺点:
1. mAP提升;(相对R-CNN和SPPNet)
2. 将multi-stage改为single-stage;(相对R-CNN和SPPNet)
3. 所有网络层参数可更新;(相对SPPNet)
4. 无需缓存图像特征;(相对R-CNN和SPPNet)

网络结构

Fast R-CNN总结_第1张图片
卷积层和最大值池化层:用于提取整幅图像特征;
RoI pooling层:提取Rol特征,并将特征大小归一化成相同大小的vector;
fc层:
sibling 层:用于预测每个Rol区域的种类(K+1),以及每个种类对应的bounding boxes(4K)

RoI pooling层

该层是SPPNet的简化版本,仅仅使用单个级别的图像金字塔。
input:该层输入N个feature maps和R个roi区域(R>>N)
N各feature maps:均来自卷积层,每个feature maps:H*W*C
R个roi区域:每个是(n,r,c,w,h)结构,其中:n:对应feature map索引,(r,c):roi的top-left位置,(w,h):roi的宽和高
output:
对于每一个roi,H’*W’*C通道的feature map
映射关系:
H’和W’固定(由于金字塔的级别固定),且始终小于H和W
bin的大小和roi的尺寸有关, h/H×w/W h / H ′ × w / W ′

采用预训练网络

网络组成:5个最大池化层和5到13个卷积层,用ROI pooling层替换最后一层的最大池化层,该最大池化层输出7*7*C的特征,适应全连接层的输入。
网络最后一个全连接层和softmax层被两个sibling 层代替,分别用于预测class和bounding boxes回归;
网络的输入:N个图像组成的batch和包含R个RoIs的列表,N和R以及图像分辨率均可以动态改变;

反向传播必须在ROI的感受野内计算反向传播
将原来的softmax classifier、SVMs、regressors合并成softmax classifier和bounding-box regressors,并采用多任务损失,将同时进行两者个优化,因此,将三阶段合并成一个阶段。

多任务损失

encoding

对于每个ROI,通过softmax层之前的层,调整全连接层的神经元个数,以符合softmax的需要,也就是符合K维,采用softmax计算离散概率分布: p=(p0,...,pK) p = ( p 0 , . . . , p K ) ;
另个一输出: tk=(tkx,tky,tkw,tkh) t k = ( t x k , t y k , t w k , t h k ) ,前两个参数相对object proposal尺度不变的平移,后两个参数:对数空间中相对于object proposal的高和宽偏移;

多任务损失函数

Fast R-CNN总结_第2张图片
解释:
分类损失:采用k+1路输出,K为类别个数,1为背景,采用交叉熵;
定位损失:4*K路输出,由于对于背景,不存在定位损失的概念,因此忽略,损失采用平滑L1损失:
Fast R-CNN总结_第3张图片

mini-batch sampling

每个mini-batch两幅图像,每幅图像上采样64个ROI,一共128个ROI,正样本占25%(IoU>=0.5),其他为负样本(IoU在0.1到0.5之间)。

ROI pooling层反向传播

这里写图片描述
每个mini-batch的损失由该batch所有训练样本损失取平均组成,对于每个roi pooling层输出用r表示,其中的每个y只要是由输入层的x pooling的,那么误差就应该反向传播到x,然后,对所有batch中的R进行累加,再求平均,即为最终的误差(注意:上式中并没有求平均的过程,求平均的过程在反向传播到第一层后,才开始求平均)
Fast R-CNN总结_第4张图片

ROI映射

该问题参考这篇博客:CNN中receptive field

参考链接

RCNN学习笔记(4):fast rcnn
ROI Pooling层解析
Fast-rcnn的caffe代码结构描述

你可能感兴趣的:(detection)