博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【论文整理】:R-CNN、fast R-CNN、faster R-CNN三者的整理
阅读量:3906 次
发布时间:2019-05-23

本文共 3728 字,大约阅读时间需要 12 分钟。

看了《基于特征共享的高效物体检测》论文后,为加强理解,网上找了关于R-CNN、Fast R-CNN、Faster R-CNN三篇论文的详解,现在先将三者的问题、创新点以及待改进的地方做一个表格,方便自己以后复习查阅。

参考:

对于这三篇论文的详解,网上有很多,个人特别喜欢是这个博主(WoPawn)写的文章。这三篇详解,写得太赞了,这里膜拜一下大佬,。

三个框架的整理:

\ R-CNN Fast R-CNN Faster R-CNN
针对的问题 1.近10年以来,以人工经验特征为主导的物体检测任务mAP【物体类别和位置的平均精度】提升缓慢
2.随着ReLu激励函数、dropout正则化手段和大规模图像样本集ILSVRC的出现,在2012年ImageNet大规模视觉识别挑战赛中,Hinton及他的学生采用CNN特征获得了最高的图像识别精确度;
3.上述比赛后,引发了一股“是否可以采用CNN特征来提高当前一直停滞不前的物体检测准确率“的热潮
1.R-CNN网络训练、测试速度都很慢;R-CNN网络中,一张图经由selective search算法提取约2k个建议框【这2k个建议框大量重叠】,而所有建议框变形后都要输入AlexNet CNN网络提取特征【即约2k次特征提取】,会出现上述重叠区域多次重复提取特征,提取特征操作冗余;
2.R-CNN网络训练、测试繁琐 ;R-CNN网络训练过程分为ILSVRC 2012样本下有监督预训练、PASCAL VOC 2007该特定样本下的微调、20类即20个SVM分类器训练、20类即20个Bounding-box 回归器训练,该训练流程繁琐复杂;同理测试过程也包括提取建议框、提取CNN特征、SVM分类和Bounding-box 回归等步骤,过于繁琐;
3.R-CNN网络训练需要大量存储空间;20类即20个SVM分类器和20类即20个Bounding-box 回归器在训练过程中需要大量特征作为训练样本,这部分从CNN提取的特征会占用大量存储空间;
4.R-CNN需要进行形变操作的问题在Fast R-CNN已经不存在;R-CNN网络需要对建议框进行形变操作后【形变为227×227 size】再输入CNN网络提取特征,其实像AlexNet CNN等网络在提取特征过程中对图像的大小并无要求,只是在提取完特征进行全连接操作的时候才需要固定特征尺寸【R-CNN中将输入图像形变为227×227可正好满足AlexNet CNN网络最后的特征尺寸要求】,然后才使用SVM分类器分类,
1.继Fast R-CNN后,在CPU上实现的区域建议算法Selective Search【2s/image】、EdgeBoxes【0.2s/image】等成了物体检测速度提升上的最大瓶颈
创新点 1.采用CNN网络提取图像特征,从经验驱动的人造特征范式HOG、SIFT到数据驱动的表示学习范式,提高特征对样本的表示能力;
2.采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。
1.规避R-CNN中冗余的特征提取操作,只对整张图像全区域进行一次特征提取
2.用RoI pooling层取代最后一层max pooling层,同时引入建议框信息,提取相应建议框特征;
3.Fast R-CNN网络末尾采用并行的不同的全连接层,可同时输出分类结果和窗口回归结果,实现了end-to-end的多任务训练【建议框提取除外】,也不需要额外特征存储空间【R-CNN中这部分特征是供SVM和Bounding-box regression进行训练的】;
4.采用SVD对Fast R-CNN网络末尾并行的全连接层进行分解,减少计算复杂度,加快检测速度。
1.设计Region Proposal Networks【RPN】,利用CNN卷积操作后的特征图生成region proposals,代替了Selective Search、EdgeBoxes等方法,速度上提升明显;
2.训练Region Proposal Networks与检测网络【Fast R-CNN】共享卷积层,大幅提高网络的检测速度。
不足 1.最大的缺点是对一张图片的处理速度慢,这是由于一张图片中由selective search算法得出的约2k个建议框都需要经过变形处理后由CNN前向网络计算一次特征,这其中涵盖了对一张图片中多个重复区域的重复计算,很累赘;
2.知乎上有人说R-CNN网络需要两次CNN前向计算,第一次得到建议框特征给SVM分类识别,第二次对非极大值抑制后的建议框再次进行CNN前向计算获得Pool5特征,以便对建议框进行回归得到更精确的bounding-box,这里文中并没有说是怎么做的,博主认为也可能在计算2k个建议框的CNN特征时,在硬盘上保留了2k个建议框的Pool5特征,虽然这样做只需要一次CNN前向网络运算,但是耗费大量磁盘空间
3.训练时间长,虽然文中没有明确指出具体训练时间,但由于采用RoI-centric sampling【从所有图片的所有建议框中均匀取样】进行训练,那么每次都需要计算不同图片中不同建议框CNN特征,无法共享同一张图的CNN特征,训练速度很慢;
4.整个测试过程很复杂,要先提取建议框,之后提取每个建议框CNN特征,再用SVM分类,做非极大值抑制,最后做bounding-box回归才能得到图片中物体的种类以及位置信息;同样训练过程也很复杂,ILSVRC 2012上预训练CNN,PASCAL VOC 2007上微调CNN,做20类SVM分类器的训练和20类bounding-box回归器的训练;这些不连续过程必然涉及到特征存储、浪费磁盘空间等问题。
1.Fast R-CNN中采用selective search算法提取候选区域,而目标检测大多数时间都消耗在这里【selective search算法候选区域提取需要2~3s,而提特征分类只需要0.32s】,这无法满足实时应用需求,而且Fast R-CNN并没有实现真正意义上的端到端训练模式【候选区域是使用selective search算法先提取出来的】; 1.采用VGG-16模型,可以达到5fps,这个速度并没有完全达到实时性,还有继续提升的空间,这将在YOLO模型中得以改进。

算法流程:

R-CNN

在这里插入图片描述

  1. 输入一张多目标图像,采用 selective search 算法提取约2000个建议框;
  2. 先在每个建议框周围加上16个像素值为建议框像素平均值的边框,再直接变形为227×227的大小;
  3. 先将所有建议框像素减去该建议框像素平均值后【预处理操作】,再依次将每个227×227的建议框输入AlexNet CNN网络获取4096维的特征【比以前的人工经验特征低两个数量级】,2000个建议框的CNN特征组合成2000×4096维矩阵;
  4. 将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘【20种分类,SVM是二分类器,则有20个SVM】,获得2000×20维矩阵表示每个建议框是某个物体类别的得分;
  5. 分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框;
  6. 分别用20个回归器对上述20个类别中剩余的建议框进行回归操作,最终得到每个类别的修正后的得分最高的bounding box

Fast R-CNN

在这里插入图片描述

  1. 任意size图片输入CNN网络,经过若干卷积层与池化层,得到特征图
  2. 在任意size图片上采用 selective search 算法提取约2k个建议框;
  3. 根据原图中建议框到特征图映射关系,在特征图中找到每个建议框对应的特征框【深度和特征图一致】,并在RoI池化层中将每个特征框池化到H×W【VGG-16网络是7×7】的size;
  4. 固定H×W【VGG-16网络是7×7】大小的特征框经过全连接层得到固定大小的特征向量;
  5. 第4步所得特征向量经由各自的全连接层【由SVD分解实现】,分别得到两个输出向量:一个是softmax的分类得分,一个是Bounding-box窗口回归
  6. 利用窗口得分分别对每一类物体进行非极大值抑制剔除重叠建议框,最终得到每个类别中回归修正后的得分最高的窗口。

Faster R-CNN

在这里插入图片描述

  1. 首先向CNN网络【ZF或VGG-16】输入任意大小图片
  2. 经过CNN网络前向传播至最后共享的卷积层,一方面得到供RPN网络输入的特征图,另一方面继续前向传播至特有卷积层,产生更高维特征图
  3. 供RPN网络输入的特征图经过RPN网络得到区域建议和区域得分,并对区域得分采用非极大值抑制【阈值为0.7】,输出其Top-N【文中为300】得分的区域建议给RoI池化层
  4. 第2步得到的高维特征图和第3步输出的区域建议同时输入RoI池化层,提取对应区域建议的特征;
  5. 第4步得到的区域建议特征通过全连接层后,输出该区域的分类得分以及回归后的bounding-box。

:关于这三个框架的详细介绍和实验解决过程,请移步上面的参考博客。

转载地址:http://ajxen.baihongyu.com/

你可能感兴趣的文章
【每日一算】两数之和
查看>>
深入理解Mysql索引底层数据结构与算法
查看>>
B+tree结构详解
查看>>
B+树算法在mysql中能存多少行数据?
查看>>
分割tomcat下catalina.out文件
查看>>
【Docker】centos7安装/卸载docker并配置镜像加速
查看>>
【Docker-2】Docker组成和原理
查看>>
【vue学习】—axios
查看>>
【vue学习】—基础语法(插值操作、属性绑定、计算属性)
查看>>
【vue学习】— 事件监听
查看>>
【vue学习】—条件判断、循环遍历
查看>>
【vue学习】—表单绑定(v-model)
查看>>
【vue学习】—组件化开发
查看>>
【vue学习】—slot插槽的使用
查看>>
【vue学习】—前端模块化
查看>>
ClassNotFoundException:ch/qos/logback/core/util/OptionHelper
查看>>
工厂模式
查看>>
SpringBoot(1)—启动原理之SpringApplication对象的创建
查看>>
SpringBoot(2)—启动原理之run方法的运行
查看>>
SpringBoot(3)— 事件监听机制
查看>>