背景
2015年,提出了Fast RCNN算法,训练步骤实现端到端,CNN:基于VGG6.
Fast R-CNN是基于R-CNN和SPPnets进行的改进
成果:训练速度比RCNN块9倍,测试速度快乐23倍,准确率68.4%
**SPPnets网络 **解决了:重复卷积计算和固定输出尺度的两个问题
Spatial Pyramid Pooling 空间金字塔池化
- 创新点:在于计算整幅图像的the shared feature map,然后根据object proposal在shared feature >map上映射到对应的feature vector(就是不用重复计算feature map了)。
- 缺点:和R-CNN一样,训练是多阶段(multiple-stage pipeline)的,速度还是不够"快",特征还要保>存到本地磁盘中
相比RCNN的改进点
共享卷积
- 将整张图送到卷积网络中进行区域生成,而不是一个个选取候选区
- 虽任采用Selective Search方法,但共享卷积使得计算大大减少
RoI Pooling
- 用RoI pooling层替换最后一层的max pooling层
- 特征尺度变换:特征池化(RoI Pooling)方法
- 使得可以有任意大小图片的输入,使得训练过程更加灵活准确
多任务损失:
- 将分类和回归网络放到一起训练,使用了 Softmax函数进行分类
- 从而避免了SVM分类器来带的单独训练和速度慢特点
网络架构
相比于RCNN的四个部分,Fast R-CNN只有连个部分
分类器
边界框回归器
损失函数设计
将回归和分类的损失函数加到一起计算
边界框损失函数
分类损失函数
训练过程
RoI Pooling层详解
- Fast R-CNN使用全连接层,所以用RoI Pooling将不同大小的ROI转换为固定大小
- RoI Pooling 是Pooling层的一种:特点是输入特征图尺寸不固定,但是输出特征图尺寸固定(如7x7)。
什么是RoI
图像上的区域框池化 = 感兴趣的区域池化
Selective Search算法提取的一系列可能含有object的bounding box,这些通常称为region proposals或者region of interest(ROI)。
RoI Pooling的输入
- 特征图(feature map):指的是上面所示的特征图,在Fast RCNN中,它位于RoI Pooling之前
- RoIs,其表示所有RoI的N*5的矩阵。其中N表示RoI的数量,第一列表示图像index,其余四列表示其余的左上角和右下角坐标
- Fast RCNN中,指的是Selective Search的输出
- Faster RCNN中指的是RPN的输出,一堆矩形候选框,形状为1x5x1x1(4个坐标+索引index)
RoI的具体操作
- 根据输入image,将ROI映射到feature map对应位置
- 将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同)
- 对每个sections进行max pooling操作
- 这样就可以从不同大小的方框得到固定大小的相应 的feature maps
- 输出的feature maps的大小不取决于ROI和卷积feature maps大小
- RoI Pooling 最大的好处就在于极大地提高了处理速度。
RoI Pooling的输出
RoI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框
输出是batch个vector,
batch的值等于RoI的个数
vector的大小为channel * w * h