论文题目:Fast R-CNN
论文地址:https://arxiv.org/abs/1504.08083
代码地址:https://github.com/Liu-Yicheng/Fast-RCNN
Fast R-CNN主要是解决RCNN重复计算卷积的问题,它的解决方案是,先对整个input图像做卷积,得到feature map,同时,用selective search将候选框选择出来,将候选区域在feature map上选出来,这样避免了对每个候选区域重复计算的问题,大大提高了计算速度。同时ROI pooling可以得到固定大小的输出。
一、对论文的解读
1、网络模型:VGG-16
2、single-stage training
RCNN的分类使用SVM,框回归使用一个线性网络,与RCNN对比,Fast RCNN使用一个网络同时进行分类和回归。
3、RCNN缺点:
(1)multi-stage pipeline:提取特征使用一个CNN,分类使用SVM,框回归使用另一个线性网络
(2)速度慢,因为要对每个候选区域进行卷积运算
4、SPP Net
SPP Net,Spatial pyramid Pooling Convolutional networks,空间金字塔池化卷积网络。与RCNN相比,RCNN喂入CNN的图像必须缩放到一定大小,而SPP Net可以喂入任意大小的图片。
它的原理是,黑色图片代表卷积之后的特征图,接着我们以不同大小的块来提取特征,分别是4*4,2*2,1*1,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的块(Spatial bins),我们从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。SPP Net网络如下:
因此,SPP Net可以将任意大小的图像转换为固定长度向量。
5、SPP Net 缺点
(1)同RCNN一样,multi-stage pipeline
(2)无法更新金字塔结构前的卷积层。SPP-Net中的fine-tuning的样本来自所有图像的所有ROI打散后均匀采样的,这导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的feature map,过程变得很expensive,所以不是不能fine-tuning卷积层,而是效率低。
6、Fast RCNN 优势
(1)single-stage 训练,使用multi-task loss
(2)training可以更新所有层
(3)不需要disk存储feature
(4)mAP更高
7、Fast RCNN网络结构图
将原图通过一个CNN网络进行卷积得到特征图,用selective search得到候选区域,在feature map上选择候选区域,输入到ROI pooling层进行最大池化,然后再通过全连接层得到两部分的输出,一部分是分类,另一部分是框回归。
8、Fast RCNN训练过程
(1)将整个image输入到CNN中,得到feature map
(2)用selective search 提取出region proposals
(3)对于每个候选区域,在feature map上提取固定大小的特征向量。(ROI pooling后就是固定大小的特征向量了)
(4)每个特征向量喂入全连接层,有两个输出:分类输出是k类的分类概率,框回归输出是用四个参数表示框的位置。
9、ROI pooling layer
ROI是一个矩形窗口,用4个参数(r,c,h,w)表示,分别是top-left corner(r,c)和它的height,width(h,w),根据输出向量的大小h*w(比如2*2)和候选feature map(即候选区域在feature map上的投影)的大小H*W(比如5*5),将候选feature map划分为(H/h,W/w)(比如(5/2,5/2)=(2,2)注意,此处向下取整),然后使用最大池化,即可获得固定大小的输出。