基于深度学习的目标检测研究进展

基于深度学习的目标检测研究进展
原创2016-05-30深度学习大讲堂深度学习大讲堂
开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了什么物体?他们在什么位置?这还不简单,图中有一个猫和一个人,具体的位置就是上图右侧图像两个边框(bounding-box)所在的位置。其实刚刚的这个过程就是目标检测,目标检测就是“给定一张图像或者视频帧,出其中所有目标的位置,并给出每个目标的具体类别”。
目标检测对于人来说是再简单不过的任务,但是对于计算机来说,它看到的是一些值为0~255的数组,因而很难直接得到图像中有人或者猫这种高层语义概念,也不清楚目标出现在图像中哪个区域。图像中的目标可能出现在任何位置,目标的形态可能存在各种各样的变化,图像的背景千差万别……,这些因素导致目标检测并不是一个容易解决的任务。
得益于深度学习——主要是卷积神经网络(convolution neural network: CNN)和候选区域(region proposal)算法,从2014年开始,目标检测取得了巨大的突破。本文主要对基于深度学习的目标检测算法进行剖析和总结,文章分为四个部分:第一部分大体介绍下传统目标检测的流程,第二部分介绍以R-CNN为代表的结合region proposal和CNN分类的目标检测框架(R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN); 第三部分介绍以YOLO为代表的将目标检测转换为回归问题的目标检测框架(YOLO, SSD); 第四部分介绍一些可以提高目标检测性能的技巧和方法。
一. 传统目标检测方法
如上图所示,传统目标检测的方法一般分为三个阶段:首先在给定的图像上选择一些候选的区域,然后对这些区域提取特征,最后使用训练的分类器进行分类。下面我们对这三个阶段分别进行介绍。
(1) 区域选择
这一步是为了对目标的位置进行定位。由于目标可能出现在图像的任何位置,而且目标的大小、长宽比例也不确定,所以最初采用滑动窗口的策略对整幅图像进行遍历,而且需要设置不同的尺度,不同
的长宽比。这种穷举的策略虽然包含了目标所有可能出现的位置,但是缺点也是显而易见的:时间复杂度太高,产生冗余窗口太多,这也严重影响后续特征提取和分类的速度和性能。(实际上由于受到时间复杂度的问题,滑动窗口的长宽比一般都是固定的设置几个,所以对于长宽比浮动较大的多类别目标检测,即便是滑动窗口遍历也不能得到很好的区域)
(2) 特征提取
由于目标的形态多样性,光照变化多样性,背景多样性等因素使得设计一个鲁棒的特征并不是那么容易。然而提取特征的好坏直接影响到分类的准确性。(这个阶段常用的特征有SIFT、HOG等)康尼可一氧化氮
(3) 分类器
主要有SVM, Adaboost等。
总结:传统目标检测存在的两个主要问题:一个是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。
二. 基于Region Proposal的深度学习目标检测算法
对于传统目标检测任务存在的两个主要问题,我们该如何解决呢?
对于滑动窗口存在的问题,region proposal提供了很好的解决方案。region proposal(候选区域)是预先出图中目标可能出现的位置。但由于region proposal利用了图像中的纹理、边缘、颜等信息,可以保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率。这大大降低了后续操作的时间复杂度,并且获取的候选窗口要比滑动窗口的质量更高(滑动窗口固定长宽比)。比较常用的region proposal算法有selective Search和edge Boxes,如果想具体了解region proposal可以看一下PAMI2015的“What makes for effective detection proposals?”吴数德
有了候选区域,剩下的工作实际就是对候选区域进行图像分类的工作(特征提取+分类)。对于图像分类,不得不提的是2012年ImageNet大规模视觉识别挑战赛(ILSVRC)上,机器学习泰斗Geoffrey Hinton教授带领学生Krizhevsky使用卷积神经网络将ILSVRC分
类任务的Top-5 error降低到了15.3%,而使用传统方法的第二名top-5 error高达 26.2%。此后,卷积神经网络占据了图像分类任务的绝对统治地位,微软最新的ResNet和谷歌的Inception V4模型的top-5 error降到了4%以内多,这已经超越人在这个特定任务上的能力。所以目标检测得到候选区域后使用CNN对其进行图像分类是一个不错的选择。
2014年,RBG(Ross B. Girshick)大神使用region proposal+CNN代替传统目标检测使用的滑动窗口+手工设计特征,设计了R-CNN框架,使得目标检测取得巨大突破,并开启了基于深度学习目标检测的热潮。
2  1.    R-CNN (CVPR2014, TPAMI2015)
(Region-based Convolution Networks for Accurate Object detection and Segmentation)
上面的框架图清晰的给出了R-CNN的目标检测流程:
(1) 输入测试图像
(2)  利用selective search算法在图像中提取2000个左右的region proposal。
(3) 将每个region proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征。
(4) 将每个region proposal提取到的CNN特征输入到SVM进行分类。
pax
针对上面的框架给出几点解释:
* 上面的框架图是测试的流程图,要进行测试我们首先要训练好提取特征的CNN模型,以及用于分类的SVM:使用在ImageNet上预训练的模型(AlexNet/VGG16)进行微调得到用于特征提取的CNN模型,然后利用CNN模型对训练集提特征训练SVM。
* 对每个region proposal缩放到同一尺度是因为CNN全连接层输入需要保证维度固定。* 上图少画了一个过程——对于SVM分好类的region proposal做边框回归(bounding-box regression),边框回归是对region proposal进行纠正的线性回归算法,为了让region proposal提取到的窗口跟目标真实窗口更吻合。因为region proposal提取到的窗口不可能跟人手工标记那么准,如果region proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。
小结:R-CNN在PASCAL VOC2007上的检测结果从DPM HSC的34.3%直接提升到了66%(mAP)。如此大的提升使我们看到了region proposal+CNN的巨大优势。
但是R-CNN框架也存在着很多问题:
(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器
(2) 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件
(3) 速度慢: 使用GPU, VGG16模型处理一张图像需要47s。
针对速度慢的这个问题,SPP-NET给出了很好的解决方案。
3  1.    SPP-NET (ECCV2014, TPAMI2015)
(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)    先看一下R-CNN为什么检测速度这么慢,一张图都需要47s!仔细看下R-CNN框架发现,对图像提完region proposal(2000个左右)之后将每个proposal当成一张图像进行后续处理(CNN提特征+SVM分类),实际上对一张图像进行了2000次提特征和分类的过程!    有没有方法提速呢?好像是有的,这2000个region proposal不都是图像的一部分吗,那么我们完全可以对图像提一次卷积层特征,然后只需要将region proposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个region proposal的卷积层特征输入到全连接层做后续操作。(对于CNN来说,大部分运算都耗在卷积操作上,这样做可以节省大量时间)。现在的问题是每个region proposal的尺度不一样,直接这样输入全连接层肯定是不行的,因为全连接层输入必须是固定的长度。SPP-NET 恰好可以解决这个问题:
上图对应的就是SPP-NET的网络结构图,任意给一张图像输入到CNN,经过卷积操作我
们可以得到卷积特征(比如VGG16最后的卷积层为conv5_3,共产生512张特征图)。图中的window是就是原图一个region proposal对应到特征图的区域,只需要将这些不同大小window的特征映射到同样的维度,将其作为全连接的输入,就能保证只对图像提取一次卷积层特征。SPP-NET使用了空间金字塔采样(spatial pyramid pooling):将每个window 划分为4*4, 2*2, 1*1的块,然后每个块使用max-pooling下采样,这样对于每个window经过SPP层之后都得到了一个长度为(4*4+2*2+1)*512维度的特征向量,将这个作为全连接层的输入进行后续操作。联想i750
小结:使用SPP-NET相比于R-CNN可以大大加快目标检测的速度,但是依然存在着很多问题:
(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练训练边框回归器
(2) SPP-NET在微调网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)
针对这两个问题,RBG又提出Fast R-CNN, 一个精简而快速的目标检测框架。
4  1.    Fast R-CNN(ICCV2015)
割礼龙凤斗
有了前边R-CNN和SPP-NET的介绍,我们直接看Fast R-CNN的框架图:
与R-CNN框架图对比,可以发现主要有两处不同:一是最后一个卷积层后加了一个ROI pooling layer,二是损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。
(1) ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。
(2) R-CNN训练过程分为了三个阶段,而Fast R-CNN直接使用softmax替代SVM分类,同时利用多任
务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去region proposal提取阶段)。
(3) Fast R-CNN在网络微调的过程中,将部分卷积层也进行了微调,取得了更好的检测效newcom

本文发布于:2024-09-22 21:34:59,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/473572.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:目标   检测   图像   特征   进行   训练   分类   使用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议