Fast R-CNN(理解)

0 - 背景

  经典的R-CNN存在以下几个问题:

  • 训练分多步骤(先在分类数据集上预训练,再进行fine-tune训练,然后再针对每个类别都训练一个线性SVM分类器,最后再用regressors对bounding box进行回归,并且bounding box还需要通过selective search生成)
  • 时间和空间开销大(在训练SVM和回归的时候需要用网络训练的特征作为输入,特征保存在磁盘上再读入的时间开销较大)
  • 测试比较慢(每张图片的每个region proposal都要做卷积,重复操作太多)

  在Fast RCNN之前提出过SPPnet来解决R-CNN中重复卷积问题,但SPPnet仍然存在与R-CNN类似的缺陷:

  • 训练分多步骤(需要SVM分类器,额外的regressors)
  • 空间开销大

  因此,该文提出的Fast RCNN便是解决上述不足,在保证效果的同时提高效率。基于VGG16的Fast RCNN模型在训练速度上比R-CNN快大约9倍,比SPPnet快大约3倍;测试速度比R-CNN快大约213倍,比SPPnet快大约10倍,在VOC2012数据集上的mAP大约为66%。

1 - 整体思路

1.1 - 训练

  • 输入是$224 \times 224$的固定大小图片
  • 经过5个卷积层+2个降采样层(分别跟在第一和第二个卷积层后面)
  • 进入ROIPooling层(其输入是conv5层的输出和region proposal,region proposal个数大约为2000个)
  • 再经过两个output都为4096维的全连接层
  • 分别经过output各为21和84维的全连接层(并列的,前者是分类输出,后者是回归输出)
  • 最后接上两个损失层(分类是softmax,回归是smoothL1)

  fast R-CNN模型的流程图如下:

        

1.1.1 - ROIPooling

  由于region proposal的尺度各不相同,而期望提取出来的特征向量维度相同,因此需要某种特殊的技术来做保证。ROIPooling的提出便是为了解决这一问题的。其思路如下:

  • 将region proposal划分为$H \times W$大小的网格
  • 对每一个网格做MaxPooling(即每一个网格对应一个输出值)
  • 将所有输出值组合起来便形成固定大小为$H \times W$的feature map
1.1.2 - 训练样本

  训练过程中每个mini-batch包含2张图像和128个region proposal(即ROI,64个ROI/张),其中大约25%的ROI和ground truth的IOU值大于0.5(即正样本),且只通过随机水平翻转进行数据增强。

1.1.3 - 损失函数

  多损失融合(分类损失和回归损失融合),分类采用log loss(即对真实分类的概率取负log,分类输出K+1维),回归的loss和R-CNN基本一样。

  总的损失函数如下:

$$L(p,u,t^u,v)=L_{cls}(p,u)+\lambda [u\geqslant 1]L_{loc}(t^u,v)$$

  分类损失函数如下:

$$L_{cls}(p,u)=-log\ p_u$$

  回归损失函数如下:

$$L_{loc}(t^u,v)=\sum_{i\epsilon \{x,y,w,h\}}smooth_{L_1}(t_i^u-v_i)$$

  其中有:

$$smooth_{L_1}(x)=\left\{\begin{matrix}0.5x^2\ \ \ \ \ \ if\ |x|< 1\\|x|-0.5\ \ otherwise\end{matrix}\right.$$

1.1.4 - 改进全连接层

  由于卷积层计算针对的是一整张图片,而全连接层需要对每一个region proposal都作用一次,所以全连接层的计算占网络计算的将近一半(如下图)。作者采用SVD来简化全连接层计算。

        

1.1.5 - 训练整体架构总结

  图片引用自博客

    

1.2 - 测试

1.2.1 - 测试整体架构总结

  图片引用自博客

    

2 - 思考

2.1 - 改进

  • 卷积不再是重复对每一个region proposal,而是对于整张图像先提取了泛化特征,这样子减少了大量的计算量(注意到,R-CNN中对于每一个region proposal做卷积会有很多重复计算)
  • ROIPooling的提出,巧妙的解决了尺度放缩的问题
  • 将regressor放进网络一起训练,同时用softmax代替SVM分类器,更加简单高效

2.2 - 不足

  region proposal的提取仍然采用selective search,整个检测流程时间大多消耗在这上面(生成region proposal大约2~3s,而特征提取+分类只需要0.32s),之后的Faster RCNN的改进之一便是此点。

3 - 结果

3.1 - mAP

  FRCN相比其他算法表现更好,且注意到,VOC12由于数据集更大而使得模型效果提高很多。(这一角度也说明了数据对于当前深度学习的重要性不容忽视!)

3.2 - 速度

          

3.3 - 多任务训练(multi-task)

  由于本文提出的模型是基于R-CNN通过multi-task训练方式进行改进的,因此要说明multi-task的有效性。一共分为S/M/L三组,每组对应四列,分别为:

  • 仅采用分类训练,测试也没有回归
  • 采用论文中的分类+回归训练,测试没有回归
  • 采用分段训练,测试没有回归
  • 采用论文中的分类+回归训练,测试有回归

3.4 - 单尺度vs多尺度

  多尺度表示输入图像采用多种尺度输入,在测试的时候发现多尺度虽然能在mAP上得到些许提升但也增加了时间开销(作者给出原因:深度卷积网络可以学习尺度不变性)。

          

4 - 参考资料

https://blog.csdn.net/u014380165/article/details/72851319

原文地址:https://www.cnblogs.com/CZiFan/p/9903518.html

时间: 2024-11-10 11:48:52

Fast R-CNN(理解)的相关文章

CNN理解与实现

CNN理解与实现 组成部分 Convolution Layer Pool Layer: Max-pooling layer Average-pooling layer Full Connected(FC) Layer 需要的函数 注意 参数\(W\), \(b\)和数据\(X\)它们的维度是一样的, 这个非常重要, 在使用代码实现的时候不至于搞懵; 如果\(X\)是RGB图像, 它的维度假设为\((100, 24, 24, 3)\), 100表示样本数量, 24与24位图像的高与宽(我们人类习惯

R函数理解整理

R语言melt/cast.一个图搞定数据整合和拆分 ? ? R语言数据处理方法~小结(转) ? ? 来自 <https://www.cnblogs.com/payton/articles/5986496.html> 文章目录 1. R自带函数 2. reshape2数据重构 3. dplyr 4. tidyr 5. 字符串处理 1. R自带函数 1.1 转置 使用函数t()可对一个矩阵或数据框进行转置,对于数据框,行名将变成变量(列)名. 数列array进行维度转换 aperm 1.2 整合数

基于pytorch的CNN、LSTM神经网络模型调参小结

(Demo) 这是最近两个月来的一个小总结,实现的demo已经上传github,里面包含了CNN.LSTM.BiLSTM.GRU以及CNN与LSTM.BiLSTM的结合还有多层多通道CNN.LSTM.BiLSTM等多个神经网络模型的的实现.这篇文章总结一下最近一段时间遇到的问题.处理方法和相关策略,以及经验(其实并没有什么经验)等,白菜一枚. Demo Site:  https://github.com/bamtercelboo/cnn-lstm-bilstm-deepcnn-clstm-in-

《R in Nutshell》 读书笔记(连载)

R in Nutshell 前言 例子(nutshell包) 本书中的例子包括在nutshell的R包中,使用数据,需加载nutshell包 install.packages("nutshell") 第一部分:基础 第一章 批处理(Batch Mode) R provides a way to run a large set of commands in sequence and save the results to a file. 以batch mode运行R的一种方式是:使用系统

对RESTful Web API的理解与设计思路

距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很稳定了,所以我打算写篇总结,并在最近这段时间里提供一个ASP.net Web API的综合例子. 对四个HTTP方法的理解 众所周知,HTTP有四个方法,GET.POST.PUT和DELETE,分别对应数据库的SELECT.INSERT.UPDATE和DELETE,一般的教程说到这里也就Over了,

Webserver-HTTP项目(深入理解HTTP协议)

# HTTP项目实战- 深入理解HTTP协议- 模拟后台服务程序基本流程和大致框架- 每一个步骤一个文件夹- 图解http协议, 图解tcp/ip协议 # v01-验证技术- 验证socket-tcp技术,看能否走通流程- 使用浏览器发送消息,访问地址 # V02-解析传入http协议- 根据http协议格式,逐行读取信息- 按行读取后的信息,需要进行拆解, # 推荐书籍- 日本人写的 "图解Http" - 图解系列严重推荐 # v03-http协议封装返回内容- 返回头: "

4、R进行数据分析

R进行数据分析 1. 排序 sort(x, decreasing = ): 返回排序好的数据 order(x, decreasing = ): 返回排序好的数据的索引 例子: v = c(2, 9, 1, 45, -3, 19, -5, 6) sort(v) # returns ordered v in decreasing order 结果: # [1] -5 -3 1 2 6 9 19 45 sort(v, decreasing = FALSE) # orders v in increasi

awesome scene text

awesome scene text scene text recognition  scene text spotter  scene text detection Awesome Scene text IncepText: A New Inception-Text Module with Deformable PSROI Pooling for Multi-Oriented Scene Text Detection mutli-oriented text Abstract Incidenta

关于微信小程序的尺寸关系

在微信小程序开发中,大家尽量使用rpx为单位, px实际上就是系统级的rem(把页面按比例分割750份,1rpx=window.innerWidth/750),或者scale伸缩布局的width=750.也就是说,微信小程序的rpx布局帮大家把rem布局的js设置根元素字体尺寸这步省了,用rpx就减少了媒体查询的那些步骤 通过rpx,大家只需要根据750的设计稿写代码即可,不必担心它在各个平台的适配情况, rem的优势:rem是淘宝移动web端就是采用此方案,其中r可以理解成root,不同的页面