目标检测学习笔记10——Fast-RCNN学习与论文解读

Fast R-CNN是2015年提出的改进目标检测算法,针对R-CNN和SPP-Net的不足,通过RoI池化层实现单阶段训练,提高训练和测试效率,同时引入多任务损失合并分类和回归任务。实验表明,Fast R-CNN在保持高精度的同时,训练和测试速度显著提升。
摘要由CSDN通过智能技术生成

一、引言

Fast R-CNN发表于2015年,是一种基于卷积神经网络目标检测的算法,它是建立在之前R-CNN的基础上使用深度卷积神经网络进行高效的目标检测。

R-CNN的缺点:

  1. 测试速度慢
  2. 训练速度慢
  3. 训练所需空间大(因为每张图片所提取的特征向量都需要存储在硬盘之中)
  4. 训练是多阶段的:首先使用log loss 在目标建议(object proposal)上微调ConvNet;然后让 SVM 适应 ConvNet 的特征;最后训练 bounding-box regressor。
  5. 使用VGG16网络 在 GPU 上每张图片需要 47秒

Fast-R-CNN创新点:

  1. 使用VGG-16神经网络(R-CNN用的AlexNet);
  2. 与R-CNN相比,训练速度快9倍、测试速度快213倍、mAP更高;
  3. 与SPP-Net相比,训练速度快3倍、测试速度快10倍、mAP更高。

二、Introduction-介绍

近期,卷积网络在图像分类和目标检测领域能够显著提升准确率。目标检测任务比图像分类任务复杂得多。多阶段的流程导致速度很慢。

R-CNN流程为:从输入图像找出2k个左右的候选框,对每个候选框进行裁剪缩放,对每个候选框提取特征向量,使用SVM进行分类,使用bbox回归修正位置)。

复杂来源于要精确定位。精确定位的两个挑战:

  1. 如何产生候选框
  2. 候选框只是粗略的定位,如何去修正

解决方法需要取权衡速度、精度或复杂度。

本论文,简化训练过程,提出一个基于卷积的顶尖的目标检测器。是一个单阶段的训练算法:联合了分类、边框回归。loss合并、梯度回传。

2.1 R-CNN and SPP-Net

R-CNN的缺点细节说明:

  1. Training is a multi-stage pipeline。训练分多步骤。先fine-tunning预训练网络,然后针对每个类别训练SVM分类器,最后对每个类别都用回归模型对bbox回归。且候选框由Selective Search方式获得。繁杂。
  2. Training is expensive in space and time。每次特征都需要写入磁盘,费空间;每次都再读入特征,费时间;
  3. Object detection is slow。测试时对每个候选框都要卷积特征提取,重复步骤太多。

R-CNN慢主要是因为每次都使用卷积提取每个候选框的特征向量,而没有共享计算

SPP-Net的提出是通过共享计算而加速。SPPnet对整个图像卷积计算特征,再去特征图上找与候选框对应的。再使用不同尺寸的最大池化操作(金字塔池化层)得到特征向量,拼接这些向量得到最终的向量。
如下图所示,使用4×4、2×2、1×1的尺寸进行最大池化后,将三个结果拼接在一起得到最终的向量。
在这里插入图片描述
SPP较R-CNN,测试速度快10~100倍,训练速度快3倍。

SPPnet的缺点:

  1. multi-stage pipeline.和R-CNN缺点一样,是多阶段的。
  2. Feature are written to disk.需要写入磁盘,费时费空间。
  3. fine-tuning algorithm不能更新金字塔池化层之前的卷积层,受限严
    重。

解释一下为什么不能更新金字塔池化层前的参数:
严格说,SPP-Net也可以反向传播,但是会复杂很多。Ross大神在Fast R-CNN中给出的解释是:SPP训练样本来自不同图像导致反向传播效率低下。我的理解是:SPP-Net中fine-tuning的样本是来自所有图像的所有RoI打散后均匀采样的,即RoI-centric sampling,这就导致SGD的每个batch的样本来自不同的图像,需要同时计算和存储这些图像的Feature Map,过程变得expensive.

2.2 本文贡献

  1. 更高的mAP;
  2. 训练阶段是single-stage,使用multi-task loss;
  3. 训练阶段可以更新所有层;
  4. 特征缓存不需要磁盘存储。

三、网络结构

在这里插入图片描述

  1. 输入整张图像和使用Selective Search提取的一系列候选框的信息;
  2. 整张图像经过一系列卷积层和最大池化层,生成feature map;
  3. 找到对应各候选框的feature map部分,输入RoI池化层,得到固定长度的特征向量;
  4. 经过全连接层,分流为两个分支,一个分支是k+1个神经元的FC层+softmax(k是类别数);另一个分支是对每个类都做回归的FC层,有4个神经元。

更详细的算法流程图如下图所示。
在这里插入图片描述

3.1 RoI pooling layer

RoI:Region of Interest,是整个特征向量图中的一个矩形(也就是候选区域所对应的那部分特征向量)。RoI被定义为 ( r , c , h , w ) (r,c,h,w) (r,c,h,w) ( r , c ) (r,c) (r,c)是top-left corner, ( h , w ) (h,w) (h,w)是height和width。

该层使用最大池化,将输入特征向量划分为H×W的网格大小,对每个网格通道独立地做最大池化,最终得到H×W×通道数的特征。

RoI pooling层实际上是SPPnet金字塔池化层的简化版
在这里插入图片描述
有时特征向量并不能被完全等分为H×W,因此有两种操作:

  1. 有舍操作(下左图);
  2. 无舍操作(下右图);

在这里插入图片描述
一般不采取有舍操作。

3.2 Pre-trained networks

实验预训练了3个网络:CaffeNet,VGG_CNN_M_1024,VGG-16,有5个最大池化层和5~13个不等的卷积层。

使用这些网络初始化Fast R-CNN前,需要以下修改:

  1. 用RoI pooling layer取代网络的最后一个池化层;上面提到RoI层是划分特征向量为H×W个网格,由于VGG16的最后一个池化层是7×7,因此H=7,W=7。
    在这里插入图片描述

  2. 最后一个FC层和softmax被替换成fast R-CNN框架图介绍的两个并列层;
    在这里插入图片描述

  3. 输入两组数据到网络:一组图片和每一个图片的一组RoIs;

3.3 Fine-tuning for detection

针对之前提到的SPPnet不能更新金字塔池化前的参数:

Fast R-CNN采用分层采样思想,先采样出N张图像(image-centric sampling),在这N张图像中再采样出R个RoI,具体到实际中,N=2,R=128,同一图像的RoI共享计算和内存,也就是只用计算和存储2张图像,消耗就大大减少了。

这个策略,比从128张图中各采样1个RoI快64倍。

除了分层采样,Fast-R-CNN还将分类、回归放在一个网络中,合并loss,合成一个单阶段的fine-tuning。

3.3.1 Multi-task loss

多任务损失,将R-CNN中多阶段的损失合并。
在这里插入图片描述

2个输出层:
①分类(类别概率, p = ( p 0 , . . . , p K ) p = (p_0, . . . , p_K) p=(p0,...,pK),)
②回归(位置偏移量, t k = t x k , t y k , t w k , t h k t^k = t^k_x, t^k_y, t^k_w, t^k_h tk=txk,tyk,twk,thk)

每个训练的RoI被label为GT的类别 u u u和GT的回归目标 v v v
在这里插入图片描述
使用Multi-task可以有效提升mAP
在这里插入图片描述

3.3.2 Mini-batch sampling

在fine-tuning 阶段,每个SGD mini-batch 是2张图片,每张图片64个RoI。

  1. 若候选框与所有GT框的IoU<0.1,不作样本;
  2. 若候选框与某GT框的IoU在[0.1,0.5),作负样本, u = 0 u=0 u=0
  3. 若候选框与某GT框的IoU≥0.5,作正样本, u ≥ 1 u≥1 u1

从正样本中取25%的RoI,从负样本中取75%的RoI。在训练过程中,随机50%的概率水平翻转图片,以增加数据集,除此之外没有其他数据增强的方式。

四、SVD分解

在分类任务中,卷积层耗费的计算时间更长;
而在该目标检测任务中,由于RoI数量多,几乎有一半的前向计算时间用于全连接层。使用SVD分解全连接层,可以加速全连接层的计算。

简而言之,就是将一个全连接层分解为两个全连接层。
在这里插入图片描述
经过SVD操作后,在mAP仅降低0.3%的情况下,速度提升了30%。

在这里插入图片描述

五、实验

5.1 VOC 2007

预训练模型都是使用的VGG16,且使用了bbox回归。
在这里插入图片描述

5.2 VOC 2010

在这里插入图片描述

5.3 VOC 2012

在这里插入图片描述

5.4 训练时间与测试时间

在这里插入图片描述

  1. 前面提到,预训练了3个网络:CaffeNet,VGG_CNN_M_1024,VGG-16。标记CaffeNet为 S S S, VGG_CNN_M_1024为 M M M,VGG-16为 L L L
  2. Fast R-CNN明显有加速训练与测试时间的效果;
  3. SVD操作虽然使准确率稍有降低,但速度上再次提升了很多。

5.5 微调哪些层

在R-CNN论文中提到,微调只微调了全连接层;SPPnet也只微调了全连接层。因此想探讨一下微调卷积层的重要性。VGG16中有13个卷积层。
在这里插入图片描述

  1. 第一列——只微调全连接层;第二列——从第三个卷积层开始微调;第三列——从第二个卷积层开始微调;
  2. 微调卷积层后,Fast-R-CNN效果比SPPnet好;
  3. 从第二层卷积层开始微调比第三层开始微调高0.3%mAP;

但论文中提到,虽然conv_2的mAP比conv_3高0.3%,但是训练时长分别为12.5h和9.5h。训练时长提升了1.3倍。所以从conv_3开始微调是更好的选择。

5.6 softmax v s vs vs SVM

在这里插入图片描述
分类时,使用softmax多分类,比多个SVM分类器准确率高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值