Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)

目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)

作者头像
Minerva
修改于 2020-05-31 05:10:29
修改于 2020-05-31 05:10:29
1.2K0
举报

目标检测系列之二(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN)

内容目录

1 R-CNN1.1 候选框提取1.2 特征向量提取1.3 SVM分类1.4 候选框修正1.5 R-CNN的缺点2 Fast R-CNN2.1 RoI Pooling Layer2.2 Multi-task loss3 Faster R-CNN3.1 RPN(Region Proposal Networks)3.2 Bounding Box Regression4 Mask R-CNN4.1 FPN(Feature Pyramid Network)4.2 RoI Align4.3 Mask Branch

1 R-CNN

论文的题目是 《Rich feature hierarchies for accurate object detection and semantic segmentation》 论文地址:https://arxiv.org/abs/1311.2524 R-CNN的结构就是Selective Search + CNN + SVM,算法流程: 1) 用Selective Search提取出2000个候选框(Region Proposal) 2) 用去掉Softmax的AlexNet网络提取特征 3) 用K(目标类个数)个SVM分类器进行训练,对前面的候选框进行测试得到每个候选框属于某一类的概率值 4) 用NMS对每个类别的候选框进行处理,删掉冗余的一些候选框 5) 对剩余的候选框进行Bounding Box回归,修正候选框的位置。

1.1 候选框提取

选择性搜索对输入图像进行分割产生很多小区域(2000个),根据这些小区域的相似性(颜色、纹理、大小等)采用子区域合并的方法进行区域迭代合并,生成外切矩形,也就是候选框。

1.2 特征向量提取

作者使用模型AlexNet(之前的文章介绍过这个模型, 深度学习系列(二)卷积神经网络模型(从LeNet-5到Inception V4))来提取候选框的特征向量,这里AlexNet的输入大小为227x227,而我们第一步提取的候选框大小不一,作者直接暴力的将所有候选框缩放到227x227。 网络的训练过程分为两步: 1) 基于ImageNet的图像分类训练,输出为1000维向量 2) 采用训练好的AlexNet模型在PASCAL VOC2017样本集下进行微调训练,输出为21维向量(20个目标类和1个背景)

1.3 SVM分类

对第二步提取的特征向量(AlexNet去除最后一个全连接层之后的输出,每个候选框为4096维特征),采用SVM分类器进行分类,得到类别得分。 1) 对每个类别分别训练SVM得到20个SVM模型,得到2000×20维矩阵,表示每个候选框属于某个类别的概率 2) 对2000×20维矩阵中每列进行NMS非极大值抑制,去除重叠的候选框,得到每类得分最高的一些候选框。 这里SVM训练过程的正样本为Ground Truth真实目标,负样本为与Ground Truth相交IOU小于0.3的候选框。

1.4 候选框修正

使用一个回归器对候选框进行边界修正,输入为AlexNet网络的4096维特征向量,输出为x、y方向缩放和平移,这里的样本为与Ground Truth相交IOU大于0.6的候选框,注意在测试时同样需要回归器进行训练。

1.5 R-CNN的缺点

两个字:耗时。不论是选择性搜索部分,还是CNN提取特征部分,以及SVM分类和边框回归修正,都非常耗时,在后面的模型(Fast RCNN)提出之后,可以解决R-CNN的大部分问题。

2 Fast R-CNN

论文的题目是 《Fast R-CNN》,论文地址:https://arxiv.org/abs/1504.08083。 考虑到R-CNN耗时的问题,Fast R-CNN被提出来,基于VGG16的Fast R-CNN在训练速度上比R-CNN快9倍,测试速度快了200多倍,思路如下: 1) 首先采用Selective Search提取2000个候选框ROI 2) 将整个图像作为输入,使用卷积神经网络进行特征提取 3) 使用一个RoI Pooling Layer提取每个候选框的特征 4) 分别经过并列的21维(用于分类)和84维(用于回归)的全连接层,得到每个候选框的类别和边界框(四个代表坐标的值)。

2.1 RoI Pooling Layer

RoI Pooling Layer 的作用是针对不同大小的候选框,经过卷积神经网络要输出固定大小的特征,是SPP层的简化版,SPP采用不同大小的金字塔映射,采用多个尺度(1x1,2x2,4x4)的池化层进行池化操作,可以得到21维(4x4+2x2+1x1=21)的特征向量。而RoI Pooling Layer只采用单一尺度进行池化(4x4),得到16维(4x4)的特征向量,这样网络对输入图像的尺寸不再有限制,之后将特征向量输入全连接层。 在实际训练中,每张图像有64个RoI,从中挑选出与Groun Truth的IOU值都大于0.5约25%的RoI,并采用随机翻转增加数据集,而测试的时候每张图像会产生2000多个RoI。

2.2 Multi-task loss

损失函数是将分类和回归的Loss整合在一起,分类任务采用Softmax来代替SVM分类器,输出类别数+背景类结果,Softmax引入了类间竞争分类效果优于SVM,回归损失输出的是4xN类别,这里的4表示候选框的中心坐标、宽、高。 Fast R-CNN尽管速度和精度上都有很大提升,但是仍然没有没有解决候选框同步提取的问题,无法做到端到端(end-to-end)的目标检测,这也是后续Faster R-CNN改进的方向之一。

3 Faster R-CNN

论文题目是《aster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》 论文地址:https://arxiv.org/abs/1506.01497。 Faster R-CNN创造性的采用卷积神经网络(基于VGG16)自动产生候选框,并且和目标检测网络共享卷积,大大减少了冗余的候选框,将候选框数量从2000降低到300个,候选框的质量也有所提高,其思路如下: 1) 将整张图像reshape后输入卷积神经网络进行特征提取 2) 用RPN结构生成一系列anchor box,在对box进行裁剪后通过Softmax来判断这些anchor box属于前景目标(foreground)还是背景(background) 3) 用bounding box regression来修正anchor box 4) 通过RoI Pooling Layer提取每个候选框的特征 5) 分别利用Softmax Loss(用于分类)和Smooth L1 Loss(用于回归)对分类概率和边框回归进行联合训练。

3.1 RPN(Region Proposal Networks)

RPN用于生成候选区域,通过Softmax判断anchors属于正例还是负例,再利用bounding box 回归来修正anchors获得更精确的候选框。

Faster R-CNN抛弃了之前的选择性搜索方法,直接采用RPN来提取候选框,极大提升了候选框的生成速度,输入图像在经过卷积神经网络和一个3x3卷积之后得到特征向量,在上面的通道经过缩放和Softmax得到anchors属于正例还是负例的概率值,下面的通道对于anchors进行边界框回归修正,之后Proposal结构会综合正例anchors和对应的边界框修正偏移量,删除太小和超出边界的候选框,得到最后的候选框。RPN的目的是在原图中设置密密麻麻的一堆候选anchors,然后用CNN去判断哪些包含目标, Anchors的每行有4个值,分别代表矩形框的中心坐标、长和宽,共有三种尺度{128,256,512},三种长宽比为{1:1,1:2,2:1}三种,共9个矩形框。原图被缩放至800x600,经过VGG16下采样16倍,在每个点设置9个anchors,一共产生的anchors数量为:

3.2 Bounding Box Regression

我们在前面生成一系列的候选框之后,会发现很多框并不完美,Bounding Box Regression可以对这些候选框进行回归修正,使得目标候选框和实际的Ground Truth更接近,通常我们对候选框的窗口用(x,y,w,h)表示,分别表示窗口的中心点坐标和宽高,我们的目标是通过输入原始的不精确的anchor A,经过一定的映射得到更加精确的与真实窗口G更接近的回归窗口G’,思路就是先平移后缩放:

平移:

缩放:

而在模型训练的时候,回归网络的输出就是每个anchor的平移量和变换尺度,从而修正anchor的位置。

最后总结一下,作者在源代码采用的4-Step Alternating Training方法,来自于知乎用户晓雷:

  1. 第一步:用ImageNet模型初始化,独立训练一个RPN网络;
  2. 第二步:仍然用ImageNet模型初始化,但是使用上一步RPN网络产生的proposal作为输入,训练一个Fast-RCNN网络,至此,两个网络每一层的参数完全不共享;
  3. 第三步:使用第二步的Fast-RCNN网络参数初始化一个新的RPN网络,但是把RPN、Fast-RCNN共享的那些卷积层的learning rate设置为0,也就是不更新,仅仅更新RPN特有的那些网络层,重新训练,此时,两个网络已经共享了所有公共的卷积层;
  4. 第四步:仍然固定共享的那些网络层,把Fast-RCNN特有的网络层也加入进来,形成一个unified network,继续训练,fine tune Fast-RCNN特有的网络层,此时,该网络已经实现我们设想的目标,即网络内部预测proposal并实现检测的功能。 训练流程图如下:

4 Mask R-CNN

论文题目《Mask R-CNN》 论文地址:https://arxiv.org/abs/1703.06870 Mask R-CNN主要由Faster R-CNN、RoI Align和Mask三部分构成,在Faster R-CNN的基础上加入了Mask branch(FCN)来生成目标的掩模(object mask),把RoI Pooling修改为RoI Aligh来解决mask与原图目标不对齐的问题,将Faster R-CNN扩展为了实例分割框架,该框架可以实现目标分类、目标检测、实例分割、语义分割、人体姿态识别等多种任务。

算法步骤如下: 1) 将图像输入到预训练好的神经网络(ResNeXt等)中得到特征向量 2) 对特征向量图像的每个点设定给定数量的RoI来获得一系列候选的RoI 3) 将候选RoI输入RPN网络进行是否含有目标的二值分类和Bounding Box回归,删掉一部分冗余的RoI 4) 对剩余的候选RoI进行RoI Aligh操作 5) 对RoI进行分类(N类分类而不是二值分类)、Bounding Box回归和Maks生成 Mask R-CNN可以基于多种卷积神经网络进行特征提取,如VGG16、VGG19、ResNet50、ResNet101等,

4.1 FPN(Feature Pyramid Network)

FPN融合了多层不同尺度的feature maps,充分提取了卷积神经网络不同层的特征,在anchors的尺度方面,每层的尺度scale为{32,64,128,256,512},ratio长宽比为{0.5,1,2},每个像素点产生三个anchor,对应5种尺度得到15种不同大小的anchors

4.2 RoI Align

Mask R-CNN 使用RoI Align 替换了Faster R-CNN中的RoI Pooling,因为RoI Pooling出现了两次取整,还原到原图上会因为取整导致很大的偏差,这对于分类任务并不重要,但对实例分割而言,几十个像素点的偏差是很明显的,RoI Align避免了这个问题。RoI Align取消了暴力取整的方法,采用双线性插值得到四个点坐标的像素值,返回到原图时误差很小。 我们来分析一下这里如果暴力取整会导致多少误差,在特征提取过程中我们需要两次量化操作 1) 原始图像到特征图像:假如我们的输入图像大小为800x800,经过5个池化层得到的特征图像大小为800/32x800/32=25x25,假如我们的目标框实际大小为665x665,,对应一下在特征图像大小为665/32x665/32=20.78x20.78,这里的浮点数要取整到20x20,引入了第一次量化误差 2) 特征图像到RoI图像:假如我们的RoI要求固定大小7x7,我们需要将20x20的RoI转换成7x7,20/7x20/7=2.86x2.86,这里也是浮点数需要取整到2x2,引入第二次量化误差 这里的0.86误差看起来不大,但是当我们还原到原图大小时,误差就变为0.86x32=27.52,这么大的误差对于实例分割是致命的。

RoI Align直接采用双线性插值进行处理,如果我们计算出来的特征图像大小为20.78x20.78,那我们就用这个数,RoI大小为20.78/7x20.78/7=2.97x2.97,通过双线性插值直接计算虚拟坐标2.97x2.97位置的像素值。

4.3 Mask Branch

首先为了预测Mask准确率更高,将RoI Align 的输出维度扩大,输出K个Mask预测图,每个类输出一张。

参考: https://zhuanlan.zhihu.com/p/61611588 https://blog.csdn.net/fengbingchun/article/details/87091740 https://www.cnblogs.com/wangguchangqing/p/10384058.html https://zhuanlan.zhihu.com/p/31426458 https://zhuanlan.zhihu.com/p/37998710

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python编程和深度学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习经典网络解析:9.Fast R-CNN
  2014年R-CNN横空出世,首次将卷积神经网络带入目标检测领域。受SPPnet启发,rbg在15年发表Fast R-CNN,它的构思精巧,流程更为紧凑,大幅提高目标检测速度。
AiCharm
2023/05/15
7330
深度学习经典网络解析:9.Fast R-CNN
目标检测--Faster R-CNN
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
用户1148525
2019/05/26
5100
重温目标检测--Fast R-CNN
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangjunhit/article/details/82661179
用户1148525
2019/05/27
4800
R-CNN,Fast R-CNN,Faster-RCNN快速理解
检测资源合集http://objectdetection.cn/2018/05/14/awesome-object-detection/
水球喵子
2020/02/24
9370
深度学习500问——Chapter08:目标检测(1)
目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
JOYCE_Leo16
2024/04/16
3860
深度学习500问——Chapter08:目标检测(1)
PaddlePaddle实战 | 经典目标检测方法Faster R-CNN和Mask R-CNN
机器视觉领域的核心问题之一就是目标检测(objectdetection),它的任务是找出图像当中所有感兴趣的目标(物体),确定其位置和大小。作为经典的目标检测框架FasterR-CNN,虽然是2015年的论文,但是它至今仍然是许多目标检测算法的基础,这在飞速发展的深度学习领域十分难得。而在FasterR-CNN的基础上改进的MaskR-CNN在2018年被提出,并斩获了ICCV2017年的最佳论文。Mask R-CNN可以应用到人体姿势识别,并且在实例分割、目标检测、人体关键点检测三个任务都取得了很好的效果。因此,百度深度学习框架PaddlePaddle开源了用于目标检测的RCNN模型,从而可以快速构建强大的应用,满足各种场景的应用,包括但不仅限于安防监控、医学图像识别、交通车辆检测、信号灯识别、食品检测等等。
用户1386409
2019/06/10
2.3K0
PaddlePaddle实战 | 经典目标检测方法Faster R-CNN和Mask R-CNN
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」
之前我所在的公司七月在线开设的深度学习等一系列课程经常会讲目标检测,包括R-CNN、Fast R-CNN、Faster R-CNN,但一直没有比较好的机会深入(但当你对目标检测有个基本的了解之后,再看这些课程你会收益很大)。但目标检测这个领域实在是太火了,经常会看到一些写的不错的通俗易懂的资料,加之之前在京东上掏了一本书看了看,就这样耳濡目染中,还是开始研究了。
全栈程序员站长
2022/06/30
6840
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」
[深度学习概念]·实例分割模型Mask R-CNN详解
Mask R-CNN是ICCV 2017的best paper,彰显了机器学习计算机视觉领域在2017年的最新成果。在机器学习2017年的最新发展中,单任务的网络结构已经逐渐不再引人瞩目,取而代之的是集成,复杂,一石多鸟的多任务网络模型。Mask R-CNN就是典型的代表。本篇大作的一作是何凯明,在该篇论文发表的时候,何凯明已经去了FaceBook。我们先来看一下,Mask R-CNN取得了何等的成果。
小宋是呢
2019/06/27
2.2K0
[深度学习概念]·实例分割模型Mask R-CNN详解
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
object detection,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。所以,object detection要解决的问题就是物体在哪里以及是什么的整个流程问题。
智能算法
2019/12/06
7.3K1
一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
最全综述 | 图像目标检测
图片分类任务我们已经熟悉了,就是算法对其中的对象进行分类。而今天我们要了解构建神经网络的另一个问题,即目标检测问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车, 还要在图片中标记出它的位置, 用边框或红色方框把汽车圈起来, 这就是目标检测问题。其中“定位”的意思是判断汽车在图片中的具体位置。
AI算法与图像处理
2019/07/11
1.3K0
最全综述 | 图像目标检测
目标检测(Object Detection):Fast R-CNN,YOLO v3
任务是计算机视觉中非常重要的基础问题,也是解决图像分割、目标跟踪、图像描述等问题的基础。目标检测是检测输入图像是否存在给定类别的物体,如果存在,输出物体在图像中的位置信息(矩形框的坐标值表示,Xmin、Ymin、Xmax、Ymax)。
zhangjiqun
2024/12/14
1630
目标检测(Object Detection):Fast R-CNN,YOLO v3
深度学习——目标检测(2)Fast-RCNNFASTER RCNNRCNN网络的演进
前言:RCNN虽然能进行目标检测,但检测的精确度,尤其是速度方面太慢了,没秒才0.03帧。在RCNN基础上做了改进就有了FAST RCNN和FASTER RCNN
DC童生
2018/07/24
4470
深度学习——目标检测(2)Fast-RCNNFASTER RCNNRCNN网络的演进
目标检测 RCNN, SPPNet, Fast RCNN, Faster RCNN 总结
RCNN CVPR 2014 Rich feature hierarchies for accurate object detection and semantic segmentation https://github.com/rbgirshick/rcnn
用户1148525
2019/05/26
1K0
深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。object detection要解决的问题就是物体在哪里,是什么这整个流程的问题。然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。 object detection技术的演进: RCNN->SppNET->Fast-RCNN->Faster-RCNN 从图像识别的任务说起 这里有一个图像任务: 既要把图中的物体
机器学习AI算法工程
2018/04/17
1.4K0
深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
[深度学习概念]·深度学习的目标检测技术演进解析
object detection个人理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。object detection要解决的问题就是物体在哪里,是什么这整个流程的问题。然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。
小宋是呢
2019/06/27
4950
[深度学习概念]·深度学习的目标检测技术演进解析
基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测
对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域,然后每个候选区域被resize成固定大小(227×227)并送入一个CNN模型中,使用AlexNet来提取图像特征,最后得到一个4096维的特征向量。然后这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型。训练样本为(P,G),其中P=(Px,Py,Pw,Ph)为候选区域,而G=(Gx,Gy,Gw,Gh)为真实框的位置和大小。G的选择是与P的IoU最大的真实框,回归器的目标值定义为:
机器学习AI算法工程
2019/10/29
3.1K0
基于CNN目标检测方法(RCNN,Fast-RCNN,Faster-RCNN,Mask-RCNN,YOLO,SSD)行人检测
目标检测与分割
对于第二个和第三个任务,可以以某一个很小的方框依次扫描整个图,从每一个采集到的图像中,送到识别器中,看是否是想要的。然后把方框逐渐变大,再从头到尾扫描。
小小杨
2021/10/13
1.6K0
【深度学习】深度图像检测算法总结与对比
一. R-CNN:Rich feature hierarchies for accurate object detection and semantic segmentation
黄博的机器学习圈子
2023/01/10
1.1K0
【深度学习】深度图像检测算法总结与对比
Faster R-CNN算法
  Faster R-CNN算法是作者Ross Girshick对Fast R-CNN算法的一种改进。Fast R-CNN在速度和精度上都有了不错的结果,但仍有一些不足之处。Faster R-CNN算法同样使用VGG-16网络结构,检测速度在GPU上达到5fps(包括候选区域的生成),准确率也有进一步的提升。在ILSVRC和COCO 2015竞赛中获得多个项目的第一名。在Faster R-CNN中提出了区域生成网络(Region Proposal Network,RPN),将候选区域的提取和Fast R-CNN中的目标检测网络融合到一起,这样可以在同一个网络中实现目标检测。Faster R-CNN主要是解决Fast R-CNN存在的问题:
全栈程序员站长
2022/10/04
5870
Faster R-CNN算法
fasterrcnn详解_faster RCNN
paper:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks Tensorflow-faster r-cnn github:Tensorflow Faster RCNN for Object Detection
全栈程序员站长
2022/11/10
9780
fasterrcnn详解_faster RCNN
推荐阅读
相关推荐
深度学习经典网络解析:9.Fast R-CNN
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文