很久之前做的东西了,最近做了一个人脸相似度检测,里面用到了这里的一个模型,所以抽个空把人脸年龄检测的思路总结一下。
与其他CNN分类问题类似,人脸年龄预测无非就是将人脸分为多个类别,然后训练卷积神经网络,最后利用训练好的卷积神经网络进行分类即可。
但是在人脸年龄分类方面,有几个比较重要的问题,第一,人脸数据集不好获取,第二,人脸对偏移,光照敏感度很高。第三,特征不容易提取。
在数据集方面,我直接用了歪果仁的一个数据集,大概有40W张图片,分为100个年龄类,虽然质量不高,但是勉强可用。
对人脸图像进行预处理可降低偏移,光照等带来的影响,例如对正人脸图像,使用均值文件等等。
对于第三个问题,则需要用到caffe里面强大的功能::fine-turning,我选择了vgg-16神经网络,其中训练分为6个阶段,其结构图为:
从左到右一共6个阶段,每个阶段为一个fine-turning,使用fine-turning能非常有效的提升神经网络预测的准确率。
接下来训练网络,训练时间比较慢,我在GTX1060上训练大概3天才训练玩。
训练好以后直接将模型文件保存为age.caffemodel,将网络配置文件保存为age.prototxt。
当预测一张新图片时,会得到图像的最终预测值,维度为100的向量,每个值代表属于此类的概率,然后乘以range(100)即可。