深度学习_目标检测,RCNN,Fast-RCNN和Faster-RCNN

1.目标检测

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标,并确定它们的类别和位置。

目标检测中能检测出来的物体取决于当前任务(数据集)需要检测的物体有哪些。假设我们的目标检测模型定位是检测动物(牛、羊、猪、狗、猫五种结果),那么模型对任何一张图片输出结果不会输出鸭子、书籍等其它类型结果。

目标检测的位置信息一般由两种格式(以图片左上角为原点(0,0)):

  1. 极坐标表示:(xmin, ymin, xmax, ymax)
  2. 中心点坐标:(x_center, y_center, w, h)
1.1常用的开源数据集

PASCAL VOC数据集

MS COCO数据集

MS COCO的全称是Microsoft Common Objects in Context,微软于2014年出资标注的MicrosoftCOCO数据集,与ImageNet竞赛一样,被视为是计算机视觉领域最受关注和最权威的比赛之一。COCO数据集是一个大型的、丰富的物体检测,分割和字幕数据集。这个数据集以场景理解为目标,主要从复杂的日常场景中截取,图像中的目标通过精确的分割进行位置的标定。图像包括91类目标,328,000影像和2,500,000个label。目前为止目标检测的最大数据集,提供的类别有80类,有超过33 万张图片,其中20 万张有标注,整个数据集中个体的数目超过150 万个。

1.2 目标检测常用的评价指标
1.2.1 IOU

在目标检测算法中,IoU(intersection over union,交并比)是目标检测算法中用来评价2个矩形框之间相似度的指标:IoU = 两个矩形框相交的面积 / 两个矩形框相并的面积。

IOU越大越好。

如下图所示:

那我们就可以通过预测结果与真实结果之间的交并比来衡量两者之间的相似度。一般情况下对于检测框的判定都会存在一个阈值,也就是 IoU 的阈值,一般可以设置当 IoU 的值大于 0.5 的时候,则可认为检测到目标物体。

1.2.2 MAP(Mean Average Precision)

目标检测问题中的每个图片都可能包含一些不同类别的物体,需要评估模型的物体分类和定位性能。因此,用于图像分类问题的标准指标precision不能直接应用于此。 在目标检测中,mAP是主要的衡量指标。

mAP是多个分类任务的AP的平均值,而AP(average precision)是PR曲线下的面积

1.2.3 NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素。

例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。 NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪、数据挖掘、3D重建、目标识别以及纹理分析等 。

NMS的原理是对于预测框的列表B及其对应的置信度S,选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的IoU大于阈值Nt的框从B中移除.重复这个过程,直到B为空。

使用流程如下图所示:

  1. 首先是检测出一系列的检测框
  2. 将检测框按照类别进行分类
  3. 对同一类别的检测框应用NMS获取最终的检测结果

    通过一个例子看些NMS的使用方法,假设定位车辆,算法就找出了一系列的矩形框,我们需要判别哪些矩形框是没用的,需要使用NMS的方法来实现。

假设现在检测窗口有:A、B、C、D、E 5个候选框,接下来进行迭代计算:

  1. 第一轮:因为B是得分最高的,与B的IoU>0.5删除。A,CDE中现在与B计算IoU,DE结果>
    0.5,剔除DE,B作为一个预测结果,有个检测框留下B,放入集合
  2. 第二轮:A的得分最高,与A计算IoU,C的结果>0.5,剔除C,A作为一个结果
    最终结果为在这个5个中检测出了两个目标为A和B。
1.2.4 目标检测分类方法

目标检测算法主要分为two-stage(两阶段)和one-stage(单阶段)两类:

two-stage:

先由算法生成一系列作为样本的候选框,再通过卷积神经网络进行样本分类。如下图所示,主要通过一个卷积神经网络来完成目标检测过程,其提取的是CNN卷积特征,进行候选区域的筛选和目标检测两部分。网络的准确度高、速度相对较慢

one-stage:

直接通过主干网络给出目标的类别和位置信息,没有使用候选区域的筛选网路,这种算法速度快,但是精度相对Two-stage目标检测网络降低了很多。

2.RCNN

Overfeat模型,最原始的检测方法:

2014年提出R-CNN⽹络,该⽹络不再使⽤暴⼒穷举的⽅法,⽽是使⽤候选区域⽅法(regionproposal method)创建⽬标检测的区域来完成⽬标检测的任务,R-CNN是以深度神经⽹络为基础的⽬标检测的模型 ,以R-CNN为基点,后续的Fast R-CNN、Faster R-CNN模型都延续了这种⽬标检测思路。

2.1 算法流程和步骤
  1. 候选区域⽣成:使⽤选择性搜索(Selective Search)的⽅法找出图⽚中可能存在⽬标的侯选区域
  2. CNN⽹络提取特征:选取预训练卷积神经⽹⽹络(AlexNet或VGG)⽤于进⾏特征提取
  3. ⽬标分类:训练⽀持向量机(SVM)来辨别⽬标物体和背景,对每个类别,都要训练⼀个⼆元SVM
  4. ⽬标定位:训练⼀个线性回归模型,为每个辨识到的物体⽣成更精确的边界框
2.1.1 候选区域生成

选择性搜索(SelectiveSearch,SS)中,使⽤语义分割的⽅法,它将颜⾊、边界、纹理等信息作为合并条件,采⽤多尺度的综合⽅法,将图像在像素级上划分出⼀系列的区域,这些区域要远远少于传统的滑动窗⼝的穷举法产⽣的候选区域。

SelectiveSearch在⼀张图⽚上提取出来约2000个侯选区域,需要注意的是这些候选区域的⻓宽不固定。 ⽽使⽤CNN提取候选区域的特征向量,需要接受固定⻓度的输⼊,所以需要对候选区域做⼀些尺⼨上的修改。

2.1.2 CNN网络提取特征

采⽤预训练模型(AlexNet或VGG)在⽣成的候选区域上进⾏特征提取,将提取好的特征保存在磁盘中,⽤于后续步骤的分类和回归。

1.全连接层的输⼊数据的尺⼨是固定的,因此在将候选区域送⼊CNN⽹络中时,需进⾏裁剪或变形为固定的尺⼨,在进⾏特征提取。

2.预训练模型在ImageNet数据集上获得,最后的全连接层是1000,在这⾥我们需要将其改为N+1(N为⽬标类别的数⽬,例如VOC数据集中N=20,coco数据集中N=80,1是加⼀个背景)后,进⾏微调即可。

3.利⽤微调后的CNN⽹络,提取每⼀个候选区域的特征,获取⼀个4096维的特征,⼀幅图像就是2000x4096维特征存储到磁盘中。

2.1.3 目标分类(SVM)

假设我们要检测猫狗两个类别,那我们需要训练猫和狗两个不同类别的SVM分类器,然后使⽤训练好的分类器对⼀幅图像中2000个候选区域的特征向量分别判断⼀次,这样得出[2000, 2]的得分矩阵,如下图所⽰:

对于N个类别的检测任务,需要训练N(⽬标类别数⽬)个SVM分类器,对候选区域的特征向量(4096维)进⾏⼆分类,判断其是某⼀类别的⽬标,还是背景来完成⽬标分类。

2.1.4 目标定位

通过选择性搜索获取的⽬标位置不是⾮常的准确,实验证明,训练⼀个线性回归模型在给定的候选区域的结果上去预测⼀个新的检测窗⼝,能够获得更精确的位置。修正过程如下图所⽰:

通过训练⼀个回归器来对候选区域的范围进⾏⼀个调整,这些候选区域最开始只是⽤选择性搜索的⽅法粗略得到的,通过调整之后得到更精确的位置,如下所⽰:

2.1.5 总结

预测过程:

使⽤选择性搜索的⽅法从⼀张图⽚中提取2000个候选区域,将每个区域送⼊CNN⽹络中进⾏特征提取,然后送⼊到SVM中进⾏分类,并使⽤候选框回归器,计算出每个候选区域的位置。 候选区域较多,有2000个,需要剔除掉部分检测结果。 针对每个类,通过计算IOU,采取⾮最⼤值抑制NMS的⽅法,保留⽐较好的检测结果。

算法总结:

  1. 训练阶段多,训练耗时: 微调CNN⽹络+训练SVM+训练边框回归器。
  2. 预测速度慢: 使⽤GPU, VGG16模型处理⼀张图像需要47s
  3. 占⽤磁盘空间⼤:5000张图像产⽣⼏百G的特征⽂件
  4. 数据的形状变化:候选区域要经过缩放来固定⼤⼩,⽆法保证⽬标的不变形

3. Fast-RCNN

fastRCNN的⼯作流程描述如下:

图像被送⼊到卷积⽹络进⾏特征提取,将通过选择性搜索获取的候选区域映射到特征图中:

在特征图上Rol中应⽤RoIPooling,获取尺⼨相同的特征向量

将这些区域传递到全连接的⽹络中进⾏分类和回归,得到⽬标检测的结果

Fast-RCNN模型总结:

Fast R-CNN是对R-CNN模型的⼀种改进:

  1. CNN⽹络不再对每个候选区域进⾏特征提取,⽽是直接对整张图像进⾏出路,这样减少了很
    多重复计算
  2. ⽤ROI pooling进⾏特征的尺⼨变换,来满⾜FC全连接层对输⼊数据尺度的要求
  3. 将⽬标的回归和分类统⼀在⼀个⽹络中,使⽤FC+softmax进⾏⽬标分类,使⽤FC Layer进
    ⾏⽬标框的回归

4.Faster-RCNN

在R-CNN和Fast RCNN的基础上,在2016年提出了Faster RCNN⽹络模型,在结构上,FasterRCNN已经将候选区域的⽣成,特征提取,⽬标分类及⽬标框的回归都整合在了⼀个⽹络中,综合性能有较⼤提⾼,在检测速度⽅⾯尤为明显。接下来我们给⼤家详细介绍fasterRCNN⽹络模型。⽹络基本结构如下图所⽰:

Faster RCNN可以看成是区域⽣成⽹络(RPN)与Fast RCNN的组合,其中区域⽣成⽹络(RPN)替代选择性搜索来⽣成候选区域,Fast RCNN⽤来进⾏⽬标检测。

4.1 网络的工作流程
  1. 特征提取:将整个图像缩放⾄固定的⼤⼩输⼊到CNN⽹络中进⾏特征提取,得到特征图。
  2. 候选区域提取:输⼊特征图,使⽤区域⽣成⽹络RPN,产⽣⼀些列的候选区域
  3. ROIPooling: 与Fast RCNN⽹络中⼀样,使⽤最⼤池化固定候选区域的尺⼨,送⼊后续⽹络中
    进⾏处理
  4. ⽬标分类和回归:与Fast RCNN⽹络中⼀样,使⽤两个同级层:K+1个类别的SoftMax分类层
    和边框的回归层,来完成⽬标的分类和回归

Faster R-CNN的流程与Fast R-CNN的区别不是很⼤,重要的改进是使⽤RPN⽹络来替代选择性搜索获取候选区域,所以我们可以将Faster R-CNN⽹络看做RPN和Fast R-CNN⽹络的结合。

4.2 模型结构详解

Faster RCNN的⽹络结构如下图所⽰:

我们依然将⽹络分为四部分:

  1. Backbone:Backbone由CNN卷积神经⽹络构成,常⽤的是VGG和resnet, ⽤来提取图像中的
    特征,获取图像的特征图。该特征图被共享⽤于后续RPN层⽣成候选区域和ROIPooling层中
  2. RPN⽹络:RPN⽹络⽤于⽣成候选区域,⽤于后续的⽬标检测。
  3. Roi Pooling: 该部分收集图像的特征图和RPN⽹络提取的候选区域位置,综合信息后获取固
    定尺⼨的特征,送⼊后续全连接层判定⽬标类别和确定⽬标位置
  4. ⽬标分类与回归: 该部分利⽤ROIpooling输出特征向量计算候选区域的类别,并通过回归获
    得检测框最终的精确位置。
4.2.1 backbone

backbone⼀般为VGG,ResNet等⽹络构成,主要进⾏特征提取,将最后的全连接层舍弃,得到

特征图送⼊后续⽹络中进⾏处理。

在源码中使⽤ResNet + FPN 结构来提取特征。与普通的 FasterRCNN 只需要将⼀个特征图输⼊到后续⽹络中不同,由于加⼊ FPN结构,需要将多个特征图逐个送⼊到后续⽹络中,如下图所⽰:

Resnet进⾏特征提取,FPN结构作⽤是当前层的特征图会融合未来层的特征进⾏上采样,并加以利⽤。因为有了这样⼀个结构,当前的特征图就可以获取未来层的信息,也就将低阶特征与⾼阶特征就有机融合起来了,提升检测精度。如下图所⽰:

在这⾥ResNet和FPN的完整结构如下图所⽰:Resnet进⾏特征提取,FPN⽹络进⾏特征融合获取多个特征图后,输⼊到RPN⽹络中的特征图是[p2,p3,p4,p5,p6] ,⽽作为后续⽬标检测⽹络FastRCNN的输⼊则是 [p2,p3,p4,p5] 。


在FPN多层的图片中,底层较大的图片中可以用来提取较小的特征,因为在不断的卷积中,较小的特征可能就会被卷没了。

4.2.2 RPN网络

经典的检测⽅法⽣成检测框都⾮常耗时,如overfeat中使⽤滑动窗⼝⽣成检测框;或如R-CNN使⽤选择性搜索⽅法⽣成检测框。⽽Faster RCNN则抛弃了传统的滑动窗⼝和选择性搜索的⽅法,直接使⽤RPN⽣成候选区域,能极⼤提升检测速度。

RPN⽹络的主要流程是:

  1. ⽣成⼀系列的固定参考框anchors,覆盖图像的任意位置,然后送⼊后续⽹络中进⾏分类和回归
  2. 分类分⽀:通过softmax分类判断anchor中是否包含⽬标
  3. 回归分⽀:计算⽬标框对于anchors的偏移量,以获得精确的候选区域
  4. 最后的Proposal层则负责综合含有⽬标的anchors和对应bbox回归偏移量获取候选区域,同时剔除太⼩和超出边界的候选区域

anchors是做什么的?

anchor在⽬标检测中表⽰ 固定的参考框 ,⾸先预设⼀组不同尺度不同⻓宽⽐的固定参考框,覆盖⼏乎所有位置, 每个参考框负责检测与其交并⽐⼤于阈值 (训练预设值,常⽤0.5或0.7) 的⽬标 ,anchor技术将候选区域⽣成问题转换为 "这个固定参考框中有没有⽬标,⽬标框偏离参考框多远" ,不再需要多尺度遍历滑窗,真正实现了⼜好⼜快。

在FastRCNN中框出多尺度、多种⻓宽⽐的anchors,如下图所⽰:下图中分别是尺度为32,64,128,⻓宽⽐为1:1,1:2,2:1的⼀组anchors,我们利⽤这组anchor在特征图上进⾏滑动,并对应到原图上即可获取⼀系列的固定参考框。

由于有 FPN ⽹络,所以会在多个不同尺度特征图中⽣成anchor,假设某⼀个特征图⼤⼩为hxw,⾸先会计算这个特征相对于输⼊图像的下采样倍数 stride:

得到⼀系列的anchors后就可送⼊后续⽹络中进⾏分类和回归。

RPN的分类与回归:

⼀副MxN⼤⼩的矩阵送⼊Faster RCNN⽹络后,经过backbone特征提取到RPN⽹络变为HxW⼤⼩的特征图。如下图所⽰,是RPN进⾏分类的⽹络结构:(k=9)

先做⼀个1x1的卷积,得到[batchsize,H,W,18]的特征图,然后进⾏变形,将特征图转换为[batchsize,9xH,W,2]的特征图后,送⼊softmax中进⾏分类,得到分类结果后,再进⾏reshape最终得到[batchsize,H,W,18]⼤⼩的结果,18表⽰k=9个anchor是否包含⽬标的概率值。

RPN回归的结构如下图所⽰:(k=9)

我们获取⼀些分类置信度较⾼的结果,将这些anchor绘制在图像上:

4.2.3 proposal层

Proposal层负责综合RPN⽹络对anchors分类和回归的结果,利⽤回归的结果对包含⽬标的anchors进⾏修正,计算出候选区域,送⼊后续RoI Pooling层中。


Proposal层有3个输⼊:RPN分类和回归结果,以及图像的元信息。

4.2.4 ROIPooling

RoI Pooling层则负责收集RPN⽹络⽣成的候选区域,并将其映射到特征图中并固定维度,送⼊后续⽹络中进⾏分类和回归。

RoIpooling使⽤最⼤池化将任何有效的RoI区域内的特征转换成具有pool_H×pool_W的固定空间范围的⼩的特征图,其中pool_H和pool_W是超参数,⽐如设置为7x7, 它们独⽴于任何特定的RoI,如下图所⽰:

在实现过程中,FPN⽹络产⽣了多个尺度特征图,那候选区域要映射到哪个特征图中呢?

在这⾥,不同尺度的ROI使⽤不同特征层作为ROI pooling层的输⼊,⼤尺度ROI就⽤后⾯⼀些的

⾦字塔层,⽐如P5;⼩尺度ROI就⽤前⾯⼀点的特征层,⽐如P3

4.2.5 目标分类与回归

该部分利⽤获得的候选区域的特征图,通过全连接层与softmax计算每个候选区域具体属于的类别(如⼈,⻋,电视等),输出概率值;同时再次利⽤回归⽅法获得每个候选区域的位置偏移量,⽤于回归更加精确的⽬标检测框。该部分⽹络结构如下所⽰:

从RoI Pooling层获取到固定⼤⼩的特征图后,送⼊后续⽹络,可以看到做了如下2件事:

  1. 通过全连接和softmax对候选区域进⾏分类
  2. 再次对候选区域进⾏回归修正,获取更⾼精度的检测框

在此过程中,softmax分类的重要性要大于回归,因为分类是辨别物体,如果将人识别成狗问题就很大,但是画框偏移一些是可以接受的。

相关推荐
咚咚王者1 小时前
人工智能之语言领域 自然语言处理 第十五章 BERT系列模型
人工智能·自然语言处理·bert
小程故事多_802 小时前
规范驱动开发,OpenSpec 联动 Claude Code 全流程实战
人工智能·aigc·ai编程
WLJT1231231232 小时前
科技赋能消防 守护平安底线
人工智能·科技
BullSmall2 小时前
如何借助AI高效实现自动化测试
人工智能·自动化·集成测试
nap-joker2 小时前
【临床笔记+生理信号+医学影像】多模态风险预测,结合生理信号、医学影像和临床笔记
人工智能·机器学习·临床笔记+医学影像·早期融合·中期融合·晚期融合
upward3372 小时前
OpenClaw 阿里云/本地部署多Agent步骤
人工智能·阿里云·云计算
智算菩萨2 小时前
基于ChatGPT 5.4的Windows 11智能命令行维护系统:理论架构与实践应用
人工智能·python·ai·chatgpt·ai编程
大傻^2 小时前
LangChain4j 企业知识库实战:PDF 解析、OCR 与文档加载器生态
人工智能·pdf·ocr·langchain4j
视频砖家2 小时前
AI Sider: ChatGPT + DeepSeek + Gemini
人工智能·chatgpt