【论文学习笔记002】Fast R-CNN

1.论文信息

题目 Fast R-CNN
作者 Ross Girshick
年份 2015
期刊 ICCV
论文地址 https://arxiv.org/pdf/1504.08083.pdf
项目地址 https://github.com/rbgirshick/fast-rcnn

2. 论文创新点

  • 对整张图片只进行一次特征提取
  • 将分类与回归同时在网络中进行,不需要SVM训练,也不用额外的特征存储空间
  • 采用SVD(奇异值分解)分解全连接层,减少计算量

3.欲解决的问题

  • R-CNN速度很慢:每张图片采用selective search算法提取2000个候选框,且存在大量重叠,在提取特征时,多次重复提取了特征
  • R-CNN需要大量存储空间:网络后期的SVM分类器及BBox回归器训练时需要大量的特征样本

4.解决方案

4.1 概述

在这里插入图片描述
在这里插入图片描述

  • 网络结构图如上所示。
  • 首先,任意大小的图片输入CNN,经过卷积与池化层,得到特征图,同时,在图片上采用selective search算法提取约2000个候选框;
  • 其次,根据候选框与特征图的映射关系,在特征图中找到每个候选框对应的特征框,并在ROI池化层中将每个特征框池化到7x7大小,经过全连接层可以得到固定大小的特征向量;
  • 最后,利用SVD分解使得特征向量分别经过各自的全连接层,分别输出softmax分类得分以及bbox窗口回归,利用窗口得分分别对每一类物体进行NMS去除重叠候选框,最终得到每个类别回归修正的得分最高的窗口。
4.2 ROI池化层
  • 每个ROI都是一个元组(r,c,h,w),(r,c)是ROI左上角的坐标,(h,w)是高与宽
  • 输入是N个特征映射和一组R个ROI,每个特征映射都是HxWxC的大小
  • 输出是max-pooling的特征映射,H’xW’xC的大小
  • ROI池化层主要是将ROI定位到特征图中对应的patch
  • ROI池化层将每个候选区域均匀分成M×N块,对每块进行max-pooling。将特征图上大小不一的候选区域转变为大小统一的数据,送入下一层。
    在这里插入图片描述
4.3 预训练网络初始化
  • 用了3个预训练的网络:CaffeNet,VGG16,VGG_CNN_M_1024
  • 预训练的网络最后一个max-pooling层替换为ROI池化层,设置H’xW’与第一个全连接层兼容
  • 预训练网络的最后一个全连接层与1000类softmax替换为K+1个类别的分类层和bbox回归层
  • 预训练网络的输入变为一组图片和R个ROI
4.4 微调
  • 小批量采用层次取样,先对图片取样,再对ROI取样,同一图片的ROI共享计算和内存;一次微调联合优化softmax分类器与bbox回归器
  • 多任务损失:分类loss是N+1类的softmax输出,引入了类间竞争;回归loss是对每个类别都训练一个回归器,公式如下:
    在这里插入图片描述
  • 小批量取样:每个SGD的N=2,R=128,所以每张图片取样64个ROI,从候选区域选择25%的与ground_truth的IoU大于等于0.5的ROI,剩下的作为背景
    在这里插入图片描述
  • ROI池化层的反向传播:计算公式如上图所示。其中y是池化层的输出,x是池化层的输入。x,y,r的关系如下图所示。
    在这里插入图片描述
4.5 尺度不变
  • single scale:直接将图片设置为某个scale,直接输入网络训练
  • multi scale:生成一个图像金字塔,训练时对于要用的ROI只要在金字塔上找到一个最接近227x227的尺寸,然后用这个尺寸训练网络
4.6 SVD分解
  • 采用SVD分解加速全连接层计算速度
  • 将全连接层参数W进行分解,分解公式如下。
    在这里插入图片描述
  • 这相当于把一个全连接层拆分为两个全连接层,第一个不含偏置项,第二个含偏置项。
    在这里插入图片描述

5.几点思考

5.1 为什么可以只进行一次特征提取操作
  • 因为selective search算法提取的候选框属于整张图片,因此对整张图片提取出特征图后,再找出相应候选框在特征图中对应的区域,这样就可以避免冗余的特征提取操作,节省大量时间。
5.2 为什么要采用SVD分解实现Fast R-CNN最后的全连接层
  • 目标检测任务中,selective search算法提取的候选框比较多,几乎有一半的前向计算时间被花费于全连接层,就Fast R-CNN而言,ROI池化层后的全连接层需要进行约2000次,因此在Fast R-CNN中可以采用SVD分解加速全连接层计算。
5.3 候选区域是不是越多越好
  • 文中利用selective search算法提取1000~10000中10种数目的候选区域进行训练测试,发现随着候选区域个数的增加,mAP成先增加后缓慢下滑的趋势,这表明更多的候选区域会有损精度
    在这里插入图片描述
  • 文中也以selective search算法提取的2k个候选区域为基础,每次增加1000 × {2, 4, 6, 8, 10, 32, 45}个密集box进行训练测试,发现mAP比只有selective search方法的2k候选区域下降幅度更大

6.论文结果

  • PASCAL VOC 2007训练集上,使用VGG-16网络Fast R-CNN训练时间为9.5h,同等条件下R-CNN需要84h,快8.8倍;
  • PASCAL VOC 2007测试集上,使用VGG-16网络不采用SVD Fast R-CNN mAP为66.9%,同等条件下R-CNN mAP为66.0%;Fast R-CNN采用SVD mAP为66.6%。
    在这里插入图片描述

7.待解决的问题

  • Fast R-CNN中采用selective search算法提取候选区域,而目标检测大多数时间都消耗在这里,这无法满足实时应用需求,而且Fast R-CNN并没有实现真正意义上的端到端训练模式
发布了15 篇原创文章 · 获赞 14 · 访问量 1259

猜你喜欢

转载自blog.csdn.net/chiyukunpeng/article/details/101675231