专栏首页Urlteam目标检测领域笔记一:四种算法入门与优缺对比

目标检测领域笔记一:四种算法入门与优缺对比

RCNN-> SPP net -> Fast RCNN -> Faster RCNN

本文,简述了从RCNN到Faster RCNN,四种目标检测算法的原理以及算法逐步优化的思路。

R-CNN (Region-based CNN features)

性能:RCNN在VOC2007上的mAP是58%左右。

简述:R-CNN要完成目标定位,其流程主要分为四步:

  • 0:输入图像,
  • 1:利用选择性搜索(Selective Search)这样的区域生成算法提取Region Proposal 提案区域(2000个左右)
  • 2:将每个Region Proposal分别resize(因为训练好的CNN输入是固定的)后(也即下图中的warped region,文章中是归一化为227×227)作为CNN网络的输入。
  • 3:CNN网络提取到经过resize的region proposal的特征送入每一类的SVM分类器,判断是否属于该类。

RCNN的缺点:

  • 1:对于提取的每个Region Proposal,多数都是互相重叠,重叠部分会被多次重复提取feature),都要分别进行CNN前向传播一次(相当于进行了2000吃提特征和SVM分类的过程),计算量较大,。
  • 2:CNN的模型确定的情况下只能接受固定大小的输入(也即wraped region的大小固定)

优化思路:

  • 既然所有的Region Proposal都在输入图像中,与其提取后分别作为CNN的输入,为什么不考虑将带有Region Proposal的原图像直接作为CNN的输入呢?原图像在经过CNN的卷积层得到feature map,原图像中的Region Proposal经过特征映射(也即CNN的卷积下采样等操作)也与feature map中的一块儿区域相对应。

SPP net

简述:SPP net中Region Proposal仍然是在原始输入图像中选取的,不过是通过CNN映射到了feature map中的一片区域。

Spp-net的主要思想是:

  • 1:对卷积层的feature map上的Region Proposal映射区域分别划分成1×1,2×2,4×4的窗口(window),
  • 2:在每个窗口内做max pooling,这样对于一个卷积核产生的feature map,就可以由SPP得到一个(1×1+2×2+4×4)维的特征向量。
  • 论文中采用的网络结构最后一层卷积层共有256个卷积核,所以最后会得到一个固定维度的特征向量(1×1+2×2+4×4)×256维),并用此特征向量作为全连接层的输入后做分类。

相对于R-CNN,SPP-net的优势是:

  • 1:使用原始图像作为CNN网络的输入来计算feature map(R-CNN中是每个Region Proposal都要经历一次CNN计算),大大减少了计算量。
  • 2:R-cnn要resize,易于失真,
  • 3:而SPP-net 不需要,原因是,SPP net中Region Proposal仍然是通过选择性搜索等算法在输入图像中生成的,通过映射的方式得到feature map中对应的区域,并对Region Proposal在feature map中对应区域做空间金字塔池化。通过空间金字塔池化操作,对于任意尺寸的候选区域,经过SPP后都会得到固定长度的特征向量。

SPP-net缺点是:

  • 1: 训练分多个阶段,步骤繁琐(微调网络+训练SVM+训练边框回归器)
  • 2: SPP net在微调网络的时候固定了卷积层,只对全连接层进行微调

fast R-CNN

性能:在VOC2007上的mAP也提高到了68%

其效果是;

  • 1.:比R-CNN和SPP net更高的检测精度(mAP)
  • 2:训练过程是端到端的(Sigle-stage),并使用了一个多任务的损失函数(也即将边框回归直接加入到CNN网络中后,Fast R-CNN网络的损失函数包含了Softmax的损失和Regressor的损失)
  • 3. 训练过程可以更新所有的网络层;

优化处是:

  • Fast R-CNN引入了RoI 池化层(相当于是一层SPP),对于图像中的Region Poposal(也即RoI),通过映射关系(图中的RoI projection)可以得到feature map中Region Proposal对应的区域。
  • RoI Pooling层的操作是将feature map上的RoI区域划分为7×7的窗口,在每个窗口内进行max pooling,然后得到(7×7)×256的输出,最后连接到全连接层得到固定长度的RoI特征向量。
  • 前面得到的RoI特征向量再通过全连接层作为Softmax和Regressor的输入。

小结:

在前面三种目标检测框架中(R-CNN,SPP net,Fast R-CNN),Region Proposal都是通过区域生成的算法(选择性搜索等)在原始输入图像中产生的,不过在SPP net及Fast R-CNN中都是输入图像中的Region Proposal通过映射关系映射到CNN中feature map上再操作的。Fast R-CNN中RoI池化的对象是输入图像中产生的proposal在feature map上的映射区域

Faster R-CNN

性能:Fater-RCNN速度更快了,而且用VGG net作为feature extractor时在VOC2007上mAP能到73%。

优化处:

  • Faster R-CNN相比于Fast R-CNN做的改进则是利用RPN来产生候选区域(也即通过RPN产生的Region Proposal映射到feature map中再作为RoI池化层的输入
  • RPN网络产生Region Proposal的方式是在feature map中采用滑动窗口的方式在每个滑动位置上产生大小及长宽比不同的9个锚点框(其实就是在原始输入图像上)。3×3的滑动窗口对应的每个特征区域同时预测输入图像3种尺度3种长宽比的Region Proposal,这种映射机制称为anchor。
  • 详细点说就是这个RPN由两部分构成:一个卷积层,一对全连接层分别输出分类结果(cls layer)以及 坐标回归结果(reg layer)。卷积层:stride为1,卷积核大小为3*3,输出256张特征图(这一层实际参数为3*3*256*256)。相当于一个sliding window 探索输入特征图的每一个3*3的区域位置。当这个13*13*256特征图输入到RPN网络以后,通过卷积层得到13*13个 256特征图。也就是169个256维的特征向量,每一个对应一个3*3的区域位置,每一个位置提供9个anchor。于是,对于每一个256维的特征,经过一对 全连接网络(也可以是1*1的卷积核的卷积网络),一个输出 前景还是背景的输出2D;另一个输出回归的坐标信息(x,y,w, h,4*9D,但实际上是一个处理过的坐标位置)。于是,在这9个位置附近求到了一个真实的候选位置。

简述:

  • Fater-RCNN中的region proposal netwrok实质是一个Fast-RCNN,这个Fast-RCNN输入的region proposal的是固定的(把一张图片划分成n*n个区域,每个区域给出9个不同ratio和scale的proposal),
  • 输出的是对输入的固定proposal是属于背景还是前景的判断和对齐位置的修正(regression)。
  • Region proposal network的输出再输入第二个Fast-RCNN做更精细的分类和Boundingbox的位置修正

如下图:

五种主流算法对比:

原创文章,转载请注明: 转载自URl-team

本文链接地址: 目标检测领域笔记一:四种算法入门与优缺对比

No related posts.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SCRAPY学习笔记九 增量爬取url 使用 yield 的用法

    在scrapy中parse部分经常要实现继续爬去下面的页面需要使用到给request 增加新的url请求。要用到yield。但是非常难理解。这里做一个总结,尝试...

    十四君
  • linux下free查看内存命令详细解析

    最近经常因为服务器的内存不足导致网站崩溃,现在采用swap稍微好些,不过为了增强性能,还是来学习一下free内存查看命令的分析方式吧。

    十四君
  • apache2的几个核心设置优化

    毕竟服务器的内存比较小,经常容易出现内存不足导致数据库退出等bug,so,除了设置swap缓冲区,最好的莫过于换成轻量级的服务器nginx,在那之前一些apac...

    十四君
  • Java 常见的垃圾回收器

    垃圾回收器 (GC, Garbage Collector)是和具体的 JVM 实现紧密相关。

    王小明_HIT
  • 震惊!你在 Java 中所理解的 volatile 在 C++ 中可能是错的?

    近期看到 C++ 标准中对 volatile 关键字的定义,发现和 java 的 volatile 关键字完全不一样,C++ 的 volatile 对并发编程基...

    字节流动
  • Windows Server服务器开启/禁用Ping的设置方法

    2. 点击 入站规则,找到 回显请求-ICMPv4-In (Echo Request – ICMPv4-In)

    德顺
  • Centos7.2学习记录(5)——CentOS系统在不重启的情况下为虚拟机添加新硬盘

    版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/huq...

    胡了了
  • Linux 不重启扫描存储磁盘

    我们在配置存储的时候,需要刷新磁盘管理才能扫描出硬盘,Windows即点即用,那么Linux下,一般情况必须要重启才可以识别映射的磁盘,如何在不重启的情况下识别...

    Mr.Mao Notes
  • 绕过Edge、Chrome和Safari的内容安全策略

    概述 ---- Web应用中有许多基本的安全机制,其中一个是同源(same-origin)策略机制,该机制规定了应用程序代码可以访问的资源范围。同源策略的...

    奶糖味的代言
  • 2017互联网女皇报告中文完整版来了!

    腾讯科技全网独家汉化制作报告完整中文版并首发。 以下为报告要点: 全球互联网用户数已超34亿,同比增长10%,互联网全球渗透率达到46%。 其中,印度互联网用...

    小莹莹

扫码关注云+社区

领取腾讯云代金券