cnn 回归 坐标 特征图_Fast R-CNN

Fast R-CNN是一种改进的目标检测方法,它解决了RCNN和SPPNet的多阶段问题,通过ROI pooling层实现固定长度特征向量,结合分类和回归任务,提高检测速度。在预训练的CNN基础上,进行微调,采用多任务损失函数进行softmax分类和bbox回归的联合优化。训练中使用分层采样策略,通过尺寸不变性增强模型的泛化能力。
摘要由CSDN通过智能技术生成

论文:《Fast R-CNN》,Ross Girshick

源码:rbgirshick/fast-rcnn

前面说到目标检测的方法,比如RCNN,是multi-stage的,导致训练比较费时,并且中间需要保存特征等,对存储空间也有要求。当然后来提出了SPPNet,对整幅图抽取特征,一定程序上提高了速度,但是依然是multi-stage的,所以本文提出Fast R-CNN,用于解决这些问题。

如图1是Fast R-CNN示意图,

b3899a8237dab736af0212b8f953a39b.png
图1

整个图以及一系列的object proposals作为输入。CNN网络从整个图抽取特征,然后对于每个object proposal(也称ROI, region of interest),其映射到feature map上的那部分,经过ROI pooling layer形成一个固定长度的特征向量,特征向量再经过全连接层最终分为两支,一支为softmax用于分类预测,另一支用于目标定位回归。假设类别数量为K,那么加上背景bg,softmax层为(K+1)-way。bbox regressor为每个类比输出4个值,用于bbox定位微调。

由于是生成固定长度的ROI特征向量,所以也可以看作是SPP的特殊情况:只有一级金字塔,记scale为HxW。假设ROI映射到feature map上的那部分由(r,c,h,w)定义,其他左上角坐标为(r,c),高宽为(h,w) ,那么ROI pooling 相当于将hxw的输入 max pooling 到HxW输出, 与普通max pooling类似,ROI pooling也是对每个channel分别独立进行。

CNN网络

Fast R-CNN中的CNN网络用于对整个image抽取特征,但是CNN网络是什么样的呢?论文中采用了三种网络,第一个来自于R-CNN中的网络,也就是AlexNet,记为

,第二个是VGG_CNN_M_1024(可参考论文[1]),记为
,第三个是VGG16,记为
。这三个网络都包含5个max pooling层。

训练

首先对这三种网络使用ImageNet进行预训练,然后用预训练的模型来初始化Fast R-CNN模型,此时需要做一下调整:

  1. 最后一个max pooling层被ROI pooling替代,并配置HxW以适合其后的第一个fc层。由于第一个fc层之前有5个max pooling层,其输入是初始输入的1/32,而ImageNet的图像大小为224,故第一个fc层的输入大小为224/32=7,所以HxW配置为7x7
  2. 最后一个fc层(对于ImageNet而言,其输出大小为1000)以及softmax层被替换为两支:如图1,第一支为 fc层+(K+1)-way softmax,第二支为fc层+bbox regressor。
  3. 网络的输入有两个:image 以及image的ROI

为目标检测任务做微调

  1. 分层采样得到SGD的mini-batch,首先采样N个images,然后每个image采样R/N个ROIs。来自同一个image的ROIs在前向后向传输时共享计算和内存,减小N 则能降低mini-batch的计算。这种分层采样的策略实际中不会减慢收敛速度。作者使用N=2, R=128, 并发现SGD迭代次数比R-CNN的还少。
  2. softmax和bbox regressor的联合优化

多任务损失

R-CNN与SPPNet均使用SVM作为分类器,而Fast R-CNN使用softmax作为分类器。假设softmax层计算得到各分类得分为,

。bbox regressor为类别
k 计算得到的定位偏移量为
,表示object proposal的尺寸不变转换和log-空间的宽高平移(对式(3,4)两边取对数)。假设object proposal的坐标为
(x,y,w,h),那么Test阶段 ,计算出预测box的坐标为,

Train阶段,假设object proposal对应的gt box坐标为

,那么实际偏移量为

故object proposal对应的gt box分类为k,与对应gt box的实际偏移量为t,那么联合损失为,

所有object proposal的总损失为,

Mini-batch 采样

微调阶段,每次SGD迭代所用的mini-batch从N=2个images中获取, 这N个images随机选择,mini-batch的大小为128,每个image中采样64个ROIs。与RCNN类似,选取25%的ROIs作为正例,即分类

,这些正例来自于那些与某个gt box的IOU超过0.5的object proposals,剩余的75%的ROIs将用作负例,分类k=0,这些负例从与gt box的最大IOU位于
[0.1,0.5)范围的object proposals中采样。

使用水平翻转的方式扩增数据集大小。

对于数据集中的每个image,采用select-search方法生成object proposals,然后将gt boxes一同加入object proposals,得到所有的object proposals,然后计算这些object proposal与gt box的最大IOU,以及最大IOU所对应的gt box的分类。

尺寸不变性

使用两个方法达到目标检测的尺寸不变性。1. train和test阶段,处理每个image,使其尺寸为 预先定义好的值,由网络直接从训练数据中学习尺寸不变性。2. train阶段,随机修改image尺寸,形成多个尺寸(pyramid scale)的image,这也作为 数据增广的一种方法。

训练步骤

  1. 对一image中的所有ROIs,获取与gt box的最大IOU大于等于0.5的那部分ROIs,称之为期望boxes,记为ex_boxes,使用式(5-8)计算各ex_box 与其对应的gt box的偏移量,每组偏移量对应一个类别,gt box的类别。注意:最大IOU小于0.5的那部分ROIs没有计算偏移量。
  2. 按类别,计算偏移量的均值,以及标准差。然后将偏移量减去均值,并除以标准差进行归一化。
  3. 从数据集中随机获取两个images的相关数据,包含image 像素数据,以及object proposals的坐标,与gt box的最大IOU,gt box的类别,偏移量等。
  4. 将image的像素值减去像素均值,均值事先计算好了,为(102.9801,115.9465,122.7717)。记image的短边为min,长边为max, 并记image将被缩放的目标大小为s,那么缩放比例应为s/min,检查长边缩放后的值max*s/min是否超过一个最大值max_size,若超出,则修改缩放比例为max_size/max。 然后按照这个缩放比例对image 进行resize操作。
  5. 对resize后的两个image,找出最大的宽w,和最大的高h,然后创建blob(2,w,h,3),这样能保证一次mini-batch中,所有image的空间尺寸相同, 然后将resize后的两个image从左上角的空间位置填充到blob中。不能保证每个SGD迭代时,w和h都相同,以VOC2007为例,采用VGG16作为特征抽取网络,此时h=600,但是w可能是800,也可能时802等,当然不管大小如何,反正在ROI pooling层之前都是卷积层,参数数量都是相同的,而经过ROI pooling层之后,输出大小都相同(7x7),所以之后的全连接层参数也相同,所以不影响训练,与SPPNet类似,可以接受不同scale的image作为输入。
  6. 正如前面所讲,将image中最大IOU大于等于0.5的ROIs选出来作为正例,如果数量超过128/4=32,那么还需要随机选取其中32个作为正例,将最大IOU介于[0.1,0.5)范围内的ROIs选作负例,如果数量超过128-32=96,那么随机选取其中96个作为负例。 由于image是经过resize的,所以选定的这些ROIs的坐标也需要对应的乘以缩放比例。
  7. 当数据到达ROI pooling层时,经过了4个max pooling层,所以ROIs的坐标分别变为原来的1/16

反向传播

记ROI pooling层的输入上某一点为

,来自第
r个ROI的第 j个输出单元值记为
,有如下关系,

其中

是ROI上一个子窗口中输入单元的位置索引,在这个子窗口上进行max pooling得到
。由于ROI可能有重叠部分,所以
可能会贡献到不同的
,所以这一层的反向传播公式为,

检测

检测阶段,输入数据通过网络得到每个ROIs:各分类得分以及各分类下坐标偏移量。通过Select-Search方法得到2000个ROIs,不管具体使用多少个ROIs,反正记ROIs数量为N,分类数量为C(pascal voc数据集下C=21),那么网络最终的输出数据为:得分scores维度为NxC,坐标偏移量boxes的维度为Nx4C。分别在每个分类下,对于此分类的所有ROIs的得分,筛选出得分大于阈值CONF_THRESH(源码中设置为0.8) 的那部分ROIs,根据这些ROIs的得分以及坐标,使用非极大抑制nms,剩下的就是这个分类下最终检测出来的ROIs。

对于整个图进行图像分类任务而言,全连接层的计算耗时相对于卷积层的计算耗时是非常小的,但是对于目标检测任务来说,由于ROI proposals数量巨大,使得全连接层的计算耗时接近前向传播总耗时的一半,解决办法之一是使用截断SVD进行加速。假设fc层的输入单元数为v,输出单元数为u,那么权重矩阵维度为uxv,对权重矩阵进行截断奇异值分解 ,

其中U是由权重矩阵W起始的的t个左奇异向量组成,V是由W起始的t个右奇异向量组成,

是W起始的t个特征值组成的对角矩阵。通常
tu,v小得多的,那么权重参数数量就由 uv 降低为 t(u+v)。 网络中,原来由W指定的 fc 层,现在可用两个全连接层代替,第一个fc层使用权重矩阵
(无偏置向量),第二个 fc 层使用权重矩阵
,且使用偏置向量。我的理解就是由原先使用
uxv 权重矩阵的单个fc层,改为用两个fc层,且第一个fc 层的权重矩阵维度为 txv,无偏,第二个fc 层的权重矩阵维度为 uxt,有偏,且所使用的 t值比 u,v都要小很多。

引用论文:

[1] 《Return of the devil in the details: Delving deep into convolutional nets》K. Chatfield

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值