人面桃花
首发于人面桃花

人脸检测与深度学习

成文于2016年7月,以调研人脸检测技术的发展为目的,同时也了解一下深度学习相关知识。

文章很长,也没修改,请各位看官指正,有所引用,侵删。

前言:“春风十里,不如懂深度学习”,沸沸扬扬的“围棋人机大战”最终以谷歌AlphaGo击败职业棋手李世石而落下帷幕,我们有幸见证了“人工智能”新里程碑的诞生。借助AlphaGo研究的契机,深度学习(Deep learning,DL)相关方法受到广泛关注与应用。人脸检测作为模式识别经典应用,数据集丰富,一定条件下任务也足够复杂,深度学习正好有用武之地。此调研报告主要从以下几方面组成:

1 人脸检测的发展现状

2 深度学习的发展历史 为什么要用深度学习? 深度学习是什么?

3 基于DL 的人脸检测方法与传统方法的比较(文献算法、商用算法、专利情况)

4 总结与展望 要开始深度学习的硬件需求 未来视觉方面的的研究方向

一、人脸检测

自动人脸检测技术是所有人脸影像分析衍生应用的基础,这些扩展应用细分有人脸识别、人脸验证、人脸跟踪、人脸属性识别,人脸行为分析、个人相册管理、机器人人机交互、社交平台的应用等。

从应用领域上可以分为:①以企事业单位管理及商业保密为主的商用人脸检测;②大规模联网布控的多角度多背景的安防人脸检测;③反恐安全、调查取证、刑事侦查为主的低分辨率尺度多样的军用/警用人脸检测;④当然还有基于互联网社交娱乐应用等的一般人脸检测。在学术研究中分为约束环境人脸检测和非约束环境人脸检测,如下图。

1.人脸检测的发展现状

所谓人脸检测,就是给定任意一张图片,找到其中是否存在一个或多个人脸,并返回图片中每个人脸的位置和范围。人脸检测的研究在过去二十年例取得了巨大进步,特别是Viola and Jones提出了开创性算法,他们通过Haar-Like特征和AdaBoost去训练级联分类器获得实时效果很好的人脸检测器,然而研究指出当人脸在非约束环境下,该算法检测效果极差。这里说的非约束环境是对比于约束情况下人脸数单一、背景简单、直立正脸等相对理想的条件而言的,随着人脸识别、人脸跟踪等的大规模应用,人脸检测面临的要求越来越高(如上图):人脸尺度多变、数量冗大、姿势多样包括俯拍人脸、戴帽子口罩等的遮挡、表情夸张、化妆伪装、光照条件恶劣、分辨率低甚至连肉眼都较难区分等。用经典VJ人脸检测器(2010年更新)在非约束评测集FDDB中验证显示:当限定误检数为10个时,准确率不超过10%;为500个时,检测率仅仅为52.8%。所以丞待更好的算法以应用于大规模安防布控等非约束人脸检测场景。

14年底微软美国研究院首席研究员张正友等在CVIU上发表了非约束人脸检测专题综述,文中指出过去十年里,当限定误检数为0或不超过10个时,人脸检测算法的查准率也就是准确率(true positive rate)提高了65%之多(最新基于CNN的算法和传统Vj-boosting算法的对比结果)。

文中总结了现今出现的优异算法主要得益于以下四点:

①越来越多的鲁棒特征提取方法:LBP、SIFT、HOG、SURF、DAISY等;

②开放的数据库和评测平台:LFW、FDDB(报告中性能对比主要用的一个,更新于2016.4.15)、WIDER(汤晓欧团队发布的,更新于2016.4.17,不完整);

③机器学习方法的发展和应用:boosting、SVM、深度学习等;

④高质量的开源视觉代码库的良好发展与维护:OpenCV、DPM、深度学习框架-caffe等。

人脸检测算法以往被分为基于知识的、基于特征的、基于模板匹配的、基于外观的四类方法。随着近些年DPM算法(可变部件模型)和深度学习CNN(卷积神经网络)的广泛运用,人脸检测所有算法可以总分为两类:①Based on rigid templates:代表有boosting+features和CNN ②Based on parts model:主要是DPM。

基于深度学习的人脸检测方法可以作为第一类方法的代表,同时也是检测某一种深度学习架构或新方法是否有效的评测标准。往往一个简单的卷积神经网络在人脸检测就能获得很好效果,同时有文献验证了深度卷积神经网络的第一层特征和SIFT类型特征极其相似。

DPM算法由Felzenszwalb于2008年提出的一种基于部件的检测方法,对目标的形变具有很强的鲁棒性,目前已成为分类、分割、动态估计等算法的核心组成部分。应用DPM的算法采用了改进后的Hog特征、SVM分类器和滑动窗口检测思想,在非约束人脸检测中取得极好效果。而其缺点主要是计算复杂度过高。

随着DNN的发展,基于深度学习的方法获得了state of art的效果,可见未来人脸检测算法主要的发展将围绕DPM和DCNN展开。同时将DPM和DCNN结合的方法也将是研究趋势。

2.实际应用

在实际中,作为安防企业,人脸检测(识别)技术的研发应用在两方面:

1.基本的人脸考勤和门禁等,这一类属于有约束情况,用传统改进算法足以满足性能;

2.安防实时监控,智能视频人脸分析,海量人脸搜索验证、人群数量统计,防踩踏预警等,这类属于非约束情况,不仅对检测算法的精度(包括误检率)要求很高,而且要确保实时性。

调研发现,人脸检测(识别)实战的场景逐渐从室内演变到室外,从单一路况发展到广场、车站、地铁口等。目前基于后者场景,精度若能稳定达到80%以上就属于顶尖技术了(很难达到)。可以想象,雾霾天戴着口罩,冬天戴着帽子,夏天戴着墨镜等,传统算法的检测是比较难的。

例如,公安部门某次招标给出的人脸测试集中一张图如下,可以看出图片模糊、分辨率低,更有戴口罩等大部分遮挡情况。在这种情况下需要识别精度达到一定要求,并且对于召回率(误检率)有一定的保证,传统检测算法是望而却步的,而且目前现有智能视频分析技术的误报率有60%之多,改进的好点的能降低到30%,但还是极大影响实际应用(天安门广场上过识别后因误报高撤了)。综上所述,研究出克服上述困难的人脸检测算法是人脸分析相关应用的首要任务。

二、深度学习

1.深度学习的背景知识

深度学习是近十年来人工智能领域取得的最重要的突破之一。它在语音识别、自然语言处理、计算机视觉、图像与视频分析、多媒体等诸多领域都取得了巨大成功。

现有的深度学习模型大部分属于神经网络。神经网络的历史可追溯到上世纪四十年代,曾经在八九十年代流行。神经网络试图通过模拟大脑认知的机理,解决各种机器学习的问题。1986年Rumelhart,Hinton和Williams在《自然》发表了著名的反向传播算法用于训练神经网络,直到今天仍被广泛应用。

但是后来由于种种原因,大多数学者在相当长的一段的时间内放弃了神经网络。神经网络有大量的参数,经常发生过拟合问题,即往往在训练集上准确率很高,而在测试集上效果差,究其根本是训练数据较少等造成的。而且计算资源有限,即便是训练一个较小的网络也需要很长的时间。总体而言,神经网络与其它模型相比并未在识别的准确率上体现出明显的优势,而且难于训练。

因此更多的学者开始倾向使用诸如SVM、Boosting、KNN等分类器。这些分类器可以用具有一个或两个隐含层的神经网络模拟,因此被称作浅层机器学习模型。它们不模拟大脑的认知机理;相反,针对不同的任务设计不同的系统,并采用不同的手工设计(hand crafted)的特征,我们可以称之为有监督的学习。例如语音识别采用高斯混合模型(GMM)和隐马尔可夫模型(HMM),物体匹配和识别采用SIFT特征,人脸检测采用Haar-like特征,人脸识别采用LBP特征,行人检测采用HOG特征等。

2006年Hinton在Science发表上了名为“Reducing the dimensionality of data with neural networks”的论文,提出了利用RBM预训练的方法,即用特定结构将网络先初始化到一个差不多“好”的程度,再回到传统的训练方法(反向传播BP)。这样得到的深度网络似乎就能达到一个不错的结果,从一定程度上解决了之前网络“深不了”的问题:

1)多隐层的人工神经网络具有优异的特征学习能力,学习得到的特征对数据有更本质的刻画,从而有利于可视化或分类;

2)深度神经网络在训练上的难度,可以通过“逐层初始化”来有效克服,逐层初始化可通过无监督学习实现。

而这时候深度学习并不是特别火,它的一飞冲天发生在2012年,也是计算机视觉领域最具影响力的突破,Hinton的研究团队采用深度学习获得了ImageNet图像分类的比赛冠军,准确率比第二名好10%。因此在学术界掀起了深度学习研究和应用的热潮。

与此同时大数据的出现在很大程度上缓解了训练过拟合的问题。例如上面提到的拥有上百万有标注图像的ImageNet训练集(后面会细说)、人脸检测领域出现的FDDB数据集等。计算机硬件的飞速发展提供了强大的计算能力,使得训练大规模神经网络(浮点运算要求)成为可能。总之,大数据(labeled)的快速积累、大规模并行计算(GPU)的快速发展、新算法新框架的不断出现共同促使了神经网络技术改头换面,重出江湖摇身一变成为如今的深度学习(deep learning)。

与此同时,在工业界也产生了巨大的影响,引起了磅礴的变迁。在Hinton的科研小组(后面加盟了谷歌)赢得ImageNet比赛之后6个月,谷歌和百度都发布了新的基于图像内容的搜索引擎,沿用了Hinton在ImageNet竞赛中用的深度学习模型,应用在各自的数据上,发现图像搜索的准确率得到了大幅度的提高。百度在2012年就成立了深度学习研究院(IDL),于2014年五月又在美国硅谷成立了新的深度学习实验室,聘请吴恩达担任首席科学家。Facebook于2013年12月在纽约成立了新的人工智能实验室,聘请深度学习领域的著名学者、卷积神经网络(lenet)的发明人YannLeCun(杨立昆)作为首席科学家。2014年1月,谷歌四亿美金收购了一家深度学习的创业公司—DeepMind,这才促成了AlphaGo的诞生。鉴于深度学习在学术和工业界的巨大影响力,2013年MIT Technology Review将其列为世界十大技术突破之首。在这之后,许多基于深度学习的初创公司如雨后春笋般出现,深度学习领域出现了频繁布局等,这里就不赘述了。

2.为什么是深度学习?

基于上一小节的铺垫,我们不由的好奇:深度学习和传统方法相比有哪些关键的不同点,深度学习和真正的人工智能有多大距离吗?它取得如此成功的原因是什么?这几个问题很难解释清楚,先通过下面思维导图概括一下。

分别从五方面来概述为什么深度学习可以这么火:

①有渊源——1981年的诺贝尔医学奖获得者David Hubel和TorstenWiesel发现了视觉系统的信息处理机制,也就是人的视觉系统的信息处理是分级的,高层的特征是低层特征的组合,从低层到高层的特征表示越来越抽象,越来越能表现语义或者意图抽象层面越高,存在的可能猜测就越少,就越利于分类。从某种程度上解释了为什么要用层次结构?为什么要深层?然而人的举一反三、触类旁通等能力是目前机器学习远远不能达到的。只能说深度学习和“人工智能”有一定的渊源,是通往真正的“人工智能”漫漫长路上的一项重要的技术。华为诺亚方舟实验室主任李航提到:“深度学习,至少是目前的深度学习,还是停留在“复杂的模式识别”层面上,正往推理、控制等方面扩展。”未来深度学习将发展到什么程度,还无法下定论,但是可以预见具有历史渊源的它还将是研究和应用热点。

②本质的契合——深度学习泰斗Hinton给出了其理论本质:通过构建多隐层的模型和海量训练数据(可为无标签数据),来(无监督)学习更有用的特征,从而最终提升分类或预测的准确性。“深度模型”是手段,“特征学习”是目的。深度学习本质上是一种具有层次结构的特征学习机——它学习大数据特征,深度刻画数据内在本质。同时这里所谓学习更契合上述“低层组成高层,高层利于分类”的人脑视觉处理机制。

③特征学习的优势——与传统手工设计特征不同,深度学习的自动学习特征一定程度上避免了前者的劣势即“手工选取特征费时费力,需要启发式专业知识,很大程度上靠经验和运气”,我们知道在模式识别领域,一句重要的话是:“Features matter”。获得好的特征是识别成功的关键。那什么是好的特征呢?在一幅影像信息中,各种复杂因素会以非线性的方式结合在一起。例如人脸图像中包含了身份、姿态、年龄、表情和光线等各种信息。深度学习的关键优势就是通过多层非线性映射将这些因素成功的区分,例如在深度模型的最后一个隐含层,不同的神经元代表了不同的因素。如果将这个隐含层当作特征表示,人脸识别、姿态估计、表情识别、年龄估计就会变得非常简单,因为各个因素之间变成了简单的线性关系,不再彼此干扰。说明网络和人脑一样,将原始信号经过逐层的处理,最终从部分到整体抽象为我们要感知的物体。

④深层结构的优势——深度学习意味着深层结构,传统常用的机器学习模型(SVM、boosting)都是浅层结构,有理论证明,三层神经网络模型(经典网络——输入层+一个隐含层+输出层)可以近似任何分类函数。然而针对特定复杂的任务,浅层结构需要的参数和训练样本要多得多。因为浅层模型处理的是局部特征,将高维整体的目标分成许多局部区域,这些区域训练得到一个模板,然后将测试样本与这模板对比判断并预测其类别。当分类或识别问题复杂时,需要的模板要求更高更多,导致参数数量和训练样本呈指数上升。然而深度模型能减少参数的关键在于重复利用中间层的计算单元,如DCNN由于一个映射面上的神经元可共享权值从而大大减少网络自由参数。从人脸图像分析上看,DL可以学习针对人脸图像的分层特征表达。最底层从原始pixel学习滤波器,刻画局部边缘和纹理特征;紧接着中层滤波器通过低层各种边缘滤波器的组合描述出不同类型的人脸器官(如上图,可放大看);到最高层描述的是整个人脸的全局特征。深层结构决定了DL提供的是分布式的特征表示。在最高的隐含层中,每个神经元代表一个属性分类器,例如男女性别、人种、头发颜色等。每个神经元将图像空间一分为二,N个神经元组合可以表达2N个局部区域,而浅层至少需要2N个。可见深度模型表达能力更强且高效。

⑤新颖的算法设计(tricks)——深度模型具有强大的学习、高效的特征表达能力,从像素级原始数据输入,进行逐层提取信息,可以最终输出识别结果,构成一个端到端系统。深度学习获得的模型可以成功应用到其他领域,泛化能力极强。这些归功于越来越多新算法的提出。在CV研究领域中,一些学者将深度学习模型视为黑盒子,实际上研究表明传统计算机视觉系统和深度学习模型存在密切的联系,而且可以利用传统的特征以及上述联系,设计出新的深度模型和新的训练方法。例如用于行人检测的联合深度学习,一个行人检测器包括了特征提取、部件检测器、部件集合形变建模、部件遮挡推理、分类器等等,在联合深度模型算法中,深度模型的每个层和视觉系统的各个模块可以建立起一定的对应关系。当视觉系统中存在一些关键模块在现有的深度学习模型中没有与之对应的层,这就启发了我们设计出新的深度模型,在人脸检测中同样常用的物体部件的几何形变建模DPM,研究证明DPM算法可以有效提高检测率,但是常见的深度模型中没有与之对应的层,有学者就相应地提出了新的形变层和形变池化层以实现这一功能。再进一步,我们在视觉研究中积累的经验可以对深度模型的预训练提供指导,预训练得到的模型至少可以达到与传统方法可比的程度,在此基础上,深度学习还会利用反向传播对所有的层进行联合优化,使它们之间的相互协作达到最优,从而使整个网络的性能得到重大提升。例如在图像及视频相关应用中,最成功的深度卷积网络(DCNN),它采用两个重要操作——卷积与池化正是利用与图像相关的特殊结构而设计的,其中池化起到降维效果同时带来了局部的平移不变性。而且已经有人把卷积核改进到加权PCA矩阵,做出深度特征脸卷积神经网络了。我们希望在未来的研究中可以进一步扩展设计算法结构,获得如旋转不变性、尺度不变性、光照鲁棒性、甚至是对遮挡的鲁棒性等等。值得一提是汤晓欧、王晓刚团队通过加大网络结构,增加训练数据,以及在每一层都加入监督信息进一步改进得到的DeepID2+,实验结果表明它最上层的神经元相应是中度稀疏的,对人脸身份和各种人脸属性具有很强的选择性,对局部遮挡具有很强的鲁棒性,如下图所示,人脸甚至被遮挡70%,该深度算法对人脸验证精度仍有75%之高(墨镜、口罩可破?!)。

综上几点,深度学习之所以能够受到如此广泛关注,是有缘由的,它再也不是神经网络方法打出的一个大噱头,绝不仅仅是简单替换原先系统,而是从理论上的大变革。


3.深度卷积神经网络

深度学习采用了与传统神经网络相似的分层结构,系统由包括输入层、隐层(多层)、输出层组成的多层网络,只有相邻层节点之间有连接,同一层以及跨层节点之间相互无连接,每一层可以看作是一个logistic regression模型;这种分层结构,比较接近人类大脑结构。

深度学习方法有很多,如:自动编码器、稀疏自动编码器、受限波尔兹曼机(RBM)、深度信念网络(DBN)、卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆递归网络(LSTM)等。在上一节提到,在图像识别领域,主要用的是卷积神经网络(CNN),下面围绕CNN作简要介绍,同时借助matlab实现的简单手写字符代码例程CNN-toolbox加以说明。

一个深度卷积神经网络通常包含输入层、多个卷积层(convolutional layer)、对应的降采样层(pooling layer)和归一化层。最后通过全连接层(fully connected layer)将二维的feature maps连接成一个向量输入到最后的分类器,得到概率(二分类时0/1)输出,如下图。

卷积神经网络的概念示范:输入图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如上图,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行降采样求和(池化pooling),加权值、偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进过滤波得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络全连接层,分类得到输出。

卷积层(Convolution:通过若干个滤波器与输入的二维特征平面(第一个卷积层是原始图片)进行卷积提取得到数据的显著性特征(如下左图),滤波器的大小(3X3,一般不大于5X5)决定了提取到的特征对应的感知区域的大小,每一个特征都对应输入空间的一个小的感知区域,提取到的特征通过降采样等操作提高特征对输入样本微小畸变的鲁棒性。在卷积层中,卷积核是在整个输入平而上进行平移的(步长stride=1),不同卷积层的卷积核提取不同尺度的特征,所以卷积神经网络提取的特征具有很高的平移不变性和尺度不变性,下图中,5X5的输入image与3X3卷积核卷积得到3X3的Convolved feature。

池化层(Pooling:图像具有一种“静态”的属性,也就是意味着在一个区域内有用的特征极有可能在另一个区域适用。为了描述大的图像时,又可以做到降维,我们很自然的就对不同位置的特征进行聚合统计,旨在提高网络对输入样本微小形变的鲁棒性,从而增强网络的泛化能力,有以下三种:平均池化Average pooling、最大池化Max pooling、重叠池化Overlapping pooling,一般size=stride,如上右图,上一步得到的卷积特征图的左上角经过特定的运算,可以得到右边池化特征图的值,注意池化作用于图像不重叠区域,有别卷积操作。

上一章中提到过,CNN的一个映射面上的神经元共享权值,因而减少了网络自由参数的个数,降低了网络参数选择的复杂度。卷积神经网络中的每一个特征提取层(C-层)都紧跟着一个用来求局部平均与二次提取的计算层(S-层或P),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力。

测试实验:下面通过matlab实验简要说明,主程序名为test_example_CNN,首先导入深度学习大牛杨立昆的mnist手写数字识别数据库,它共有70000个手写数字样本(28x28,下右图),其中60000个作为训练样本,10000个作测试样本。然后把数据像素/255归一化并转为浮点数。再通过设置网络参数,C1层神经元数6、卷积核尺寸为5,S2降采样一半,C3神经元数12、卷积核尺寸5,S4降采样一半。最后设置训练选项,alpha学习率为1,batchsize批训练样本数50,迭代次数待定等。调用子程序cnnsetup,初始化网络,调用cnntrain,训练cnn,调用cnnff完成前向过程,调用cnnbp计算并传递神经网络的error,计算梯度(修改权值),调用cnnapplygrads把计算出来的梯度加到原始模型上(优化)。最终运行cnntest函数测试优化后模型的准确率,与测试样本的y值对比,输出error值。函数调用如下左图。

迭代1次,耗时102秒,对于10000个测试手写数字样本进行预测,得到准确率88.87%,迭代20次,耗时33分钟,得到准确率99.982%,同时注意到上右图,CNN对输入的图形不需要约束或预处理,颠倒的亦可。可以看出通过一个简单的6层卷积神经网络来解决手写数字识别任务是非常高效的。由于采用的是matlab和一般硬件,故运算时间久。本章最后给出调研中对CNN算法的总结图。

三、基于深度学习的人脸检测

报告开篇前言中提到人脸检测是模式识别经典基础应用,数据集丰富,一定条件下任务也足够复杂。这里我们可以认为当人脸处于非约束环境下的检测是一类足够复杂的任务,基于深度学习的人脸检测将有用武之地,可以获得state of art的性能。那么有几个问题需要展开调研:基于深度学习的人脸检测及相关的技术发展现状怎样?基于DL的人脸检测与传统方法相比有多大优势?商用算法呢?专利情况?

1.基于DL的图像识别技术发展

随着06年深度学习的重出江湖,图像识别领域的许多学者就开始了浅尝辄止的应用研究。早在07年Osadchy基于CNN提出一种新的能实时的同时完成多角度估计和人脸姿态估计的方法,这里的CNN由交替的卷积层和均值采样层组成,包含五个隐藏层,最后一个隐藏层是全连接层,然而效果一般。直至微软研究院在2011年提出了深度神经网络和隐马尔可夫模型(DNN-HMM)成功应用于大词汇量语音识别系统,并惊人地将常规的高斯混合模型(GMM-HMM)的相对误差率减少了16%以上,在语音识别50多年的发展中取得如此卓越的进展具有非常重要的意义。与此同时,素有国际“计算机视觉奥林匹克”之称的ImageNet2012竞赛结果揭晓了(ImageNet是当今计算机视觉领域最具影响力的比赛之一,它的训练和测试样本都来自于互联网图片,训练样本超过百万,任务是将测试样本分成1000类,自2009年起,包括工业界在内的很多计算机视觉小组都参加了每年一度的比赛,而且各个小组的方法逐渐趋同),令人咋舌的是,这次获得图像分类冠军的是第一次参赛的Hinton研究小组。排名2到4位的小组都采用的是传统的计算机视觉方法、基于手工设计的特征学习,他们准确率的差别不超过1%。然而Hinton的深度学习方法比第二名超出了10%以上,这个结果在计算机视觉领域产生了极大的震动。

到了2014年的ImageNet比赛中,用深度学习来进行图像分类已经成为心照不宣的方法。

ImageNet2015竞赛结果于15年底揭晓,参赛的68支队伍均采用了深度学习方法(百度因超过每周测试集使用限制次数,在较短时间内频繁访问测试集,涉嫌作弊撤销参赛资格)。

在图像目标检测(DET)目标分类和定位任务中,微软亚洲研究院(MSRA)的孙剑、何凯明(经典去雾算法作者)等组成的队伍采用“深层残差网络”(deep residual networks)获得了冠军,他们的深度结构实现了152层,“残差学习”最重要的突破在于重构了学习的过程,并重新定向了深层神经网络中的信息流。它很好地解决了此前深层神经网络层级与准确度之间的矛盾。

在视频目标检测任务中,港中大欧阳万里、王晓刚和SenseTime(商汤科技)闫俊杰等(其实是一家)联合组成的团队在视频物体检测竞赛中取得了检测数量、检测准确率两项世界第一的成绩。检测器采用由DeepID-Net和Faster Rcnn组合而成,并引入光流估计和时空信息及视频文理等方法确定最终的候选目标。

在场景目标分类任务中,北京大学信科院林宙辰与中科院计算所研究生申丽组成的团队基于其课题组所提出的新的深度学习优化算法,在场景分类a情形(即只用主办方所提供的训练数据)中提交了五个不同模型,一举包揽前五名(错误率16.8715%-17.3527%),他们采用了部分重叠优化策略来改善卷积神经网络性能(pooling),从而减小底层优化难度,增强高层区分能力,并引入VGG-like深度学习框架以及平衡采样策略来获得更优分类效果。

计算机视觉领域另一个重要的挑战是人脸识别。Labeled Faces in the Wild (LFW)是最流行的人脸识别测试集(同样是马萨诸塞大学计算机系维护,和检测集FDDB并称人脸双雄),创建于2007年。在此前,人脸识别测试集大多采集于实验室约束(直立、正脸)的条件下。而LFW从互联网收集了五千多个名人的人脸照片,用于评估人脸识别算法在非约束条件下的性能。这些照片往往具有复杂的光线、表情、姿态、年龄和遮挡等方面的变化。LFW的测试集包含了6000对人脸图像。其中3000对是正样本,每对的两张图像属于同一个人;剩下3000对是负样本,每对的两张图像属于不同的人。随机猜的准确率是50%。有研究表明,如果只把不包括头发在内的人脸的中心区域给人看,人眼在LFW测试集上的识别率是97.53%。如果把整张图像,包括背景和头发给人看,人眼的识别率是99.15%。经典的人脸识别算法Eigenface(特征脸)在这个测试集上只有60%的识别率。在非深度学习的算法中,最好的识别率是96.33%。目前深度学习普遍可以达到99%的识别率或更高。如百度深度学习研究院99.77%,腾讯优图99.65%,当然也包括飞搜科技99.40%,北京中科奥森(核心算法来自李子青团队)99.77%等公司。

2.基于DL的方法和传统方法的比较

本节将介绍基于深度学习的人脸检测技术及其性能比较。

随着深度学习的新型框架不断提出,以及一些优异tricks的广泛使用(如ReLU激活函数、dropout策略、残差网络等),基于深度学习的方法在各个领域均获得了state of art的效果。研究表明,非约束环境下的传统人脸检测技术发展的关键问题在于:类似haar小波和HOG等特征无法在多样的姿势和光照条件下获取人脸显著信息,可以认为这一局限性大大影响了检测精度,其中特征的提取占的比重大于各种分类器,这也说明了手工设计特征往往难以驾驭各种复杂任务。然而使用深度学习中的DCNN来提取特征成为研究热点。那么对于其获得人脸检测的性能,下面从文献算法和商用算法两方面与传统方法进行对比。

性能对比离不开有效的算法评测集。FDDB是由马萨诸塞大学计算机系维护的一套公开数据库,为来自全世界的研究者提供一个标准的人脸检测评测平台,其中涵盖在非约束环境下(自然环境)的各种姿态的人脸,其中包含5171张人脸的2845张图片作为测试集。作为全世界最具权威的人脸检测评测平台之一,而其公布的评测集也代表了人脸检测的世界最高水平,FDDB更新比较及时,最新更新于4月15日。本报告主要参考FDDB评测数据。

对某一算法的泛化性能(在训练样本中获得的分类器在测试样本中的表现)进行评估,需要有衡量模型泛化能力的评价标准。人脸检测一般采用两种曲线:P-R曲线和ROC曲线。

P-R曲线是指的查准率(precision也称准确率)和查全率(recall也成召回率)的曲线关系,查准率(P)是预测结果为正例实际也是正例的数量(True Positive,TP)占预测为正例总数的比值(可能存在反例预测为正,False Positive,FP),在人脸检测中指检测到真实人脸数占检测器检测到人脸总数的百分比。查全率(R)则是预测结果为正例实际也是正例的数量(True Positive,TP)占实际正例的总数(可能存在误检例,False negative,FN),在人脸检测中指检测到的真实人脸数占测试集中真实人脸总数的百分比。下面用表格来描述。

查准率(TP/P_预测)和查全率(TP/P_真实)是一对矛盾的度量,一般来说,查准率高时,查全率往往偏低,而查全率高时,查准率往往偏低。若希望真实人脸尽可能多地检测出来也就是希望查准率尽可能地高,若希望误检人脸数尽可能的少也就是希望查全率尽可能地高。通常只有在有约束环境下,才可能满足两者都很高。

而ROC曲线则是真正例率和假正例率的曲线,真正例率(True Positive rate,TPR)为TP/P_真实等同于查全率,假正例率(False Positive rate,FPR)为FP/N_真实,前者评估的是漏检水平,后者评估的是误检水平。由于在FDDB评估集中使用的是真正例率(准确率)和假正例数(误检数)的曲线关系。这个关系在人脸检测中是最合理的,我们最希望得到的检测器能在误检数尽可能少的前提下,使得漏检率尽可能的低。下图是近几年来发表的顶级文献算法对比情况,以下表格中甄选了一些算法具体分析,有经典算法、传统算法以及近两年的深度学习算法做比对。数据来自FDDB官方网站。


1.文献算法

表中对比可知传统算法在特征设计上存在一定劣势,深度学习算法普遍具有更优的性能。

2.商用算法

上表可以看出,列举出共十七项商用算法,百度IDL提出DenseBox第三版(加粗蓝色)是性能最优算法。表中有十项是基于深度学习方法的人脸检测算法(加底纹),这些算法普遍比传统算法提高了十几个百分点,在误检数限制为10的情况下(基本没有误检),准确率仍能达到75%-80%,甚至有88.43%之高。在上述两表中提到的文献算法和商用算法只是为了说明深度学习方法的优势,然而相比于人脸比对评测集中许多公司刷到的99.00%+来说,FDDB人脸检测评测集还远未达到顶点(目前最高97.31%),虽然只有仅仅两个百分点左右的差距,如果用比较相似的额外数据作训练集,完全能够刷出更高的分数,但是对于算法研究和实际应用却是极难突破的,因为实际遇到的情况远比FDDB测试集上的复杂多变,随着深度学习和机器视觉技术的发展,我们可以用更好的策略、更优的特征学习、更深的网络将非约束情况下的人脸检测性能逐步提高。

3.专利情况

为进一步调研基于深度学习的人脸检测相关技术,从中国专利局检索并筛选出12例发明专利如下表所示,搜索过程发现,目前大部分人脸检测技术专利还是基于传统方法的,基于深度学习的专利只有近几年获准、为数不多的4项,因为有一部分专利是用深度学习方法来做人脸识别、性别检测、人数估计等实际应用,在这其中,输入神经网络的数据都是预处理剪切并对齐好的人脸,并未使用深度学习方法做人脸检测。不过我们可以预见在深度学习热潮的席卷下,这类专利会逐渐增多,最终应用在实际产品中。

四、总结与展望

深度学习在图像识别中的发展方兴未艾,报告中提到的只是冰山一角,未来还有着巨大的空间。在人脸检测中正趋向使用更大更深的网络结构。ILSVRC2012中Alex Net只包含了5个卷积层和两个全连接层。ILSVRC2014中GooLeNet和VGG使用的网络结构为20层,而之前提到的ILSVRC2015微软亚洲研究院实现了152层的深度结构,更深的网络结构使得反向传播更加困难。与此同时训练数据的规模、耗时也在迅速增加。这迫切需要研究新的算法和开发新的并行计算硬件系统更加有效地利用大数据训练更大更深的模型。

总之,深度学习的本质是通过多层非线性变换,从大数据中自动学习特征,从而替代手工设计的特征。深层的结构使其具有极强的表达能力和学习能力,尤其擅长提取复杂的全局特征和上下文信息,而这是浅层模型难以做到的。一幅图像中,各种隐含的因素往往以复杂的非线性的方式关联在一起,而深度学习可以使这些因素分级开,在其最高隐含层不同神经元代表了不同的因素,从而使分类变得简单。深度模型并非黑盒子,它与传统的计算机视觉体统有着密切的联系,但是它使得这个系统的各个模块(即神经网络的各个层)可以通过联合学习,整体优化,从而性能得到大幅提升。与图像识别相关的各种应用也在推动深度学习在网络结构、层的设计和训练方法各个方面的的快速发展。我们可以预见在未来的数年内,深度学习将会在理论、算法、和应用各方面进入高速发展的时期,期待着愈来愈多精彩的工作对学术和工业界产生深远的影响。

假如要从事深度学习相关领域的研发和应用,可以从下面两方面入手:

1.需要的硬件

调研发现稍微大一点的神经网络,用CPU跑可能要半个月,GPU只需要一天多。因为跑DL吃浮点运算的,虽然CPU也支持浮点运算,但是速度太慢,而GPU出色的浮点计算性能特别提高了深度学习两大关键活动:分类和卷积的性能,同时又达到所需的精准度。如果我们作为兴趣爱好想跑一个简单的深度网络首当其冲的是配置一台入门机器,如果公司研发部门或者科研机构想从事深度学习相关研究开发,首先要做的也是入手适合的硬件系统。NVIDIA公司表示,深度学习需要很高的内在并行度、大量的浮点计算能力以及矩阵预算,而GPU可以提供这些能力,并且在相同的精度下,相对传统CPU的方式,拥有更快的处理速度、更少的服务器投入和更低的功耗。例如,TITAN X在工业标准模型AlexNet上跑,花了不到三天的时间,使用120万个ImageNet图像数据集去训练模型,而使用16G核心的CPU得花上四十多天。如有200万张图片需要学习,用一台双路E5-2650 v2的服务器训练需要16天时间,而如果用阿里云双GPU物理机仅需要1天,阿里云基于公共云平台的高性能计算产品HPC正式对外商用,可通过阿里云官网租用(一个月一台7200,有钱公司用的)。

目前那些走在深度学习前沿公司是怎么做的呢?Microsoft正在尝试使用FPGA加速神经网络计算,并一直在寻找拥有更强大计算能力的可编程逻辑器件。普遍猜测Google拥有GPU的数量在8000个左右,但事实上远远不止。国内语音识别领头羊科大讯飞,据说基于多GPGPU和InfiniBand构建了一个环形的并行学习架构,用于DNN、RNN、CNN等模型训练,效果不错。同时科大讯飞为打造“讯飞超脑”,除了GPU,还考虑借助深度定制的人工神经网络专属芯片来打造更大规模的超算平台集群。

除了英伟达的GPU,还有其他选择,如IBM主导的SyNAPSE巨型神经网络芯片(类人脑芯片),功率低可扩展。在70毫瓦的功率上提供100万个“神经元”内核、2.56亿个“突触”内核以及4096个“神经突触”内核,甚至允许神经网络和机器学习负载超越了冯·诺依曼架构,二者的能耗和性能,都足以成为GPU潜在的挑战者。浪潮开发了一个支持多GPU的Caffe,曙光也研发了基于PCI总线的多GPU的技术,对熟悉串行程序设计的开发者更加友好。相比之下,FPGA可编程芯片或者是人工神经网络专属芯片对于植入服务器以及编程环境、编程能力要求更高,还缺乏通用的潜力,目前不适合普及。但值得注意的是Intel去年斥巨资167亿美元收购了世界两大FPGA公司之一的Altera,期待CPU和FPGA的强强结合,如果发挥好FPGA的低功耗和高性能硬件加速,未来的市场前景将十分光明,深度学习的硬件选择将更加多样。

做深度学习嵌入式应用的话可以选择NVIDIA JetPack,它是针对Jetson嵌入式开发平台的开发者提供的工具,通过最新的GIE(GPU推断引擎),可以让Jetson TX1的处理能力达到24张图像每秒每瓦特。研究人员首推DIGITS DevBox,采用四个TITAN X GPU,从内存到I/O的每个组件都进行了最佳化调试,预先安装了开发深度神经网络所需要使用到的各种软件,包括:DIGITS 软件包,三大流行深度学习架构Caffe、Theano和Torch,以及NVIDIA完整的GPU加速深度学习库cuDNN 2.0,可是这些对于个人普及入门来说非常不现实,因为Devbox售价10万。下面总结了个人深度学习入门配置以供参考(1.5-2万)。

2.算法研究

在与图像和视频相关的应用中,深度模型的输出预测(例如分割图或物体检测框)往往具有空间和时间上的相关性,如Faceness。通过研究深度模型和传统计算机视觉系统之间的关系,不但可以帮助我们理解深度学习成功的原因,还可以启发新的模型和训练方法,如联合深度学习和多阶段深度学习,未来这方面还可以有更多的工作,如人脸检测领域针对遮挡、图像模糊等做更多的改进。

虽然深度学习在实践中取得了巨大成功,通过大数据训练得到的深度模型体现出的特性(例如稀疏性、选择性、和对遮挡的鲁棒性——Deepid2+)引人注目,其背后的理论分析并未完善,大部分是经验性策略(如ReLU等),从本质上说明为什么这些tricks拥有如此好的效果,我们将有许多工作需要在未来发掘。还有例如,如何更好调参,何时收敛,如何取得较好的局部极小点,能否引入仿生算法对参数优化,每一层变换取得了那些对识别有益的不变性,又损失了那些信息等等。最近Mallat(小波变换的推动者)利用小波对深层网络结构进行了量化分析,是在这一个方向上的重要探索。

在应用领域上,深度学习在视频分析识别的使用还远未成熟。从ImageNet训练得到的图像特征深度模型可以直接有效地应用到各种与图像相关的识别任务(例如图像分类、图像检索、物体检测和图像分割等等),和其它不同的图像测试集,具有良好的泛化性能。然而在视频分析中,描述视频的静态图像特征,可以采用上述的深度模型,但是至今还没有得到类似的可用于视频分析的特征(动态)。要达到这个目的,不但要建立大规模的训练数据集(最新建立了包含一百万YouTube视频的数据库),还需要研究适用于视频分析的新的深度模型。此外训练用于视频分析的深度模型的计算量也会大大增加。深度学习在视频分类上的应用总体而言还处于起步阶段,未来还有很多工作要做。

深度学习在图像识别上的巨大成功,必将对于多媒体相关的各种应用产生重大影响。期待着更多的学者和工程人员在不久的将来研究和探索如何利用深度学习得到的图像特征,推动各种应用的快速进步。

编辑于 2017-02-21

文章被以下专栏收录