Skip to content

Commit

Permalink
add citation
Browse files Browse the repository at this point in the history
  • Loading branch information
liuwuliuyun committed May 25, 2018
1 parent 8afac4b commit f65c0a7
Show file tree
Hide file tree
Showing 8 changed files with 278 additions and 277 deletions.
443 changes: 223 additions & 220 deletions bib/thesis.bib

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion tex/abstract.tex
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

\begin{abstract}

无感知人脸识别系统是一种不依赖待检测者主动配合的人脸识别系统。这种系统利用监控摄像头的实时画面,对其中的人脸进行检测、计数和识别。在教室点名、公司打卡签到等实际场景中有广泛的应用。由于不依赖于被检测人的配合,无感知人脸的图像会呈现偏转、模糊和遮挡等特征,这对检测、识别和检索算法都提出了非常高的要求。在本系统中,我们充分利用深度学习在人脸检测和识别的优势,选取了SSH算法[1]进行人脸检测,选取了ArcFace算法[2]进行识别。于此同时,我们还从实际监控摄像中提取数据,建立了无感知检测和识别的测试集CFDDB[3]
无感知人脸识别系统是一种不依赖待检测者主动配合的人脸识别系统。这种系统利用监控摄像头的实时画面,对其中的人脸进行检测、计数和识别。在教室点名、公司打卡签到等实际场景中有广泛的应用。由于不依赖于被检测人的配合,无感知人脸的图像会呈现偏转、模糊和遮挡等特征,这对检测、识别和检索算法都提出了非常高的要求。在本系统中,我们充分利用深度学习在人脸检测和识别的优势,选取了SSH算法\cite{najibi2017ssh}进行人脸检测,选取了ArcFace算法\cite{deng2018arcface}进行识别。于此同时,我们还从实际监控摄像中提取数据,建立了无感知检测和识别的测试集CFDDB。

在本系统中另一个突出的问题是如何并行处理大量的图片识别请求,针对这个问题,本系统采用GPU服务器来对核心算法进行加速。同时设计了使用Kubernetes管理Docker容器,并将容器和GPU绑定的架构。通过这种架构设计,本系统将不仅支持GPU热插拔,而且极大的缩短了系统升级的停机时间,最终实现一个高效可靠的无感知人脸识别系统。

Expand Down
22 changes: 10 additions & 12 deletions tex/chap0.tex
Original file line number Diff line number Diff line change
Expand Up @@ -22,21 +22,21 @@ \subsection{人脸的检测与识别}

早期的想法是请专家设计一些特征分类器,然后将一张图片的每一块区域都使用特征分类器进行分类,进而区分出人脸区域和非人脸区域。而这种人工设计分类器的分类效果并不能令人满意,因此研究者们开始利用机器学习的算法来训练分类器。这种方法首先需要寻找一类区分度强的,而且不易被光照强度等外界环境干扰的特征。然后将某一个训练数据集的图片分为含有人脸和不含人脸两种集合,分别从两种集合上提取某类特征。之后将区分效果较好的特征组合起来,得到完整的人脸特征分类器。使用的时候,将图片的每一个区域使用特征分类器进行分类,将分类的结果组合得到图片中的人脸区域。

经过机器学习的分类器比起人工设计的分类器效果更好,其中的代表有基于HAAR特征级联分类器[1]和基于HOG特征的分类器[2]。这两种分类器直到现在依然在一些计算机视觉相关的开源库中使用。
经过机器学习的分类器比起人工设计的分类器效果更好,其中的代表有基于HAAR特征级联分类器\cite{viola2004robust}和基于HOG特征的分类器\cite{dalal2005histograms}。这两种分类器直到现在依然在一些计算机视觉相关的开源库中使用。

随着时间的推移,深度学习在计算机视觉领域开始大放异彩。由于深度神经网络有着非常强的表征能力和学习能力,使用深度学习的人脸识别算法在识别精度上迅速超过了传统的方法。其中具有代表性的基础网络结构包括VGG系列网络[3],ResNets系列网络[4]等。而基于这些网络,研究者们针对不同场景下不同大小的人脸不断进行优化。在提升精度的同时提升运算速度,最终训练出了高效的人脸检测器。而我们尤其关注针对小脸检测进行优化的检测器。它们的代表为SSH检测器[5]和Tiny face检测器[6]
随着时间的推移,深度学习在计算机视觉领域开始大放异彩。由于深度神经网络有着非常强的表征能力和学习能力,使用深度学习的人脸识别算法在识别精度上迅速超过了传统的方法。其中具有代表性的基础网络结构包括VGG系列网络\cite{simonyan2014very},ResNets系列网络\cite{he2016deep}等。而基于这些网络,研究者们针对不同场景下不同大小的人脸不断进行优化。在提升精度的同时提升运算速度,最终训练出了高效的人脸检测器。而我们尤其关注针对小脸检测进行优化的检测器。它们的代表为SSH检测器\cite{najibi2017ssh}和Tiny face检测器\cite{hu2017finding}

关注这两个基于卷积神经网络的检测器是因为它们在非受控环境下的人脸检测的测试集上得到了非常好的测试结果。我们希望通过实验来探究这两个检测器在无感知的人脸检测环境下是否依然有足够高的召回率与较低的计算代价。

人脸检测技术的飞速发展的同时,研究者们为了衡量算法的优劣,建立了多个公开的数据集。其中有代表性的有LFW数据集[7]、WIDER FACE数据集[8]等。这些数据集中大多会区分训练集和测试集两种子集。其中WIDER FACE数据集还包括了人脸大小、姿势、遮挡、表情、妆容、光照条件等标记,被许多人脸检测算法广泛使用。而这些数据集中,并没有针对无感知人脸检测所设计的数据集。因此,我们自己建立了符合无感知人脸检测这一应用场景的数据集。
人脸检测技术的飞速发展的同时,研究者们为了衡量算法的优劣,建立了多个公开的数据集。其中有代表性的有LFW数据集\cite{huang2007labeled}、WIDER FACE数据集\cite{yang2016wider}等。这些数据集中大多会区分训练集和测试集两种子集。其中WIDER FACE数据集还包括了人脸大小、姿势、遮挡、表情、妆容、光照条件等标记,被许多人脸检测算法广泛使用。而这些数据集中,并没有针对无感知人脸检测所设计的数据集。因此,我们自己建立了符合无感知人脸检测这一应用场景的数据集。

在这个数据集中,我们使用了从教室摄像头获取的人脸图像,以期最接近实际使用场景。同时请几位支愿者进行人工标注并纠错,确保数据集中标记的准确性。同时我们在设计时充分考虑了数据集的可扩展性,使得数据集中的标记内容可以非常容易的获得扩充。

目前数据集的规模并不大,作为训练集使用容易出现过拟合等现象。因此我们将整个数据集用作测试集,并定义了测试人脸检测算法的多种参数,以衡量不同的人脸检测算法在无感知检测时的优劣。

通常而言,检测出来的人脸区域并不能直接用于识别。为了保证识别的准确性,普遍的做法时找到检测算法得到的人脸区域的多个特征点,然后根据特征点的位置对人脸进行姿势的校正。MTCNN网络[7]不仅能够用于人脸的检测,而且在同时可以识别出人脸的多个特征点,被广泛地运用于人脸姿势的校正中。
通常而言,检测出来的人脸区域并不能直接用于识别。为了保证识别的准确性,普遍的做法时找到检测算法得到的人脸区域的多个特征点,然后根据特征点的位置对人脸进行姿势的校正。MtCNN网络\cite{zhang2016joint}不仅能够用于人脸的检测,而且在同时可以识别出人脸的多个特征点,被广泛地运用于人脸姿势的校正中。

人脸识别的过程在这里被定义为从检测到的人脸区域产生人脸特征向量的过程。产生人脸特征向量的方法多种多样,其中深度网络提取特征点的ArcFace算法[8]具有极高的精确性,在一些公开测试集上的精度达到了世界先进水平。
人脸识别的过程在这里被定义为从检测到的人脸区域产生人脸特征向量的过程。产生人脸特征向量的方法多种多样,其中深度网络提取特征点的ArcFace算法\cite{deng2018arcface}具有极高的精确性,在一些公开测试集上的精度达到了世界先进水平。

\subsection{模糊搜索}

Expand All @@ -58,16 +58,14 @@ \section{设计思路}

\section{设计工具}

在计算机视觉领域的发展过程中,很多优秀的工程师开发了丰富的开源工具,其中应用最为广泛的就是OpenCV。OpenCV最初由Intel公司组织开发,现在已经演化成为了一个跨平台的开源计算机视觉实时演算工具包。OpenCV功能强大,已经将图片读写、图片格式转换、HAAR特征级联分类器等常用功能封装成类或者类函数,而且底层使用C++实现,有着优秀的计算性能。于此同时,其还实现了Python脚本语言的调用接口,简单易用,因此被本系统的图像处理部分使用。
在计算机视觉领域的发展过程中,很多优秀的工程师开发了丰富的开源工具,其中应用最为广泛的就是OpenCV\cite{opencv_library}。OpenCV最初由Intel公司组织开发,现在已经演化成为了一个跨平台的开源计算机视觉实时演算工具包。OpenCV功能强大,已经将图片读写、图片格式转换、HAAR特征级联分类器等常用功能封装成类或者类函数,而且底层使用C++实现,有着优秀的计算性能。于此同时,其还实现了Python脚本语言的调用接口,简单易用,因此被本系统的图像处理部分使用。

而现在利用深度神经网络的算法大多数需要一定的框架支持,而本系统中使用了Caffe和TensorFlow两种开源框架
而现在利用深度神经网络的算法大多数需要一定的框架支持,而本系统中使用了Caffe\cite{jia2014caffe}和TensorFlow\cite{tensorflow2015-whitepaper}两种开源框架

Caffe由Berkeley Vision and Learning Center和众多社区贡献者共同开发,以表达式、速度和模块化为核心的深度学习框架。本系统中使用卷积神经网络的SSH检测器就使用了这种开源框架。由于Caffe支持使用GPU加速,使得SSH检测器的时间性能大大提升。但是Caffe缺乏一套成熟的部署方案而且对嵌入式设备的支持力度较小,给系统的架构设计带来了一定的限制。

TensorFlow最早是由Google Brain团队开发的一个使用数据流图进行数值计算的深度学习开源框架。TensorFlow以数据流图作为核心,图中的节点代表数学运算,而图中的边则代表在这些节点之间传递的多维数组(张量)。本系统中MTCNN、Tiny face检测器与ArcFace算法均使用了这种框架。TensorFlow支持使用GPU进行加速运算,同时支持使用TFserving和Docker进行规模化部署和更新。针对嵌入式设备,TensorFlow提供了TensorFlow Lite优化深度网络在移动设备、嵌入式设备上的运行效率。使用TensorFlow框架,不仅提升了运算速度而且为系统的架构设计和部署都带来了很大的方便。
TensorFlow最早是由Google Brain团队开发的一个使用数据流图进行数值计算的深度学习开源框架。TensorFlow以数据流图作为核心,图中的节点代表数学运算,而图中的边则代表在这些节点之间传递的多维数组(张量)。本系统中MtCNN、Tiny face检测器与ArcFace算法均使用了这种框架。TensorFlow支持使用GPU进行加速运算,同时支持使用TFserving和Docker容器进行规模化部署和更新。针对嵌入式设备,TensorFlow提供了TensorFlow Lite优化深度网络在移动设备、嵌入式设备上的运行效率。使用TensorFlow框架,不仅提升了运算速度而且为系统的架构设计和部署都带来了很大的方便。

深度学习框架进行运算加速往往依赖于GPU,而我们在这个系统中使用了Nvidia公司开发的通用并行计算架构CUDA。这个架构赋予了GPU解决复杂计算问题的能力,尤其是图像处理中常见的矩阵运算,因此提高了整个系统的运算效率。
深度学习框架进行运算加速往往依赖于GPU,而我们在这个系统中使用了Nvidia公司开发的通用并行计算架构CUDA\cite{nickolls2008scalable}。这个架构赋予了GPU解决复杂计算问题的能力,尤其是图像处理中常见的矩阵运算,因此提高了整个系统的运算效率。

CuDNN是Nvidia公司推出的针对深度神经网络的GPU加速库,Caffe和TensorFlow等深度学习框架的加速都依赖于它。CuDNN对常见的深度神经网络中的操作使用CUDA进行了精细优化,使得研究者们可以专心构建网络而不用花费大量时间优化网络。

Docker 是一种比虚拟机更加轻便快捷的应用容器框架,本系统使用Docker封装系统的人脸检测模块、人脸识别模块与匹配模块。在极大的优化了系统的可扩展性的同时也为系统的安全提供了可靠的保障。
CuDNN\cite{chetlur2014cudnn}是Nvidia公司推出的针对深度神经网络的GPU加速库,Caffe和TensorFlow等深度学习框架的加速都依赖于它。CuDNN对常见的深度神经网络中的操作使用CUDA进行了精细优化,使得研究者们可以专心构建网络而不用花费大量时间优化网络。
Loading

0 comments on commit f65c0a7

Please sign in to comment.