Fast R-CNN (2015.ICCV)阅读笔记

Fast R-CNN (2015.ICCV)

Ross Girshick

一、摘要

    这篇论文提出了一个fast R-CNN的方法,它基于先前的工作建立而来,能够有效地使用深度卷积网络来对object proposal方法进行分类。它采用了几个创新的地方,提高了训练速度,检测速度以及检测精度。训练:比RCNN快9倍,比SPPnet快3倍;测试:比R-CNN快213倍,比SPPnet快10倍。

二、文章内容

1、Introduction

(1)R-CNN诸多缺点:训练要多管道进行;训练耗时耗空间;目标检测很慢。

(2)SPPnet特点:时间上相对R_CNN提高了不少,但是依旧有R_CNN的缺点。另外,SPPnet的fine-tuning只能更新全连接层的参数,不能跟新卷积层的参数,会限制网络的检测精度。

(3)这篇论文的贡献:检测精度提高;用了multi-task loss使得整个训练在一个管道进行;训练能更新所有层;不占内存。

2、 Fast R-CNN的结构


图1. fast R-CNN的结构。

    如图1.FastR-CNN首先利用卷积池化层处理一整张图像生成一个卷积特征图。然后有一个RoI池化层从这个卷积特征图中为每个proposal(proposals已经通过selectivesearch提取,一张图像提取大约2000个proposal,这个R-CNN一样)提取一个固定长度的特征向量。每个特征向量再经过一系列的全连接层(FCs)最后产生两个分支输出:一个输出是对K+1个类别(K个目标类和一个背景)的softmax概率估计;另一个是为K个目标类别分别输出四个实值,来表示定位位置。

    所以这里和R-CNN不一样的地方:(1)不是每个proposal都经过卷积池化的步骤,所有的proposals都共享了整张图像经过卷积池化生成的特征图,只通过了一个RoI层来提取,这样会节省大量的时间吧;(2)就一个结构来训练就好,不用再分多少次训练。

3、训练

(1)RoIpooling层

    RoI pooling层使用最大池化将上面提到的特征图里固定的感兴趣区域(RoI)的特征转化为一个固定size(H*W)的特征图。H和W是层参数,和RoI无关。每个RoI是卷积特征图里的一个矩形窗口,由四元数组(r,c,h,w)定义,r和c是左上角坐标,h,w是长和宽。所以h和w是会随RoI变化的。

RoI的工作就是将不同大小的h*w窗口使用最大池化的方式转化为H*W固定尺寸的小窗口。方法就是每h/H*w/W的一个子窗口里使用一次最大池化。这个过程具体的内容在SPPnet里面有细讲。

(2)由预训练的网络初始化

    实验用了三个预训练的ImageNet networks,每个网络有5个最大池化层,以及5到13个卷积层(具体细节见4.1)当预训练的网络参数初始化后,网络结构有三个转换。

首先,最后一个最大池化层有上面的RoI池化层替代,这样产生的H*W特征向量的size符合全连接层的要求。然后,其次,网络最后一次全连接层由上文提到的两个分支层替代。最后,网络有两个输入,整张的图像以及RoIs。

(3)fine-tuning

    使用反向传播来训练所有的网络权重是fast R-CNN的一个重要能力。论文首先解释了为什么SPPnet不能够训练所有的参数。

    SPPnet网络不能训练所有参数的根本原因是:当每个RoI来自不同的图像时,反向传播经过SPP层是高度无效的,R-CNN和SPPnet都是这么运作的。

    论文提出了一个更有效地训练方法:利用训练过程中的特征共享。在训练过程中,SGD minibatches是分层采样的,首先采样N个图像,然后从每张图像中采样R/N个RoIs。严格地讲,相同图像中的RoI在前向传播和后向传播的过程中共享计算,就节省了N个mini-batch的计算。例如,当使用N=2&R=128时,实际只需要传播两次,快了64倍。

(4)Multi-taskloss

    除了分层采样,fastR-CNN只用了一个管道来训练多个任务。

    fast R-CNN有两个并列的输出层。第一个输出K+1个类别的离散概率分布,p=(p0,…,pK),p是由softmax函数计算。第二个输出层分别输出每一个类别的边界盒回归。

    每个训练的RoI都被标记了ground-truth类别u以及ground-truth边界盒回归v。论文对每个标记的RoI使用一个multi-task loss函数来级联地训练分类和回归;


接下来就是具体分析这个函数,不怎么明白,反正就是效果挺好,还不用分开训练,省时。

(5)mini-batch采样

    交代了采样的一些细节内容。

    mini-batch的size是128,每次随机均匀采样2张图,所以每张图挑64个RoIs。其中25%的RoIs选那些和ground-truthbox的IoU大于0.5的proposal,也就是正样本,其余的RoIs选那些IoU在区间[0.1,0.5)的,作为负样本。IoU更低的作为难例挖掘的启发式。

(6)RoI池化层的反向传播

   

    RoI池化层的backwords函数通过跟随argmax转换计算损失函数对每个输入变量的偏微分:

                                

(7)SGDhyper-parameters

    训练过程中的一些参数设置。

(8)尺度不变性

    论文探索了两种方法实现目标检测的尺度不变性。第一种是“brute force”,每张图像在训练和测试阶段都要处理成预定义的像素尺寸,这种方法网络必须直接从训练数据中学习到尺度不变的目标检测。第二种是图像金字塔方法,通过一个图像金字塔向网络提供一个近似的尺度不变,在测试阶段图像金字塔用来对每个object proposal近似尺度归一化,训练阶段每次采样一个图像就随机采样一个金字塔尺度。

4、Fast R-CNN检测

    输入一张图像图像和预先选择的proposals,proposal数量大约是2000。当使用图像金字塔的时候,每个RoI被指定尺度使得接近224*224。网络输出一个后验概率分布和一个预测的包围盒集。然后最后给每个类别都实施一个非极大值抑制。

检测阶段全连接层花费时间很大,因此采用了truncated SVD(一个降维算法吧)来减少计算时间。

5、结果

    实验用了三种预训练的网络模型,AlexNet,VGG_CNN_M_1024,VGG16。

(1)检测精度比较

    VOC12数据集,FastR-CNN获得了最好的结果,平均精度65.7%(加辅助数据集68.4%)。时间比其他VOC快两个量级。

    VOC10数据集,SegDeepM效果更好,mAP为67.2%。Fast R-CNN的mAP为66.1%,但加上辅助数据集的mAP为68.8%。

    VOC07数据集,Fast R-CNN效果最好。

    三个数据集的具体检测精度结果见下图。


图2. 各数据集检测精度比较。

(2)训练和检测时间比较。

    直接上图。


(3)TruncatedSVD的效果

    Truncated SVD在全连接层减少了大量时间,但mAP只少了0.3%。

  

(4)是否要fine-tuning所有的卷积层

    实验发现只要fine-tuning第二个卷积层后面的所有层,因为第一层其实大家众所周知是边缘信息所以没有影响。结果如图。

   

6、分析讨论

(1)多任务学习是否有帮助?

    是的。


(2)尺度不变性讨论。是使用bruteforce(单尺度)还是finesee(多尺度)?

    由于单尺度处理能够在速度和精度上做最好的平衡,尤其可以从图中看出,当模型变深时,因此使用单尺度模型训练和测试。像素尺寸为600pixel。

   

(3)需要更多的数据吗?需要。当数据更多时,效果会变好。

(4)SVM的效果比softmax更好吗?

    softmax的方法比SVM稍微好一点。


(5)proposal越多越好吗?

    不是的。其实《WhatMakes for Effective Detection Proposals》这篇论文也研究过。当proposal数量超过某个值时结果不会变好,甚至还会变差一点点。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值