【原创】Fast R-CNN详解

Fast R-CNN详解

  • Fast R-CNN的改进
  • Fast R-CNN的基本框架
    • 问题
      • 解答1
      • 解答2
    • 全连接层
  • 训练
  • 测试
  • SVD加速
  • 总结

Fast R-CNN的改进

Fast R-CNN相较于R-CNN来说改进了以下三点:
1.基本实现了模型的end-to-end(除了还是需要用Selctive Search来生成2K个候选区域外)。
2.不在将每个候选区域放入CNN中计算特征,而是直接输入原图得到原图的全部特征(只进行一次CNN)。
3.将候选框的回归和分类问题同时进行输出,而不需要分别训练SVM和回归器。

Fast R-CNN的基本框架

【原创】Fast R-CNN详解_第1张图片
Fast-RCNN依旧基于VGG16,首先输入的图片resize为224*224后放入CNN网络提取特征(5个卷积层和2个降采样层)

VGG16网络结构:
【原创】Fast R-CNN详解_第2张图片
作者在第五个卷积层提取特征,并加上Selective Search产生的2K个ROI,通过ROI pooling层将这些ROI调整为固定维度,再通过两个output都是4096的全连接层后,将输出分为分类和回归两块,在分类模块中,输出通过一个output为21的全连接层(21表示20个类和一个背景)和一个softmax层,在回归模块中,输出通过一个output为48的全连接层(48表示各个类别region proposal的四个坐标)和SmoothL1Loss层。

问题

1.在RCNN中我们使用Selective Search在原图中获取ROI,并通过CNN提取特征,在Fast R-CNN中我们先将原图通过CNN提取特征,那么如何在feature map中获取ROI的对应区域?

2.如何将不同维度的ROI转换为相同维度?

解答1

x ′ = ⌊ x / S ⌋ + 1 x' = ⌊x/S⌋+1 x=x/S+1,其中⌊⌋为向下取整符号, x ′ x' x为feature map中ROI的横坐标,x为原图中ROI的横坐标,S是convs中所有的strides的乘积,通过如上转换可以在feature map中找到ROI的坐标位置。
图片来源
【原创】Fast R-CNN详解_第3张图片
比如在上图中ZF-5中,S=222*2=16,对于Overfeat-5/7就是S=12,需要注意的是Strides包含了池化、卷积的stride。

因此我们输入原图从而得到了ROI后,可以得到每个ROI的四个点,再根据公式:
左、上点: 在这里插入图片描述
右、下点:在这里插入图片描述
就可以得到在feature map中ROI的位置。

解答2

在我们得到feature map中ROI位置后,我们再经过ROI pooling层将特征转变为固定大小。
Fast R-CNN中的ROI pooling层将输入的feature map中大小为 ( h , w ) (h,w) (h,w)的ROI分割成 H ∗ W H*W HW个大小为 ( h / H , w / W ) (h/H,w/W) (h/H,w/W)的sub-windows,然后对每个sub-windows进行max-pooling操作,于是不论输入的ROI大小为多少,经过ROI pooling层后,其大小将变成 H ∗ W H*W HW(文中作者的H和W都设为7)。此时可以将ROI的特征输出全连接层。

全连接层

我们在得到固定大小的ROI的特征输出后将其放入全连接层进行计算,这里作者不再使用SVM和回归器作为分类和回归region proposal的方式,而是将regressor放进网络一起训练,每个类别对应一个regressor,同时用softmax代替原来的SVM分类器,从而进行end-to-end的训练(个人认为end-to-end的训练有助于卷积层能力和回归于分类层能力相互提高)。

损失函数分为分类的损失函数和bbox回归的损失函数,回归损失函数:
【原创】Fast R-CNN详解_第4张图片
【原创】Fast R-CNN详解_第5张图片

回归的输出是一个四元组,分别为 t x u 、 t y u 、 t w u 、 t h u t_x^u、t_y^u、t_w^u、t_h^u txutyutwuthu,其中u表示类别, v i v_i vi表示ground true。

在这里插入图片描述
最后将分类的loss和回归的loss整合在一起,作者将 λ λ λ设为1。

训练

在fine-tuning中,每个min-batch都选取随机两张图像和128个region proposal,其中每个图像都有64个ROI,然后从这些ROI中挑选约25%的ROI,这些ROI和ground truth的IOU值都大于0.5,剩余的ROI都在区间[0.1,0.5)中采样,并将u标记为0(背景)。另外只采用随机水平翻转的方式增加数据集(50%概率水平翻转)。

图片来源
【原创】Fast R-CNN详解_第6张图片

测试

前面和训练差不多,测试中对每个类型采用NMS算法,得到最终结果。

SVD加速

详见下一篇博文(占个坑)

总结

Fast R-CNN在很大程度上实现了end-to-end(除了生成2K个候选区域的Selective Search算法),并通过只进行一次卷积运算、使用SVD加速全连接层等大大提高了运算效率,但同时Selective Search算法依旧使得Fast R-CNN的运行时间很长,这也是后续Faster RCNN的改进方向之一。

你可能感兴趣的:(深度学习,算法,计算机视觉,机器学习,网络,卷积)