前段时间作了一个kaggle上的一个很早的小项目,就是检测脸部关键点,Python环境好弄,可是当时为了速度用CPU加速,搞了将近一天(相关教程),其实详细流程也是根据一个相关教程上面的。防止丢失,把代码分享出来。git
卷积神将网络监测脸部关键点项目是是一个由Kaggle发起的在线比赛题目。该项目给出相关脸部96*96像素的人脸图片,目的是监测出人脸识别中最关键的15个点(也就是x、y共30个输出参数),来提取人脸识别中的关键点。在文章中,经过问题分析,介绍了使用卷积神经网络的方法(简称CNN)进行特征提取的过程,并对该问题解法进行了评价和改进意见。github
本次采用LeNet-5的卷积神经网络,由于其在图像处理方面有着核心的做用,在该设计模型中,使用了卷积神经网络中的几个重要层,介绍以下:markdown
另外,本模型采用学习动量的方式递归降低更新神经网络中的参数,也就是对其学习率(步长)进行动态的调整,在开始令其学习率较大,这样加快参数更新次数,随着次数的增长,减少学习率,防止其在最优解附近产生震荡的现象,从而从总体上提升模型效果,减少偏差。
数据输入
输入数据为1个通道的灰度图像,其大小为[1*96*96],可是在图像中有部分干扰图像,也就是否是单纯的头部图像,其中正常的图像输出显示如图2.1。
网络
首先进行数据输入。因为数据集中部分数据时是缺失的,所以对输入数据须要特殊处理,也就是对输入数据的进行过滤处理,也就是对csv数据进行筛选,选择出完整的数据集合,数据集大概大小是2000多个;
其次进行相应的数据填充。因为完整的数据集数目较少,所以若是仅仅使用少许数据,其将会在训练后期出现严重的过拟合现象,具体图像可视化如图3.1所示。因此对其进行相应的数据扩充操做,数据扩充的意思是咱们人为地经过一些手段(变形、添加噪声等等)增长训练用例的个数。批量迭代器的工做是采集一个训练集合的样本矩阵,分红不一样的批次(在本模型中采用128个用例一批)。当把训练样本分红批次的时候,批处理迭代器能够顺便把输入变形这件事作的又快又好。咱们在进行批处理迭代的时候,以50%的概率进行水平翻转。这很是的方便,对某些问题来讲这种手段可让咱们生产近乎无限的训练集,而不须要增长内存的使用。所以本模型中采起将图片翻转的方式进行扩充。学习
图3.1 小数据集过拟合现象.net
按照官方的评价标准,采用的是RMSE的偏差衡量标准:
设计
该模型最终跑在酷睿i5,搭载NVIDIA GeForce750M上,训练1000 epoch大概须要花费两个小时,每一个epoch时间大概在7-8秒之间。
根据III小结中数据扩充方法,在进行图像扩充先后的结果显示能够看到效果有所提高,而且过拟合现象也有所缓解。
为详细描述最终效果,该模型最终详细结果可视化如图5.2所示。
blog
相关代码教程
相关参考递归