Fast R-CNN网络结构详解

SPPNet 对R-CNN做出了改进,但是仍然存在网络之间不统一训练的问题。因此,Fast R-CNN就是解决这样的问题。
上两篇博文有详细解析R-CNN和SPPNet:R-CNN详解,SPPNet详解

Fast R-CNN改进之处

●增加了一个RoI pooling,然后整合整个模型,把CNN、SPP变换层、分类器、bbox回归几个模块一起训练。具体过程图:
Fast R-CNN网络结构详解_第1张图片
●步骤:
1、首先将整个图片输入到一个基础卷积网络,得到整张图的feature map
2、将region proposal(RoI)映射到feature map中
3、RoI pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个RoI特征向量(此步骤是对每一个候选区域都会进行同样的操作
其中一个是传统softmax层进行分类,输出类别有K个类别加上**”背景”类。**
另一个是bounding box regressor。

RoI pooling

RoI pooling 类似于SPP层,但是它只有一个尺度,目的就是为了减少计算时间和得出固定长度的向量。下面来看RoI pooling 和SPP的结构图对比:
Fast R-CNN网络结构详解_第2张图片
RoI的尺度可以是4x4,2x2,3x3等等,它是可以动态调整的。不像SPP是固定的4x4,2x2,1x1。
那么为什么RoI是单尺度的呢?
这里涉及到了单尺度和多尺度的优缺点,存在一个准确度与时间的取舍问题。
单尺度:直接将image定为某种scale,直接输入网络来训练即可。
多尺度:要生成一个金字塔,然后对于object,在金字塔上找到一个大小比较接近227x227的投影版本。

后者比前者更加准确些,没有突更多,但是第一种时间要省很多,所以实际采用的是第一个策略,因此Fast R-CNN要比SPPNet快很多也是因为这里的原因。

多任务损失

Fast R-CNN完整结构图:
Fast R-CNN网络结构详解_第3张图片
对比前面的SPPNet和R-CNN,还有一个不一样的是SVM分类器被替换成了softmax。这也是后面整个网络可以一起训练的 原因,R-CNN中CNN与SVM的训练在时间上有先后之分,而且两者的训练都是独立的。
这里有两个Loss:
分类loss:一个N+1路的softmax输出,其中的N是类别个数,1是背景,使用交叉熵损失
回归loss:一个4xN路输出的regressor,也就是说对于每个类别都会训练一个单独的regressor的意思,使用平均绝对误差(MAE)损失即L1损失

Fast R-CNN总结

优点:减少了训练时间,并且使整个网络可以统一的训练
缺点:候选区域仍是由Selective Search提取,操作十分耗时

你可能感兴趣的:(人工智能)