Fast-RCNN提高了 训练和测试上的速度+准确率
提出了一种单阶段训练算法同时可以用来分类目标的proposal和他们的空间位置
1.1  RCNN 的三个缺陷:
  • 训练是一个三阶段的pipeline:fine-tunes(ConvNet)+SVM(ConvNet features)+bounding-box regressors
  • SVM和BB regressors从proposal中提取出来的特征需要存到硬盘上,费时费空间
  • 测试阶段从图片中提取特征耗时太多
SPP通过共享计算,对一张图片一次卷积——得到一个共享特征图shared feature map,抽取feature vectors进行分类。从shared feature map里面的部分(对应proposal)抽取特征经过max-pool固定大小(如6x6),再传入SPP。
SPP的缺陷:与RCNN相同,不同点在于SPP的调优fine-tune算法没法更新SPP前的卷积层,SPP的微调只更新SPP层后面的全连接层,限制了网络的精度。(原因下文给出)


2  Fast -RCNN 的架构和训练
输入:an image + a set of object proposals(2000个proposals)
  1. an image通过深度网络产生一个conv feature map
  2. feature map与proposal是ROI projection存在映射关系,对于每一个proposal,从feature map中通过ROI pooling layer 提取固定大小的feature vector,传入一系列的FC层产生两个分支的输出层
  3. 两个输出层:一个是分类的estimate概率分数,另一个是每一种类别的四个值,用于调整refine位置。((a fully connected layer and softmax over K +1 categories and category-specific bounding-box regressors
除了提取proposals其他过程是joint training的,测试阶段做一个NMS(非极大值抑制)

2.1 The ROI pooling layer
每个ROI由四个tuple(r, c, h, w)定义
将h x w 的ROI窗口分割为 H X W 的格子grid(每个子窗口的大小为h/H x w/W )然后通过max-pool的方法将子窗口与格子对应起来。
这个层可以理解为SPP-net的SPP层中的只有一层金字塔的特例。
2.2 从预训练网络中初始化
预训练的网络有五个max-pooling layers和5-13个卷积层
用预训练的网络初始化一个Fast-RCNN,需要三个transformation变换过程:
  1. 最后一个max pooling layer被RoI pooling layer替换(类似SPP),这个RoI pooling layer可以与网络的第一个FC兼容
  2. 网络最后的全连接层与softmax(原本是1000个类)被两个姐妹分支层替代(描述上面有)
  3. 网络被改成采取两个输入:N个图片和R个RoI



2.3 为检测设计的fine-tuning
使用后馈传播训练网络权重是Fast-RCNN最重要的能力
    为什么SPP-net中无法更新SPP前的权重:
博客说法:这是因为卷积特征是线下计算的,从而无法在微调阶段方向传播误差。而Fast-RCNN中则是通过image-centric sampling提高了卷积层特征提取的速度,从而保证了梯度可以通过SPP层(即ROI pooling层)反向传播。
反向传播需要计算每一个ROI感受野的卷积层,通常会覆盖整个图像,如果一个一个用ROI centric sampling的话又慢有耗内存
原文:The root cause is that back-propagation through the SPP layer is highly inefficient when each training sample (i.e. RoI) comes from a different image, which is exactly how R-CNN and SPPnet networks are trained. The inefficiency stems from the fact that each RoI may have a very large receptive field, often spanning the entire input image. Since the forward pass must process the entire receptive field, the training inputs are large (often the entire image).
当训练来自不同图片的样本的时候,后馈穿过SPP层是低效的,这种低效是因为,每一个ROI可能有一个非常大的感受野(经常padding到一整张图片)训练输入很大。
SPPnet采用了ROI-centric sampling的方法:从所有的图片的所有的ROI中均匀取样,这样每个SGD的mini-batch中包含了不同图像中的样本。
FRCN的有效训练方法:
(也是利用了特征共享)
SGD(stochastic gradient descent)的minibatch是hierarchically 采样的:采样N张图片+每张图片采样R/N个ROIs
(从同一张图片提取的ROI共享计算和内存)(使用N=2 和 R=128时,训练时间比从128张图片采样一个ROI要快64倍,后者是RCNN和SPP采用的方式 )
Fast R-CNN uses a streamlined training process with one fine-tuning stage that jointly optimizes a softmax classifier and bounding-box regressors
只有一个微调阶段的流水线处理,jointly同时最优化 softmax classifier和 BB regressors
fine-tuneing包含多个过程:多任务损失(muti-task loss)、小批量取样(mini-batch sampling、ROI pooling层的反向传播(back propagation through ROI pooling layers)、SGD超参数(SGD hyper parameters)
多任务损失函数Muti-task loss
两个姐妹分支输出层:
  • 离散概率分布p=(p0,p1,p2,,,,pk) over K+1categories
  • BB回归:,k表示类别的索引
把两个输出的损失写到一起:
u是正确的类别,v是BB 回归的目标
其中,第一项是正确分类的损失函数:
第二项是位置坐标的损失函数:
BB regression target目标值:
预测值:
[u>=1]表示当u>1取1 否则取0
对于背景ROI,没有ground-truth 的记录notion,所以第二项直接忽略
L1 loss了解一下,文中说比L2 更less sensitive to outliers(离散点),即更加鲁棒
λ控制两个损失函数之间的平衡,实验中设为1
Mini-batch sampling:
上面有说,hierarchically sampling,mini-batch大小为R时,每张图片采样R/N个
在选取的样本中,25%的ROI是IOU(目标与背景)超过0.5的,75%是IOU在[0.1,0.5)之间的,小于0.1的视为难以辨认,训练过程中图片有0.5的概率进行水平翻转horizontally flip

通过ROI pooling layer的后馈传播
x是pooling的输入单元,y是pooling的输出单元,
Yrj 部分在纸上
ROI pooling层的后馈函数计算损失函数对每个输入变量x的偏导数:
对于每一个mini-batch 的ROI r和每一个输出单元Yrj,若果y是x pooling来的,损失函数L对Y的偏导数计入累积值。
这一块不是很懂
SGD超参数
没什么好讲的,见原文
2.4 Scale invariance尺度不变性
SPPnet使用了两种实现尺度不变的方法:
  • single-size training:在训练阶段和测试阶段,每一张图片都以一个提前定义好的大小进行处理。(博客:直接将image设置为某种scale,直接输入网络训练,期望网络自己适应这个scale,学习尺度不变性
  • multi scale training:生成一个图像金字塔,在训练阶段,每次从一张图像的金字塔尺寸随意采样,在测试阶段,对于每一个目标proposal,图像金字塔被用尺度归一化。(不是很懂)
本文使用了第一种方法,以为第二种耗时性能提高不明显。
3.1 使用truncated SVD来加速检测
在这里我们加速的是全连接层,当ROI的数量比较多的时候很有效
truncated 截短的,截平的,截断的,截成平面的
使用SVD,一个uxv的矩阵可以如下分解:
右边分别对应 [u x t] [t x t] [v x t]
  1. U是一个u x t的矩阵包括(comprise)W的前t个left的奇异向量 U is a u × t matrix comprising the first t left-singular vectors of W
  2. E 是一个对角矩阵,包含W中 t个最top的singular values
  3. V 类似上面两个,包含右
Truncated SVD将参数的数量从uv减少到t*(u+v) ,t要远远小于min(u,v)
一个对应到W的全连接层被两个全连接层代替,中间以一个 低维数据相连,没有非线性部分
论文解决几个问题:

  1. 哪些层需要fine-tune
对于较深的网络,穿过ROI pooling layer的训练是很重要的,即较深的网络中,卷积层的微调是很有意义的,效果有很大的差异,而较浅的网络中,全连接层的微调已经足够。
公认事实:conv1层是不需要微调的,没意义
在论文的实验中,conv3-conv13上的微调是necessary的
  1. 多任务训练的作用
  • 避免了多阶段的流水线训练任务
  • 提高了精度,准确率
  1. SVM outperform softmax?
FRCN使用的是softmax分类器,RCNN和SPP使用的是SVM,结果softmax的效果稍微比SVM好一点点。
  1. 并非proposal的数量越多越好,甚至会slightly hurt accuracy
state-of-the-art最先进的,已经发展的,达到最高水准的
FRCN大致就是一个joint training 版本的SPP-net,改进如下:
花了一天整理的

fast RCN论文笔记相关推荐

  1. 最详细的Fast RCNN论文笔记

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-75.html 论文:Ross Girshick.Fast R- ...

  2. [论文笔记] Fast Quality Driven Selection of Composite Web Services (ECOWS, 2006)

    Time: 4.0 hours Jae-Ho Jang, Dong-Hoon Shin, Kyong-Ho Lee, "Fast Quality Driven Selection of Co ...

  3. 论文笔记 SiamMask : Fast Online Object Tracking and Segmentation: A Unifying Approach

    论文连接:[1812.05050] Fast Online Object Tracking and Segmentation: A Unifying Approach 论文连接:[1812.05050 ...

  4. Fast R-CNN论文阅读笔记

    文章目录 Fast R-CNN论文阅读笔记2015 Abstract 1. Introduction 1.1 R-CNN and SPPnet 1.2 Contributions 2.Fast R-C ...

  5. Fast R-CNN论文原理+目标检测笔记(二)

    文章目录 Fast R-CNN 1. SPPnets 2. ROI池化层 2.1 介绍 2.2 ROI池化层原理 3. Fast R-CNN的原理 Fast R-CNN 论文摘要:This paper ...

  6. 论文笔记:Autoregressive Tensor Factorizationfor Spatio-temporal Predictions

    0 摘要 张量因子tensor factorization分解方法在时空数据分析领域很受欢迎,因为它们能够处理多种类型的时空数据,处理缺失值,并提供计算效率高的参数估计程序. 然而,现有的张量因子分解 ...

  7. Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现

    Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09          自己平时看了一些论文, ...

  8. 论文笔记 《Selective Search for Object Recognition》

    论文笔记 <Selective Search for Object Recognition> 项目网址:http://koen.me/research/selectivesearch/ 一 ...

  9. cnn 句向量_深度学习目标检测Fast R-CNN论文解读

    前言 我们知道,R-CNN存在着以下几个问题: 分步骤进行,过程繁琐.Selective Search生成候选区域region proposal->fine tune预训练网络->针对每个 ...

最新文章

  1. 绘制简单的正太分布图
  2. 内存与存储之边界迎来变革
  3. Django搭建简易博客教程(四)-Models
  4. o型圈沟槽设计_深圳综合O型密封圈ID544.4MM*8.6MM报价-星湖蓝海科技
  5. 【Linux】Linux基本命令(一)
  6. 【BZOJ - 3036】绿豆蛙的归宿(概率DAG图dp,拓扑排序,概率dp,期望的线性性)
  7. WinForm中导出Excel
  8. Linux下autoconf与automake
  9. SetLayeredWindowAttributes 设置窗口透明
  10. 『编程题全队』Alpha 阶段冲刺博客集合
  11. 时间序列-BP神经网络及与auo arima的比较
  12. 【优化算法】白头鹰搜索优化算法(BES)【含Matlab源码 1381期】
  13. c++ win10下 遍历文件夹的方式, dirent.h头文件缺失问题
  14. 证件照如何弄蓝白渐变色背景
  15. 昆明市盘龙区打造铸牢中华民族共同体意识盘龙江示范带
  16. VS Code 修改字体 + 取消注释斜体 + 修改注释颜色
  17. javaSE探赜索隐之四<final与抽象类>
  18. c++文件保存与读取
  19. 学习大数据有推荐的么
  20. win10系统安装到服务器失败怎么解决,windows10安装失败怎么办?解决win10安装失败的方法教程[多图]...

热门文章

  1. 精简JavaScript
  2. Android 蓝牙开发——自动重连机制(十八)
  3. display-table制作表格
  4. 那些清华北大随便挑的高考状元们,后来都过上了怎样的生活?
  5. 改进蚁群算法 改进flod算法对路径进行双向平滑度优化,提高路径的平滑度
  6. wxpython中表格顶角怎么设置_wxpython编程之 grid(数据表格) | 学步园
  7. JVM参数-XXMatespaceSize的含义
  8. 注解@Value取值取不到问题
  9. 小蚁服务器维修期限,小蚁监控云服务器
  10. Scrum立会报告+燃尽图(Beta阶段第七次)