深度学习中的目标检测原理概述

举报
leewish_yuanfang 发表于 2019/08/18 21:04:28 2019/08/18
【摘要】 一、 R-CNN的原理传统的目标检测方法大多以图像识别为基础。一般可以在图片上使用穷举法选出所有物体可能出现的区域框,对这些区域框提取特征并使用图像识别方法分类,在得到所有分类成功的区域后,通过非极大值抑制(Non-maximum suppression)输出结果。R-CNN的全称是Region-CNN,可以说是第一个成功将深度学习用到目标检测上的算法。R-CNN同样遵循传统目标检测的思路,...

一、 R-CNN的原理

传统的目标检测方法大多以图像识别为基础。一般可以在图片上使用穷举法选出所有物体可能出现的区域框,对这些区域框提取特征并使用图像识别方法分类,在得到所有分类成功的区域后,通过非极大值抑制(Non-maximum suppression)输出结果。
R-CNN的全称是Region-CNN,可以说是第一个成功将深度学习用到目标检测上的算法。
R-CNN同样遵循传统目标检测的思路,同样采用提取框、对每个提取框提取特征、图像分类、非极大值抑制四个步骤进行目标检测。只不过在提取特征这一步,将传统的特征换成了深度卷积网络(CNN)提取的特征。
使用R-CNN进行目标检测的基本步骤如下:
(1)对于原始图像,首先使用Selective Search搜寻可能存在物体的区域。
Selective Search可以从图像中启发式地搜索出可能包含物体的区域,相比穷举法可以节省一部分计算量。
(2)将取出的可能含有物体的区域送入CNN中提取特征。
CNN通常是接受一个固定大小的图像,而 Selective Search所取出的区域大小却各有不同,对此,R-CNN的做法是将区域缩放到统一大小,再使用CNN提取特征。
(3)提取出特征后使用支持向量机SVM进行分类,最后通过非极大值抑制输出结果。
R-CNN的训练可以分成下面四步:
(1)在训练集上训练CNN,R-CNN论文中使用的CNN网络是AlexNet,数据集是ImageNet。
(2)在目标检测的数据集上,对训练好的CNN进行微调
(3)用Selective Search搜索候选区域,统一使用微调后的CNN对这些区域提取特征,并将提取的特征存储起来。
(4)使用提取的特征,训练SVM分类器。

R-CNN的缺点在于计算量太大,因此,后续研究者又提出了Fast R-CNN和Faster R-CNN,这两者在一定程度上改进了R-CNN计算量大的缺点,不仅速度变快不少,识别准确率也得到了提高。
在介绍Fast R-CNN和Faster R-CNN之前,需要先引入SPPNet,并介绍SPPNet的原理。_

二、SPPNet的原理

SPPNet也称为空间金字塔池化卷积网络,它可以将CNN的输入从固定尺寸图片改进为任意尺寸的图片。
SPPNet在普通的CNN结构中加入了ROI池化层,使得网络的输入可以是任意尺寸的。
ROI池化层一般跟在卷积层后面,它的输入是任意大小的卷积,输出是固定维数的向量。其原理如下:
(1)设卷积层输出的宽度为w,高为h,通道为c。不管输入图像尺寸是多少,卷积层的通道数是不会变,也就是说c是一个常数。而w,h会随着输入图像的尺寸的变化而变化,可以看做是两个变量。
(2)ROI池化层首先将卷积层划分为44的网格,每个网格的宽为w/4,高为h/4,通道数为c。当不能整除时,取整数。
(3)对于网格中的每个通道,都取出最大值(即对每个网格内的特征做最大值池化),这个4
4的网格最终就形成了16c维的特征。
(4)然后,再将网络划分成22的网格,用同样的方法提取特征,提取的特征的长度是4c。
再把网络划分为1
1的网格,提取出的特征的长度就是c(也就是取出卷积中每个通道的最大值)。
(5)最后,将得到的特征拼接起来,得到的特征是16c+4c+c=21c维的特征。很显然,这个输出特征的长度与w,h无关,因此ROI池化层可以把任意宽度、高度的卷积特征转换为固定长度的向量。
将ROI应用到目标检测中,可以这样考虑:网络的输入是一张图像,中间经过若干卷积形成了卷积特征,这个卷及特征实际上和原始图像在位置上是有一定对应关系的。因此,原始图像中的候选框,实际上也可以对应到卷积特征中相同位置的框,而利用ROI可以将卷积特征中不同形状的区域对应到同样长度的向量特征。
综合上述步骤,就可以将原始图像中的不同长宽的区域都对应到一个固定长度的向量特征,这就完成了各个区域的特征提取工作。

采用ROI后,就可以先对图像进行一遍卷积计算,得到整个图像的卷积特征;
接着,对于原始图像中的各种候选框,只需要在卷积特征中找到对应的位置框,再使用ROI池化层对位置框中的卷积提取特征,就可以完成特征提取工作

R-CNN与SPPNet的不同在于,R-CNN要对每个区域计算卷积,而SPPNet只需要计算一次,所以SPPNet的效率要高得多。

三、Fast R-CNN的原理

在SPPNet中,特征提取和区域分类两个步骤还是分离的,特征提取通过ROI,而在区域分类时,还是使用传统的SVM作为分类器。
Fast R-CNN相比SPPNet更进了一步,使用神经网络(全连接层)进行分类,这样就可以同时训练特征提取网络和分类网络,从而取得比SPPNet更高的准确度。
Fast R-CNN的全连接层有两个输出,一个输出负责分类,另一个输出负责框回归。
(1)分类:假设要在图像中检测K类物体,那么最终的输出应该是K+1个,因为还需要一个背景类,即针对该区域无目标物体的情况
(2)框回归:对原始的检测框进行某种程度的“校准”,即学习到与尺寸无关的平移量和缩放量。

四、Faster R-CNN的原理

Fast R-CNN中还存在一个有点尴尬的问题,它需要使用Selective Search提取框,这个方法比较慢。
在Faster R-CNN中,用RPN(Region Proposal Network)网络取代了Selective Search,速度和准确度均得到了很大提高。
RPN还是需要先使用一个CNN网络对原始图片提取特征,对这个卷积特征再进行一次卷积计算,保持宽、高、通道不变。
下面定义一个“位置”的概念:对于一个5139256的卷积特征,称它一共有5139个位置。让新的卷积特征的每一个位置都负责原图中对应位置9种尺寸的框的检测,检测的目标是判断框中是否存在一个物体,因此,一共有51399个框,这些框统一称为“anchor”。
anchor的面积分别为128
128,256256,512512,每种面积又分为三种长宽比:2:1,1:1,1:2
anchor的尺寸实际是属于可调的参数,不同的任务可以选择不同的尺寸。

对于这5139个位置和51399个anchor,接下来展示每个位置的计算步骤:
设k为单个位置对应的anchor的个数,此时k=9,首先使用一个3
3的滑动窗口,将每个位置转换为一个统一的256维的特征。 这个特征对应了两部分的输出:一部分表示该位置的anchor为物体的概率,这部分的总输出长度为2k(一个anchor对应两个概率,一个是是物体的概率,一个是不是物体的概率);另一部分为框回归(同Fast R-CNN),一个anchor对应四个框回归参数(w和h的平移量、缩放量),因此框回归部分的总输出的长度为4k
Faster R-CNN使用RPN生成候选框后,剩下的网络结构与Fast R-CNN一样
在训练过程中,需要训练两个网络:RPN和分类网络。通常的做法是交替训练,即在一个batch中,先训练RPN一次,再训练分类网络一次。

注:以上内容均摘抄至《21个项目玩转深度学习-基于TensorFlow的实践详解》(河之源编著)


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。