JuneoXIE
5/16/2019 - 9:01 AM

头部姿态估计

数据集

人脸数据集汇总博文

  1. 300W
    是由AFLW、AFW、HELEN、IBUG、LFPW、LFW等数据集组成的数据库。
  2. 300W-LP
    是来自于300W数据集做大型人脸姿态预测的一个综合数据库。
    百度网盘资源 密码:ij6q
  3. BIWI
    总共约15000张RGB-D图像,包括20个人14名男性,6名女性
    姿态角的范围:yaw偏航角为±75度,pitch俯仰角为±60度,roll旋转角为±50度
    给定参数:ground truth pose angles,calibration matrix,head center, the position of the nose tip。
  4. AFLW2000
    数据库介绍

1. QuatNet

《QuatNet: Quaternion-based Head Pose Estimation with Multi-regression Loss》 2018,Heng-Wei Hsu et al. QuatNet

论文笔记

提出了multi-regression loss function来使用CNNs进行头部姿态估计,输入采用RGB,并没有深度(Depth)信息。损失函数为L2 regression loss结合ordinal regression loss。

1) ordinal regression loss是被用于去处理non-stationary property,学习鲁棒的特征。
The non-stationary property:不同的头部姿态角度面部的特征将会发生变化。
Ordinal regression learns去预测labels的排序,而非label值本身,当labels的顺序扮演着更加重要的角色相比于它们实际的数值,这是非常重要和有效的。

2) L2 regression loss利用特征去提供更加精确的角度预测

3) Label:本文使用Euler angle和quaternions作为网络回归的结果,发现基于四元数的效果更好,因此论文题目为:QuatNet。

2. Fine-Grained Head Pose Estimation Without Keypoints

《Fine-Grained Head Pose Estimation Without Keypoints》 2018,Nataniel Ruiz Eunji Chong James M. Rehg. multi-loss

论文笔记
代码链接

本文提出了一种简洁和鲁棒的方式来确定姿态,通过训练一个multi-loss的卷积神经网络。 直接使用RGB结合分类和回归损失来预测Euler angles(yaw,pitch and roll)。

3. SDM (Supervised Descent Method)

Supervised Descent Method and its Applications to Face Alignment,CVPR 2013
代码1
代码2
论文笔记

主要提出了一种名为SDM(Supervised Descent Method)的方法,用来最小化非线性最小二乘(Non-linear Least Squares)目标函数,即目标函数是均方误差。SDM方法通过学习得到一系列下降的方向和该方向上的尺度,使得目标函数以非常快的速度收敛到最小值,回避了求解Jacobian矩阵和Hessian矩阵的问题。

用于人脸对齐,但附带了姿态估计的方法。

4. 基于Dlib和OpenCV的头部姿态估计

解析 + C++代码
python代码已经下载到本地

人脸姿态估计主要是获得脸部朝向的角度信息。本文获得的人脸姿态信息用三个欧拉角(pitch,yaw,roll)表示。
首先定义一个6关键点的3D脸部模型(左眼角,右眼角,鼻尖,左嘴角,右嘴角,下颌),然后采用Dlib检测出图片中对应的6个脸部关键点,采用OpenCV的solvePnP函数解出旋转向量,最后将旋转向量转换为欧拉角。

  • 基于Dlib的人脸关键点检测
    Dlib提供了一个68关键点的检测模型,而且是按照顺序排列的。因此可以直接索引到需要的6个关键点。
    接着对检测到的人脸进行关键点检测.关键的索引顺序是固定的,姿态估计需要的6个关键点的索引id分别是:
    • 下巴:8
    • 鼻尖:30
    • 左眼角:36
    • 右眼角:45
    • 左嘴角:48
    • 右嘴角:54
  • 用OpenCV的solvePnP函数估计Pose
    OpenCV中solvePnP 和 solvePnPRansac都可以用来估计Pose。
    确定pose也就是确定从3D model到图片中人脸的仿射变换矩阵,它包含旋转和平移的信息。solvePnP函数输出结果包括旋转向量(roatation vector)和平移向量(translation vector)。这里我们只关心旋转信息,所以主要将对 roatation vector进行操作。 在调用solvePnP函数前需要初始化cameraMatrix,也就是相机内参。
  • 将旋转向量转换为欧拉角
    欧拉角与四元数的转换关系