> ## Content Index
> Fetch the complete content index at: https://yinguobing.com/blog/llms.txt
> Use this file to discover other available public pages before exploring further.

# 基于深度学习的人脸特征点检测 - 数据与方法
- URL: https://yinguobing.com/blog/facial-landmark-localization-by-deep-learning-data-and-algorithm/
- Published: 2017-12-05T12:37:51.000Z
- Updated: 2022-05-29T05:35:57.000Z
- Description: 上一篇博文介绍了人脸检测与面部特征点检测的背景，并提到了当前技术方案存在特征点位置不稳定的缺点，需要新的解决方案。本文将对困难的解决方案做出介绍。
- Author: 尹国冰
- Tags: 深度学习, 新手入门

在[上一篇博文](https://yinguobing.com/blog/facial-landmark-localization-by-deep-learning-background/)中，我们了解了人脸检测与面部特征点检测的背景，并提到了当前技术方案存在特征点位置不稳定的缺点，需要新的解决方案。那么，目前又有哪些方案可以用呢？

## Github rocks!

在程序员眼中，Github恐怕是比微信还要重要的存在了吧！以“face landmark”为关键词，在Github中一共检索到171项结果。有两项repo吸引了我的注意力，一项是OpenFace[\[1\]](#fn1)，在Github上有1.7k多star数；另一项为face-landmark-localization[\[2\]](#fn2)，作者是复旦大学的一名博士。

### OpenFace

OpenFace来自CMU大学，在简介中它是这样描述的：

> OpenFace – a state-of-the art tool intended for facial landmark detection, head pose estimation, facial action unit recognition, and eye-gaze estimation.

此言不假，经过我的实际测试，OpenFace可以实时稳定的对人脸的面部特征点进行检测。不仅如此，它还提供了表情检测与注视点检测的功能，非常强大。

![cmu-openface](https://yinguobing.com/blog/content/images/2017/12/cmu-openface.jpg)

OpenFace的原理可以参见他们发表的论文，在repo主页可以看到。

### face-landmark-localization

从说明与代码来看，作者用dlib作为人脸面部检测器，使用深度学习框架caffe作为特征提取以及特征点的检测器，同时姿态的输出也是基于神经网络。并且在较早的一项issue[\[3\]](#fn3)中，作者表示她的训练数据来源于300-W。

![qixing-landmark](https://yinguobing.com/blog/content/images/2017/12/qixing-landmark.jpg)

哈？300-W又是神马？

## 人脸特征点检测大赛300-W

经过一番检索，终于在Imperial College London（帝国理工学院）的网站上找到了真身[\[4\]](#fn4)。300-W是300 Faces In-The-Wild Challenge的简称，该项竞赛专注于人脸特征点的检测，并且与ICCV这类著名的计算机视觉活动相伴举行。在该竞赛中，参赛队伍需要从600张图片中检出人脸，并且将面部的68个特征点全部标记出来。更加幸运的是，2016的这篇论文[\[5\]](#fn5)中，作者对现有的9个人脸特征点公开数据库以及2015年300-W竞赛的结果做了详细的描述，一下子节省了我大量的时间。

站在前人肩膀上大概就是这种感觉吧！

### 人脸特征点数据库

论文中工涉及到了9个人脸特征点数据库，并分成两类。

1. 可控环境下获得的数据：Multi-PIE、XM2VTS、FRGC-V2和AR。
2. 不可控环境下获得的数据：LFPW、HELEN、AFW、AFLW和IBUG。

这些数据库的来源多种多样，并且每个从数据库都采用了不同的标记策略和标记数量，导致各个库之间根本不具可比性。幸运的是，作者采用了一种半监督的方法，重新对这些数据库进行了标记！你以为这就很了不起的时候，他们把标记后的数据[\[6\]](#fn6)免费放出来了...

不过，公开的标记数据并不包含全部9个数据库，仅仅包含7个，且有一些数据库仅仅提供了特征点的坐标，不包含图像数据。我简单整理了一下。

- 300-W：图片+数据。
- XM2VTS：仅数据，图片需要付费购买。
- FRGC Ver.2：仅数据，图片需要获得授权才能拿到。
- LFPW：图片+数据。
- HELEN：图片+数据。
- AFW：图片+数据。
- IBUG：图片+数据。

所以，最后拿到手的有效数据集只有5个：300-W、LFPW、HELEN、AFW和IBUG。总共3.2GB，大约有4000多份样本。这个数量的样本恐怕是不够的。

在浏览官网的时候有一个意外的发现：300-W竞赛的进阶版300-VW[\[7\]](#fn7)，同样是面部特征点的检测，只不过检测的对象从图片变成了视频。数据集提供了几乎每一帧的人脸特征点数据。所以一段20秒的视频可以提取出约500张画面，300-VW里大约有500多段视频，所以理论上可以提取出大概250000份图片样本！

啊！此刻心中的感觉复杂而难以描述。

### 检测方法

除了数据集意外，论文还对2015年提交的TOP5检测方法做了总结概括。其中一篇采用深度学习的方案吸引了我的注意力。论文题为”Approaching Human Level Facial Landmark Localization by Deep Learning[\[8\]](#fn8)”，作者来自国内一家知名的公司旷视科技[\[9\]](#fn9)。

这篇论文中，作者采用了两级神经网络级联的方式，实现了由粗到细的landmark检测。

第一级网络负责从图片中初步检出68个特征点的大致位置。不算pooling layer共计10层，输入层大小为128x128，8个卷积层，2个全连接层。在第一级网络完成检测后，根据检测到的68个特征点计算人脸姿态，然后将姿态“矫正”到接近正脸，然后把矫正后的、分别包含68个点的较小一点的图像区域输入到第二级神经网络。

第二级神经网络负责对检测结果进行细化，输出最终的坐标。这一级不算pooling layer共计7层，输入层大小28x28，5个卷积层，2个全连接层。需要注意的是，第二级神经网络的数量众多，每一个特征点对应了一个神经网络。

旷视科技应该是将该方法用在人脸识别上。如果需求精度不高，可以考虑仅仅使用第一级网络结构输出68个特征点的位置。

## 接下来的计划

数据有了，方法上神经网络看起来有戏。接下来就该动手了！在下一篇文章中，我们将对现有数据进行分析，尝试找到适合神经网络训练的数据集表示方法。

---

1. [https://github.com/TadasBaltrusaitis/OpenFace](https://github.com/TadasBaltrusaitis/OpenFace?ref=yinguobing.com) [↩︎](#fnref1)
2. [https://github.com/qiexing/face-landmark-localization](https://github.com/qiexing/face-landmark-localization?ref=yinguobing.com) [↩︎](#fnref2)
3. [https://github.com/qiexing/face-landmark-localization/issues/5](https://github.com/qiexing/face-landmark-localization/issues/5?ref=yinguobing.com) [↩︎](#fnref3)
4. [300 Faces In-the-Wild Challenge (300-W)](https://ibug.doc.ic.ac.uk/resources/300-W/?ref=yinguobing.com) [↩︎](#fnref4)
5. [300 Faces In-The-Wild Challenge: database and results](https://ibug.doc.ic.ac.uk/media/uploads/documents/sagonas%5F2016%5Fimavis.pdf?ref=yinguobing.com) [↩︎](#fnref5)
6. [iBUG Facial point annotations](https://ibug.doc.ic.ac.uk/resources/facial-point-annotations/?ref=yinguobing.com) [↩︎](#fnref6)
7. [300 Videos in the Wild (300-VW) Challenge & Workshop (ICCV 2015)](https://ibug.doc.ic.ac.uk/resources/300-VW/?ref=yinguobing.com) [↩︎](#fnref7)
8. [Approaching Human Level Facial Landmark Localization by Deep Learning](https://www.sciencedirect.com/science/article/pii/S0262885615001341?ref=yinguobing.com) [↩︎](#fnref8)
9. [https://www.megvii.com/](https://www.megvii.com/?ref=yinguobing.com) [↩︎](#fnref9)