基于深度学习框架caffe的人脸检测

Posted VTime

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于深度学习框架caffe的人脸检测相关的知识,希望对你有一定的参考价值。

1

什么是深度学习


深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种深度学习结构。深度学习通过组合低层特征形成更加抽象的高层表示属性类别或特征,以发现数据的分布式特征表示。

深度学习的概念由Hinton等人于2006年提出。基于深度置信网络(DBN)提出非监督贪心逐层训练算法,为解决深层结构相关的优化难题带来希望,随后提出多层自动编码器深层结构。此外Lecun等人提出的卷积神经网络是第一个真正多层结构学习算法,它利用空间相对关系减少参数数目以提高训练性能。

深度学习是机器学习中一种基于对数据进行表征学习的方法。观测值(例如一幅图像)可以使用多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。而使用某些特定的表示方法更容易从实例中学习任务(例如,人脸识别或面部表情识别)。深度学习的好处是用非监督式或半监督式的特征学习和分层特征提取高效算法来替代手工获取特征。

深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。同机器学习方法一样,深度机器学习方法也有监督学习与无监督学习之分.不同的学习框架下建立的学习模型很是不同.例如,卷积神经网络(Convolutional neural networks,简称CNNs)就是一种深度的监督学习下的机器学习模型,而深度置信网(Deep Belief Nets,简称DBNs)就是一种无监督学习下的机器学习模型。


2

Caffe是什么样的框架


Caffe,全称Convolutional Architecture for Fast Feature Embedding,作者是博士毕业于UC Berkley的贾扬青。官方网址是http://caffe.berkeleyvision.org/,完全开源的代码,核心语言是C++,它支持命令行、Python和Matlab接口,它既可以在CPU上运行也可以在GPU上运行。

Caffe的设计:基本上,Caffe follow了神经网络的一个简单假设----所有的计算都是以layer的形式表示的,layer做的事情就是take一些数据,然后输出一些计算以后的结果,比如说卷积,就是输入一个图像,然后和这一层的参数(filter)做卷积,然后输出卷积的结果。每一个layer需要做两个计算:forward是从输入计算输出,然后backward是从上面给的gradient来计算相对于输入的gradient,只要这两个函数实现了以后,我们就可以把很多层连接成一个网络,这个网络做的事情就是输入我们的数据(图像或者语音或者whatever),然后来计算我们需要的输出(比如说识别的label),在training的时候,我们可以根据已有的label来计算loss和gradient(梯度),然后用gradient来update网络的参数。通俗点说卷积就是把二维图像矩阵通过某种操作变成另外一堆二维矩阵,这个过程就是一个小积木,然后所有的积木都是通过矩阵运算拼到一起去,变成一个大的构建,这个大构建上面有很多未知的参数,然后弄一个算法比如梯度下降把这些参数确定出来。

基于深度学习框架caffe的人脸检测

好了,对卷积神经网络有所了解,就可以看看caffe的代码了,要读懂caffe,首先要熟悉Blob,Layer,Net,Solver这几个大类。这四个大类自下而上,环环相扣,贯穿了整个caffe的结构,下面先分别简单地介绍一下这四个类的主要作用。

Blob 作为数据传输的媒介,无论是网络权重参数,还是输入数据,都是转化为Blob数据结构来存储

Layer作为网络的基础单元,神经网络中层与层间的数据节点、前后传递都在该数据结构中被实现,层类种类丰富,比如常用的卷积层、全连接层、pooling层等等,大大地增加了网络的多样性

Net作为网络的整体骨架,决定了网络中的层次数目以及各个层的类别等信息

Solver作为网络的求解策略,涉及到求解优化问题的策略选择以及参数确定方面,修改这个模块的话一般都会是研究DL的优化求解的方向。


3

基于卷积神经网络(CNN)的人脸检测


我是根据A Convolutional Neural Network Cascade for Face Detection这篇paper来实现的,作者是Haoxiang Liy, Zhe Linz, Xiaohui Shenz, Jonathan Brandtz, Gang Hua。

基于卷积神经网络的人脸检测方法,包括训练阶段和测试阶段;在训练阶段,将训练样本输入卷积神经网络,获得卷积神经网络的连接权值和偏置值;在测试阶段,读入视频图像,当检测到有运动物体时,提取出感兴趣区域,用n*n像素大小的块每次移动I个像素,对感兴趣区域进行分块处理,得到若干图片,将分块后的图片缩放至与训练样本的大小相同,并将这些图片输入已训练完成的卷积神经网络进行分类,其中50 < η < 70。其中,上述卷积神经网络的结构为8层,包括依次连接的输入层、Cl层、S2层、C3层、S4层、C5层、S6层和输出层,Cl层、C3层、C5层为卷积层,S2层、S4层、S6层为下采样层,Cl层有8个56*56像素大小的特征map,S2层有8个28*28像素大小的特征map,C3层有24个24*24像素大小的特征map,S4层有24个12*12像素大小的特征map,C5层有50个8*8像素大小的特征map,S6层有50个4*4像素大小的特征map,输出层包括I和O两个单元,分别表示人脸和非人脸。

基于深度学习框架caffe的人脸检测


4

后记


当时做这个项目时face++小组的人脸检测准确率已经超过Google了,他们的网站https://www.faceplusplus.com.cn/,最近我发现百度云也可以在网页上进行人脸检测了,https://cloud.baidu.com/product/face/detect。当然这些都不会开源的,但由于可见基于深度学习的人脸检测这一课题的火热程度,因为图像处理是最适用于深度学习场景的,而人脸识别和检测是最具有发展前景的项目之一。本来随着实现A Convolutional Neural Network Cascade for Face Detection这篇论文,我已经将这个课题放在了一边,但因为各方面的机缘巧合,又重拾起来,写下了这篇算是科普意义的文章。之后如果有新的成果,会及时和大家分享。

以上是关于基于深度学习框架caffe的人脸检测的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV+OpenVINO实现人脸Landmarks实时检测

OpenCV+OpenVINO实现人脸Landmarks实时检测

基于AM5728 Caffe 机器学习案例-darknet物体分类与人脸识别

PyTorch深度学习实战 | 基于ResNet的人脸关键点检测

『深度学习项目四』基于ResNet101人脸特征点检测

21个项目玩转深度学习:基于TensorFlow的实践详解06—人脸检测和识别——MTCNN人脸检测