Fast R-CNN

作者: 海盗船长_coco | 来源:发表于2019-09-26 10:25 被阅读0次

R-CNN存在的一些问题:

一、训练分成多个阶段:1、先从一张图片上提取2000个候选区域,采用log损失对用于提取候选区域的CNN网络进行微调。2、训练N(类别数目)个SVM,对提取的特征进行分类。3、边界框回归进行目标定位。
二、训练大量消耗存储空间和时间成本,由于CNN提取的特征需要先存储到硬盘,在拿去给SVM进行分类,所以需要耗费大量存储空间。
三、目标检测速度慢。一张图片在VGG16上进行目标检测需要47s。

Fast R-CNN进行的改进:

一、没有使用seletive search操作,而是先将一整张图片进行卷积,这样可以共享卷积运算


Fast R-CNN结构

二、使用RoI池化层(RoI pooling layer),下图展示VGG16网络的结构,进入全连接层的维度大小为7x7x512。我们知道卷积并没有对图片大小做限制,任意一张图片都可以进行卷积运算,但是全连接层对输入的维度有限制。那么如何将任意大小的图片经过卷积后都能得到7x7的大小。作者参考了SSPnets提出的空间金字塔池化(spatial pyramid pooling layer)。对于任意一张HxW大小的图片,可以将他分割成7x7大小小方格,每个小方格h=H/7,w=W/7。最后对小方格中进行最大池化(max pooling)这样就得到了7x7的大小,可以进行之后的全连接层。
那么还有一个问题,这个RoI池化层放下哪里?作者说是将最后一个池化层换做RoI池化层,那么也就是下图红色方框前面的POOL。总结下,如果用VGG16训练,任意一张图片经过先前卷积得到HxWx512的维度,再经过RoI池化层得到7x7x512的大小,然后送去之后的全连接层。


VGG16结构
空间金字塔池化,这里取的大小为4x4,2x2,1x1

三、使用多任务损失:之前的R-CNN将任务分为3个阶段,造成了空间和时间的极大浪费。Fast R-CNN将分类和定位相加合成一个损失值。K个目标类别加上背景一共K+1个类别,经过SoftMax函数,分类使用log损失。定位利用的是边界框回归,与R-CNN中的定位类似。当类别为背景时,u为0,不必计算定位损失。


第k个类别的边界框表示
定位损失计算,v表示真实值
最终合并的损失值

相关文章

网友评论

    本文标题:Fast R-CNN

    本文链接:https://www.haomeiwen.com/subject/hbfnuctx.html