目标检测 模型(经典目标检测算法:RCNN、Fast RCNN、 Faster RCNN 基本思想和网络结构介绍)
一 、目标检测的基本介绍
1.1 什么是目标检测?
所谓目标检测就是在一张图像中找到我们关注的目标 ,并确定它的类别和位置 ,这是计算机视觉领域最核心的问题之一 。由于各类目标不同的外观 ,颜色 ,大小以及在成像时光照 ,遮挡等具有挑战性的问题 ,目标检测一直处于不断的优化和研究中 。
1.2 目标检测算法的分类
传统的目标检测算法有:SIFT(尺度不变特征变换) 、HOG(方向梯度直方图) 、DPM(一种基于组件的图像检测算法)等 。
基于深度学习的目标检测算法可以分为两类:二阶算法(Two Stage)和一阶算法(One Stage) 。
二阶算法:先生成区域候选框 ,再通过卷积神经网络进行分类和回归修正 。常见算法有 RCNN 、SPPNet 、Fast RCNN ,Faster RCNN 和 RFCN 等 。二阶算法检测结果更精确 。 一阶算法:不生成候选框 ,直接在网络中提取特征来预测物体的分类和位置 。常见算法有 SSD 、YOLO系列 和 RetinaNet 等 。一阶算法检测速度与更快 。二 、RCNN
2.1 RCNN简介
RCNN(Region with CNN feature)算法出现于2014年 ,是将深度学习应用到目标检测领域的开山之作 ,凭借卷积神经网络出色的特征提取能力 ,大幅度提升了目标检测的效果 。
RCNN在PASCAL VOC2012数据集上将检测率从35.1%提升至53.7%,使得CNN在目标检测领域成为常态 ,也使得大家开始探索CNN在其他计算机视觉领域的巨大潜力 。
论文:《 Rich feature hierarchies for accurate object detection and semantic segmentation 》
作者:Ross Girshick
源码(作者提供):https://github.com/rbgirshick/rcnn2.2 RCNN算法流程
RCNN继承了传统目标检测的思想 ,将目标检测当做分类问题进行处理,先提取一系列目标的候选区域 ,然后对候选区域进行类。
其具体算法流程包含以下4步:
(1)生成候选区域:
采用一定区域候选算法(如 Selective Search)将图像分割成小区域 ,然后合并包含同一物体可能性高的区域作为候选区域输出 ,这里也需要采用一些合并策略 。不同候选区域会有重合部分 ,如下图所示(黑色框是候选区域):
要生成1000-2000个候选区域(以2000个为例) ,之后将每个区域进行归一化 ,即缩放到固定的大小(227*227).
(2)对每个候选区域用CNN进行特征提取:
这里要事先选择一个预训练神经网络(如AlexNet 、VGG) ,并重新训练全连接层 ,即 fintune 技术的应用 。
将候选区域输入训练好的AlexNet CNN网络 ,得到固定维度的特征输出(4096维) ,得到2000×4096的特征矩阵。
(3)用每一类的SVM分类器对CNN的输出特征进行分类:
此处以PASCAL VOC数据集为例 ,该数据集中有20个类别 ,因此设置20个SVM分类器 。
将2000×4096的特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵 ,表示2000个候选区域分别属于20个分类的概率 ,因此矩阵的每一行之和为1 。
分别对上述2000×20维矩阵中每一列(即每一类)进行非极大值抑制剔除重叠建议框,得到该列即该类中概率最大的一些候选框 。
非极大值抑制剔除重叠建议框的具体实现方法是:
第一步:定义 IoU 指数(Intersection over Union) ,即 (A∩B) / (AUB) ,即AB的重合区域面积与AB总面积的比 。直观上来讲 IoU 就是表示AB重合的比率 , IoU越大说明AB的重合部分占比越大 ,即A和B越相似 。
第二步:找到每一类中2000个候选区域中概率最高的区域 ,计算其他区域与该区域的IoU值 ,删除所有IoU值大于阈值的候选区域 。这样可以只保留少数重合率较低的候选区域 ,去掉重复区域 。
比如下面的例子 ,A是向日葵类对应的所有候选框中概率最大的区域 ,B是另一个区域 ,计算AB的IoU ,其结果大于阈值 ,那么就认为AB属于同一类(即都是向日葵),所以应该保留A ,删除B ,这就是非极大值抑制 。
(4)使用回归器精修候选区域的位置:
通过 Selective Search算法得到的候选区域位置不一定准确,因此用20个回归器对上述20个类别中剩余的建议框进行回归操作 ,最终得到每个类别的修正后的目标区域 。具体实现如下:
如图 ,黄色框表示候选区域 Region Proposal,绿色窗口表示实际区域Ground Truth(人工标注的) ,红色窗口表示 Region Proposal 进行回归后的预测区域 ,可以用最小二乘法解决线性回归问题 。
通过回归器可以得到候选区域的四个参数 ,分别为:候选区域的x和y的偏移量 ,高度和宽度的缩放因子 。可以通过这四个参数对候选区域的位置进行精修调整 ,就得到了红色的预测区域 。
2.3 RCNN流程图
2.4 RCNN框架
RCNN由四个部分组成:SS算法 、CNN 、SVM 、bbox regression。
2.5 RCNN的缺点
(1)训练和测试速度慢 ,需要多步训练 ,非常繁琐 。
(2)由于涉及分类中的全连接网络 ,因此输入CNN的候选区域尺寸是固定的 ,造成了精度的降低 。
(3)候选区域需要提前提取并保存 ,占用的空间很大。对于非常深的网络,如VGG16 ,从VOCO7训练集上的5000张图片上提取的特征需要数百GB的存储空间 ,这个问题是致命的 。
RCNN 成为了当时目标检测领域的SOAT算法,尽管现在已经不怎么用了 ,但其思想仍然值得我们借鉴和学习 。
三 、Fast RCNN
3.1 Fast RCNN简介
在RCNN之后 ,SPPNet解决了重复卷积计算和固定输出尺寸两个问题 ,SPPNet的主要贡献是在整张图像上计算全局特征图 ,然后对于特定的建议候选框 ,只需要在全局特征图上取出对应坐标的特征图就可以了 。但SPPNe仍然存在一些弊端 ,如仍然需要将特征保存在磁盘中 ,速度还是很慢 。
Fast RCNN算法是2015年Ross Girshick(还是这位大佬)提出的 ,在RCNN和SPPNet的基础上进行了改进 。根据名字就知道 ,Fast RCNN更快更强 。其训练步骤实现了端到端 ,基于CGG16网络 ,其训练速度比RCNN快了9倍 ,测试速度快了213倍,在PASCAL VOC2012数据集达到了68.4%的准确率 。
论文:《Fast R-CNN》
源码(作者提供):https://github.com/rbgirshick/fast-rcnn3.2 Fast RCNN算法流程
(1)一张图像生成1K~2K个候选区域(使用Selective Search算法 ,简称SS算法) ,我们将某个候选区域称为ROI区域 。
(2)将图像输入网络得到相应的特征图,将SS算法生成的候选框投影到特征图上获得相应的特征矩阵 。
R-CNN vs Fast-RCNN:
R-CNN依次将2000个候选框区域输入卷积神经网络得到特征 ,存在大量冗余 ,提取时间很长 。
Fast-RCNN将整张图像送入网络 ,一次性计算整张图像特征 ,这样就可以根据特征图的坐标获得想要的候选区域的特征图 ,不需要重复计算 。(3)将每个特征矩阵通过 ROI pooling 层缩放到7x7大小的特征图 。
前面讲到RCNN需要将候选区域归一化到固定大小(227227) ,而Fast RCNN并不需要这样的操作 ,Fast RCNN通过pooling层将每个候选区域的特征图都变为77 ,如下图所示:
(4)将特征图展平(reshape)为向量 ,通过一系列全连接层和 softmax得到预测结果。
3.3 Fast RCNN流程图
3.3.1 总体流程如图 ,将一张图像输入到 Deep ConvNet 中得到图像的特征图 ,根据ROI区域与整体图像的坐标映射关系 (RoI Projection)进行特征映射(Conv feature map) ,能够得到每一个候选区域(ROI区域)的特征矩阵 。
将每一个特征矩阵通过RoI pooling layer,池化到固定尺寸(7*7) ,然后展平为向量(vector) 。再经过两个全连接层(fully connected layers,FC) ,得到ROI特征向量(ROI feature vector)。
之后 ROI feature vector 并联两个FC,其中一个用于目标概率预测(softmax) ,另一个用于边界框参数的回归(bbox regressor ,bbox 表示 bounding box) 。
3.3.2 softmax 分类器softmax 分类器输出N+1个类别的概率 ,如下图所示 。PASCAL VOC2012数据集中有20个分类 ,因此会输出21个类别的概率 ,其中第一个为背景概率 ,其余20个为每个分类的概率 。所以softmax的FC中有N+1个节点 。
3.3.3 边界框回归器(bbox regressor )一幅图片中会画出N+1个分类的候选框 ,每个候选框都有x、y 、w 、d四个参数 ,所以 bbox regressor 的FC中有 4(N+1) 个节点 。
边界框参数回归的计算方法:
3.3 Fast RCNN 中 loss 的计算
因为在Fast RCNN 中需要预测N+1个类别的概率以及边界框的回归参数 ,所以定义了两个损失函数:分类损失和边界框回归损失 。
3.4 Fast RCNN框架
首先回顾一下RCNN的框架:
RCNN由四部分组成 ,因此需要多步训练 ,非常繁琐 。
Fast RCNN将CNN特征提取 ,SVM边界框分类,bbox regression边界框回归三部分结合到了一起 ,都融合到同一个CNN中 。那么Fast RCNN就只有两部分了:先通过SS算法获取候选框 ,再通过CNN完成特征提取、分类和边界框回归 。
那么自然而然的,在接下来的 Faster RCNN 算法中 ,就要考虑如何将 Region proposal 也融入到CNN中 ,将整个算法合并为一个网络 ,这样就可以实现端到端的目标检测 。
3.5 Fast RCNN的缺点
1 、尽管用到了GPU ,但Region proposal还是在CPU上实现的 。在CPU中 ,用SS算法提取一张图片的候选框区域大约需要2s ,而完成整个CNN则只需要0.32s ,因此Fast RCNN 计算速度的瓶颈是Region proposal 。
2 、无法满足实时应用 ,没有真正实现端到端训练测试;
四 、Faster RCNN
4.1 Faster RCNN简介
Faster RCNN 是作者 Ross Girshick 继 RCNN 和 Fast RCNN后的又一力作。同样使用 VGG16作为网络的backbone ,推理速度在GPU上达到5fps(包括候选区域的生成) ,准确率也有进一步的提升 。在2015年的ILSVRC以及cOco竞赛中获得多个项目的第一名 。
4.2 Faster RCNN算法流程
Faster RCNN = RPN + Fast RCNN
RPN 是指 Region Proposal Network ,建议区域生成网络。 Faster RCNN 中用 RPN 来代替了 Fast RCNN 中的SS算法 。
算法流程:
(1)将图像输入网络得到相应的特征图 。
(2)使用RPN网络生成候选框 ,将RPN生成的候选框投影到特征图上获得ROI区域的特征矩阵 。
(3)将每个ROI区域的特征矩阵通过 ROI pooling 层缩放到7x7大小的特征图,接着将特征图展平为vector ,之后通过一系列全连接层得到预测结果 。
Faster RCNN 网络的基本结构如下:
4.2 RPN网络
4.2.1 RPN网络结构图中的 conv feature map 是图像输入网络得到相应的特征图 ,通过sliding window处理之后产生一个256d的一维向量 。该向量通过两个全连接层,分别输出分类概率scores和边界框回归参数coordinates ,其中k是指 k个 anchor boxes ,2k个scores是每个 anchor box 分别为前景和背景的概率(注意这里只区分前景和背景 ,所有的类别都归为前景) ,4k个coordinates是因为每个anchor box 有四个参数 。
4.2.2 anchor的定义那么什么是 anchor呢?
首先要明确 ,anchor不是候选框(Proposal) ,后面会提到二者的区别 。
我们在特征图中找一个点 ,就可以在原图中找到对应的一个像素点 ,以该像素点为中心 ,画出9个不同大小和长宽比的框 ,称为anchor 。如下图所示 ,这些anchor里面可能包含目标 ,也可能没有目标 。因为我们在一张图中想找的的目标的大小和长宽比并不是固定的,所以这里用9个不同大小和长宽比的anchor来进行预测 。
那么为什么是9个anchor呢?
论文中给出了每个anchor的面积和长宽比:
所以特征图中的每个位置在原图中都会生成 33=9 个anchor ,如下图所示 ,蓝色的三个anchor是面积为128128的,红色是面积为256256的 ,绿色是512512的 。
4.2.3 RPN生成proposal的过程对于一张 1000x600x3 的图像(三通道) ,用3x3的卷积核进行特征提取得到60x40的特征图 ,则共有 60x40x9 (约2w个)个anchor 。忽略超过图片边界的 anchor 后 ,剩下约 6000 个anchor。
对于这6000 个 anchor ,通过RPN生成的边界框回归参数将每个 anchor 调整为proposal(前面提到了每个anchor经过RPN都输出2个概率和4个边界框回归参数) ,这里就能看到anchor和proposal的区别 。这个过程就是 RPN 生成候选框的过程 。
RPN 生成的候选框之间存在大量重叠 ,基于候选框的cls得分 ,采用非极大值抑制 ,IoU设为0.7 ,这样每张图片只剩下 2000 个候选框。
4.3 Faster RCNN框架
Faster RCNN 在Fast RCNN的基础上更进一步 ,将候选框生成也融入到CNN网络中 ,使得 候选框生成 、特征提取 、候选框分类 、候选框边界回归这四大部分都结合在一个CNN网络中,避免了分步训练 ,实现了真正端到端的目标检测 。
五 、三者的比较:RCNN 、Fast RCNN 、 Faster RCN
三者都是二阶算法 ,网络框架比较:
可以看到,从RCNN 、Fast RCNN 到 Faster RCNN ,网络框架越来越简洁 ,目标检测效果也越来越好 。
三者的优缺点比较:
六 、参考资料
视频(B站):Faster RCNN理论合集
博客:Faster R-CNN论文笔记——FR
博客:Faster RCNN 优缺点说明
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!