markdown 头部姿态估计
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 头部姿态估计相关的知识,希望对你有一定的参考价值。
## 数据集
[人脸数据集汇总博文](https://blog.csdn.net/oYouHuo/article/details/84338779)
1. [300W](https://ibug.doc.ic.ac.uk/resources/300-W/)
是由AFLW、AFW、HELEN、IBUG、LFPW、LFW等数据集组成的数据库。
2. [300W-LP](https://drive.google.com/file/d/0B7OEHD3T4eCkVGs0TkhUWFN6N1k/view?usp=sharing)
是来自于300W数据集做大型人脸姿态预测的一个综合数据库。
[百度网盘资源](https://pan.baidu.com/s/1Sb1xkisHuLiZLfi-XwjyUA?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=) 密码:ij6q
3. [BIWI](https://data.vision.ee.ethz.ch/cvl/gfanelli/head_pose/head_forest.html#db)
总共约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]()
[数据库介绍](https://blog.csdn.net/LEE18254290736/article/details/89211807)
## 1. QuatNet
***《QuatNet: Quaternion-based Head Pose Estimation with Multi-regression Loss》
2018,Heng-Wei Hsu et al. QuatNet***
[论文笔记](https://blog.csdn.net/u013841196/article/details/82949638)
提出了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***
[论文笔记](https://blog.csdn.net/qq_42189368/article/details/84849638)
[代码链接](https://github.com/natanielruiz/deep-head-pose)
本文提出了一种简洁和鲁棒的方式来确定姿态,通过训练一个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](https://github.com/patrikhuber/superviseddescent/)
[代码2](https://github.com/RoboPai/sdm)
[论文笔记](https://blog.csdn.net/jiajinrang93/article/details/68937710)
主要提出了一种名为SDM(Supervised Descent Method)的方法,用来最小化非线性最小二乘(Non-linear Least Squares)目标函数,即目标函数是均方误差。SDM方法通过学习得到一系列下降的方向和该方向上的尺度,使得目标函数以非常快的速度收敛到最小值,回避了求解Jacobian矩阵和Hessian矩阵的问题。
**用于人脸对齐,但附带了姿态估计的方法。**
## 4. 基于Dlib和OpenCV的头部姿态估计
[解析 + C++代码](https://blog.csdn.net/u013512448/article/details/77804161)
**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,也就是相机内参。
- 将旋转向量转换为欧拉角
[欧拉角与四元数的转换关系](http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html)
以上是关于markdown 头部姿态估计的主要内容,如果未能解决你的问题,请参考以下文章