0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习的目标检测技术从R-CNN到R-CNN的算法和技术资料介绍

Dbwd_Imgtec 来源:未知 作者:易水寒 2018-08-26 10:23 次阅读

object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。object detection要解决的问题就是物体在哪里,是什么这整个流程的问题。然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。

object detection技术的演进:RCNN->SppNET->Fast-RCNN->Faster-RCNN

从图像识别的任务说起这里有一个图像任务:既要把图中的物体识别出来,又要用方框框出它的位置。

上面的任务用专业的说法就是:图像识别+定位图像识别(classification):输入:图片输出:物体的类别评估方法:准确率

定位(localization):输入:图片输出:方框在图片中的位置(x,y,w,h)评估方法:检测评价函数 intersection-over-union ( IOU )

卷积神经网络CNN已经帮我们完成了图像识别(判定是猫还是狗)的任务了,我们只需要添加一些额外的功能来完成定位任务即可。

定位的问题的解决思路有哪些?思路一:看做回归问题看做回归问题,我们需要预测出(x,y,w,h)四个参数的值,从而得出方框的位置。

步骤1:• 先解决简单问题, 搭一个识别图像的神经网络• 在AlexNet VGG GoogleLenet上fine-tuning一下

步骤2:• 在上述神经网络的尾部展开(也就说CNN前面保持不变,我们对CNN的结尾处作出改进:加了两个头:“分类头”和“回归头”)• 成为classification + regression模式

步骤3:• Regression那个部分用欧氏距离损失• 使用SGD训练

步骤4:• 预测阶段把2个头部拼上• 完成不同的功能

这里需要进行两次fine-tuning第一次在ALexNet上做,第二次将头部改成regression head,前面不变,做一次fine-tuning

Regression的部分加在哪?

有两种处理方法:• 加在最后一个卷积层后面(如VGG)• 加在最后一个全连接层后面(如R-CNN)

regression太难做了,应想方设法转换为classification问题。regression的训练参数收敛的时间要长得多,所以上面的网络采取了用classification的网络来计算出网络共同部分的连接权值。

思路二:取图像窗口• 还是刚才的classification + regression思路• 咱们取不同的大小的“框”• 让框出现在不同的位置,得出这个框的判定得分• 取得分最高的那个框

左上角的黑框:得分0.5

右上角的黑框:得分0.75

左下角的黑框:得分0.6

右下角的黑框:得分0.8

根据得分的高低,我们选择了右下角的黑框作为目标位置的预测。注:有的时候也会选择得分最高的两个框,然后取两框的交集作为最终的位置预测。

疑惑:框要取多大?取不同的框,依次从左上角扫到右下角。非常粗暴啊。

总结一下思路:对一张图片,用各种大小的框(遍历整张图片)将图片截取出来,输入到CNN,然后CNN会输出这个框的得分(classification)以及这个框图片对应的x,y,h,w(regression)。

这方法实在太耗时间了,做个优化。原来网络是这样的:

优化成这样:把全连接层改为卷积层,这样可以提提速。

物体检测(Object Detection)当图像有很多物体怎么办的?难度可是一下暴增啊。

那任务就变成了:多物体识别+定位多个物体那把这个任务看做分类问题?

看成分类问题有何不妥?• 你需要找很多位置, 给很多个不同大小的框• 你还需要对框内的图像分类• 当然, 如果你的GPU很强大, 恩, 那加油做吧…

看做classification, 有没有办法优化下?我可不想试那么多框那么多位置啊!有人想到一个好方法:找出可能含有物体的框(也就是候选框,比如选1000个候选框),这些框之间是可以互相重叠互相包含的,这样我们就可以避免暴力枚举的所有框了。

大牛们发明好多选定候选框的方法,比如EdgeBoxes和Selective Search。以下是各种选定候选框的方法的性能对比。

有一个很大的疑惑,提取候选框用到的算法“选择性搜索”到底怎么选出这些候选框的呢?那个就得好好看看它的论文了,这里就不介绍了。

R-CNN横空出世

基于以上的思路,RCNN的出现了。

步骤一:训练(或者下载)一个分类模型(比如AlexNet)

步骤二:对该模型做fine-tuning• 将分类数从1000改为20• 去掉最后一个全连接层

步骤三:特征提取• 提取图像的所有候选框(选择性搜索)• 对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将第五个池化层的输出(就是对候选框提取到的特征)存到硬盘

步骤四:训练一个SVM分类器(二分类)来判断这个候选框里物体的类别每个类别对应一个SVM,判断是不是属于这个类别,是就是positive,反之nagative比如下图,就是狗分类的SVM

步骤五:使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。

RCNN的进化中SPP Net的思想对其贡献很大,这里也简单介绍一下SPP Net。

SPP NetSPP:Spatial Pyramid Pooling(空间金字塔池化)它的特点有两个:

1.结合空间金字塔方法实现CNNs的对尺度输入。一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。SPP Net的第一个贡献就是将金字塔思想加入到CNN,实现了数据的多尺度输入。

如下图所示,在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。

2.只对原图提取一次卷积特征

在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框zaifeature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间,比R-CNN有一百倍左右的提速。

Fast R-CNNSPP Net真是个好方法,R-CNN的进阶版Fast R-CNN就是在RCNN的基础上采纳了SPP Net方法,对RCNN作了改进,使得性能进一步提高。

R-CNN与Fast RCNN的区别有哪些呢?先说RCNN的缺点:即使使用了selective search等预处理步骤来提取潜在的bounding box作为输入,但是RCNN仍会有严重的速度瓶颈,原因也很明显,就是计算机对所有region进行特征提取时会有重复计算,Fast-RCNN正是为了解决这个问题诞生的。

大牛提出了一个可以看做单层sppnet的网络层,叫做ROI Pooling,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量,而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。另外,之前RCNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast-RCNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,实际实验也证明,这两个任务能够共享卷积特征,并相互促进。Fast-RCNN很重要的一个贡献是成功的让人们看到了Region Proposal+CNN这一框架实时检测的希望,原来多类检测真的可以在保证准确率的同时提升处理速度,也为后来的Faster-RCNN做下了铺垫。

画一画重点:R-CNN有一些相当大的缺点(把这些缺点都改掉了,就成了Fast R-CNN)。大缺点:由于每一个候选框都要独自经过CNN,这使得花费的时间非常多。解决:共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征

原来的方法:许多候选框(比如两千个)-->CNN-->得到每个候选框的特征-->分类+回归现在的方法:一张完整图片-->CNN-->得到每张候选框的特征-->分类+回归

所以容易看见,Fast RCNN相对于RCNN的提速原因就在于:不过不像RCNN把每个候选区域给深度网络提特征,而是整张图提一次特征,再把候选框映射到conv5上,而SPP只需要计算一次特征,剩下的只需要在conv5层上操作就可以了。

在性能上提升也是相当明显的:

Faster R-CNNFast R-CNN存在的问题:存在瓶颈:选择性搜索,找出所有的候选框,这个也非常耗时。那我们能不能找出一个更加高效的方法来求出这些候选框呢?解决:加入一个提取边缘的神经网络,也就说找到候选框的工作也交给神经网络来做了。做这样的任务的神经网络叫做Region Proposal Network(RPN)。

具体做法:• 将RPN放在最后一个卷积层的后面• RPN直接训练得到候选区域

RPN简介:• 在feature map上滑动窗口• 建一个神经网络用于物体分类+框位置的回归• 滑动窗口的位置提供了物体的大体位置信息• 框的回归提供了框更精确的位置

一种网络,四个损失函数;• RPN calssification(anchor good.bad)• RPN regression(anchor->propoasal)• Fast R-CNN classification(over classes)• Fast R-CNN regression(proposal ->box)

速度对比

Faster R-CNN的主要贡献是设计了提取候选区域的网络RPN,代替了费时的选择性搜索,使得检测速度大幅提高。

最后总结一下各大算法的步骤:RCNN1. 在图像中确定约1000-2000个候选框 (使用选择性搜索)2. 每个候选框内图像块缩放至相同大小,并输入到CNN内进行特征提取3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类4. 对于属于某一特征的候选框,用回归器进一步调整其位置

Fast RCNN1. 在图像中确定约1000-2000个候选框 (使用选择性搜索)2. 对整张图片输进CNN,得到feature map3. 找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层4. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类5. 对于属于某一特征的候选框,用回归器进一步调整其位置

Faster RCNN1. 对整张图片输进CNN,得到feature map2. 卷积特征输入到RPN,得到候选框的特征信息3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类4. 对于属于某一特征的候选框,用回归器进一步调整其位置

总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标检测技术领域最主要的一个分支。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 目标检测
    +关注

    关注

    0

    文章

    185

    浏览量

    15446
  • 深度学习
    +关注

    关注

    73

    文章

    5218

    浏览量

    119859
  • cnn
    cnn
    +关注

    关注

    3

    文章

    326

    浏览量

    21289

原文标题:深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

文章出处:【微信号:Imgtec,微信公众号:Imagination Tech】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于深度学习目标检测算法解析

    本节主要将近年来基于候选区域的目标检测算法分为五个部分进行综述,首先介绍了Faster R-CNN[14]框架的发展历程,然后综述了对Faster
    发表于 01-09 10:52 907次阅读

    手把手教你使用LabVIEW实现Mask R-CNN图像实例分割(含源码)

    使用LabVIEW实现Mask R-CNN图像实例分割
    的头像 发表于 03-21 13:39 1373次阅读
    手把手教你使用LabVIEW实现Mask <b class='flag-5'>R-CNN</b>图像实例分割(含源码)

    基于YOLOX目标检测算法的改进

    ,基于 RCNN 改进的 Fast R-CNN、Faster R-CNN 等在检 测速度和精度上获得进一步提升,逐渐成为了目标检测的首选方法。R-C
    发表于 03-06 13:55

    深度卷积神经网络在目标检测中的进展

    深度卷积神经网络(DCNN)在图像分类和识别上取得了很显著的提高。回顾从2014到2016这两年多的时间,先后涌现出了R-CNN,Fast R-CNN, Faster R-CNN, I
    发表于 11-16 01:41 4977次阅读
    <b class='flag-5'>深度</b>卷积神经网络在<b class='flag-5'>目标</b><b class='flag-5'>检测</b>中的进展

    介绍目标检测工具Faster R-CNN,包括它的构造及实现原理

    在本篇文章中,公司的研究人员介绍了他们在研究过程中所使用的先进目标检测工具Faster R-CNN,包括它的构造及实现原理。
    的头像 发表于 01-27 11:49 1.8w次阅读
    <b class='flag-5'>介绍</b><b class='flag-5'>目标</b><b class='flag-5'>检测</b>工具Faster <b class='flag-5'>R-CNN</b>,包括它的构造及实现原理

    Mask R-CNN:自动从视频中制作目标物体的GIF动图

    深度学习模型——Mask R-CNN,自动从视频中制作目标物体的GIF动图。
    的头像 发表于 02-03 14:19 1.1w次阅读

    什么是Mask R-CNN?Mask R-CNN的工作原理

    它的概念很简单:对于每个目标对象,Faster R-CNN都有两个输出,一是分类标签,二是候选窗口;为了分割目标像素,我们可以在前两个输出的基础上增加第三个输出——指示对象在窗口中像素位置的二进制
    的头像 发表于 07-20 08:53 6.7w次阅读

    手把手教你操作Faster R-CNN和Mask R-CNN

    R-CNN又承继于R-CNN,因此,为了能让大家更好的理解基于CNN目标检测方法,我们从R-CNN
    的头像 发表于 04-04 16:32 1.3w次阅读

    基于改进Faster R-CNN目标检测方法

    为提高小尺度行人检测的准确性,提出一种基于改进 Faster r-CNN目标检测方法。通过引入基于双线性插值的对齐池化层,避免感兴趣区域池化过程中两次量化操作导致的位置偏差,同时设计
    发表于 03-23 14:52 3次下载
    基于改进Faster <b class='flag-5'>R-CNN</b>的<b class='flag-5'>目标</b><b class='flag-5'>检测</b>方法

    基于Mask R-CNN的遥感图像处理技术综述

    遙感技术的发展使得遥感影像被应用于农业、军事等诸多领域,而深度学习方法的融入使得该项技术目标检测
    发表于 05-08 16:39 3次下载

    用于实例分割的Mask R-CNN框架

    我们的方法称为 Mask R-CNN,扩展了 Faster RCNN ,方法是在每个感兴趣区域 (RoI) 上添加一个用于预测分割掩码的分支,与用于分类和边界框回归的现有分支并行(图 1)。掩码分支
    的头像 发表于 04-13 10:40 2182次阅读

    深度学习目标检测中的应用

    R-CNN 算法在 2014 年提出,可以说是历史性的算法,将深度学习应用于目标
    的头像 发表于 10-31 10:08 1201次阅读

    深入了解目标检测深度学习算法技术细节

    本文将讨论目标检测的基本方法(穷尽搜索、R-CNN、Fast R-CNN和Faster R-CNN),并尝试理解每个模型的
    发表于 01-05 16:27 243次阅读

    PyTorch教程14.8之基于区域的CNN(R-CNN)

    电子发烧友网站提供《PyTorch教程14.8之基于区域的CNN(R-CNN).pdf》资料免费下载
    发表于 06-05 11:09 0次下载
    PyTorch教程14.8之基于区域的<b class='flag-5'>CNN</b>(<b class='flag-5'>R-CNN</b>)

    PyTorch教程-14.8。基于区域的 CNN (R-CNN)

    Studio 实验室在 SageMaker Studio Lab 中打开笔记本 除了第 14.7 节中描述的单次多框检测之外,基于区域的 CNN 或具有 CNN 特征的区域 (R-CNN
    的头像 发表于 06-05 15:44 370次阅读
    PyTorch教程-14.8。基于区域的 <b class='flag-5'>CNN</b> (<b class='flag-5'>R-CNN</b>)