Facial Keypoints Detection

你能教会计算机识别人脸的关键部位吗?

Link: https://www.kaggle.com/c/facial-keypoints-detection

题目描述

人脸关键点检测是一个非常困难的问题,不同图片的灯光、角度、人脸尺寸都会导致脸部特征的巨大不同。经过几十年的艰苦研究,克服重重困难,计算机视觉相关研究者在该领域得到了巨大的成就,但仍然还有很多问题值得探索。

在本题中,你的任务是:从人物头像的灰度照片(96x96像素)中找出代表面部器官位置的关键点坐标,关键点包括眼睛中心,嘴巴中心等共15位置。

小提示

  • 人脸关键点检测:一张人脸图片输入后,需要先找到人脸的位置(人脸检测),然后在这个基础上定位人脸关键点的位置(如眼睛中心或嘴角等)

  • 人脸关键点检测的方法:

    1、投影:五官灰度值较周围皮肤灰度值低

    2、基于先验规则:先验知识指的是人脸比如眼睑、虹膜等一些已知的灰度、形状信息

    3、基于几何形状:比如可变形模板,能够较好检测眼睛嘴唇特征形状。但是由于边缘不精确难以精确定位特征点,依赖初始参数大,容易陷入局部最小,计算时间长。另外还有主动形状模型(ASM),主动表观模型(AAM)

    4、基于统计的方法:该方法的思想是将特征部位看做一类模式,然后使用大量的特征部位样本和非特征部位样本进行训练。然后构造分类器,该类方法主要有PCA(主成分分析)、SVM、ANN(神经网络)、AdaBoost、模板匹配

    5、基于小波和小波包

先修技能

  • CNN的相关知识

解释术语

  • CNN:卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络.它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。

输入格式

train.csv提供了大约5000个人物头像的灰度图片,像素96x96,灰度0-255,图片数据的矩阵被整理成一维向量,用空格分割,并附有每个头像15个关键点的位置坐标(x轴y轴),关键点坐标用逗号分隔。数据格式如下:

left_eye_center_x,left_eye_center_y,right_eye_center_x,right_eye_center_y,left_eye_inner_corner_x,left_eye_inner_corner_y,left_eye_outer_corner_x,left_eye_outer_corner_y,right_eye_inner_corner_x,right_eye_inner_corner_y,right_eye_outer_corner_x,right_eye_outer_corner_y,left_eyebrow_inner_end_x,left_eyebrow_inner_end_y,left_eyebrow_outer_end_x,left_eyebrow_outer_end_y,right_eyebrow_inner_end_x,right_eyebrow_inner_end_y,right_eyebrow_outer_end_x,right_eyebrow_outer_end_y,nose_tip_x,nose_tip_y,mouth_left_corner_x,mouth_left_corner_y,mouth_right_corner_x,mouth_right_corner_y,mouth_center_top_lip_x,mouth_center_top_lip_y,mouth_center_bottom_lip_x,mouth_center_bottom_lip_y,Image
66.0335639098,39.0022736842,30.2270075188,36.4216781955,59.582075188,39.6474225564,73.1303458647,39.9699969925,36.3565714286,37.3894015038,23.4528721805,37.3894015038,56.9532631579,29.0336481203,80.2271278195,32.2281383459,40.2276090226,29.0023218045,16.3563789474,29.6474706767,44.4205714286,57.0668030075,61.1953082707,79.9701654135,28.6144962406,77.3889924812,43.3126015038,72.9354586466,43.1307067669,84.4857744361, 96x96 more pixels
etc...

test.csv格式与train.csv接近,没有提供关键点的位置坐标。每行数据由图片数据组成,图片数据的矩阵被整理成一维向量,用空格分割。数据格式如下:

Image
238 236 237 238 240...
etc...

输出格式

根据测试集给出的头像图片数据,预测出每个人物头像的关键点的位置坐标。第一列为特征行号,第二列为特征值。输出文件名为prediction_test.csv,输出格式如下所示:

RowId,Location
1,?
2,?
3,?
4,?
etc...

评价

使用RMSE (Root Mean Square Error)作为评价指标,公式如下:

$$ RMSE = \sqrt{\frac{1}{n} \sum{i=1}^{n} (y_i - \hat{y}_i^2} $$ 其中$$N$$代表测试数据集中特征的数量,$$y{i}$$代表其真实的坐标值,$$\hat{y_i}$$代表你预测的坐标值。

代码与数据

完整代码

测评配置环境

python

pip install -U numpy
pip install pandas
pip install -U scikit-learn

测评代码

from sklearn.metrics import mean_squared_error
y_test = pd.read_csv(data_dir + "correct_submission.csv")
y_pred = pd.read_csv(data_dir + "prediction_test.csv")
accuracy = mean_squared_error(y_test,y_pred)

results matching ""

    No results matching ""