机器学习最本质的地方就是基于海量数据统计的学习,说白了,机器学习其实就是在模拟人类儿童的学习行为。举一个简单的例子,成年人并没有主动教孩子学习语言,但随着孩子慢慢长大,自然而然就学会了说话。那么孩子们是怎么学会的呢?很简单,在人类出生之前,有了听觉开始,就开始不断听到各种声音。人类的大脑会自动组织、分类这些不同的声音,形成自己的认识。随着时间的推移,大脑接收到的声音数据越来越多。最终,大脑利用一种我们目前尚未知晓的机制建立了一个成熟、可靠的声音分类模型,于是孩子们学会了说话。机器学习也是如此,要想识别出这张人脸属于谁,我们同样需要大量的本人和其他人的人脸数据,然后将这些数据输入Tensorflow这样的深度学习(深度学习指的是深度神经网络学习,乃机器学习分支之一)框架,利用深度学习框架建立属于我们自己的人脸分类模型。只要数据量足够,分类准确率就能提高到足以满足我们需求的级别。
日本程序员提供的源码利用了keras这个深度学习库来训练自己的人脸识别模型。keras是一个上层的神经网络学习库,纯python编写,被集成进了Tensorflow和Theano这样的深度学习框架。其存在的目的就是简化开发复杂度,能够让你迅速出产品,更关键的是,keras有中文文档;),有兴趣的请点这里:keras中文文档。由于我的机器已经安装了Tensorflow,因此我直接使用了keras的Tensorflow版。同时,为了验证其它深度学习库的效率和准确率,当然也为了满足我的好奇心,我还使用了Theano,利用CNN——卷积神经网络来训练我的人脸识别模型。我会在接下来的几节讲述这些内容,本节专注把训练数据准备好。
首先,我们需要大量自己的脸部图片,怎么获取呢?很简单,利用前两节讲到的知识就可以了,我们只是在前面代码的基础上增加脸部图像存储功能即可,先把完整代码贴出来:
在shell上执行命令:
这里我们每一个数据集有500张图片,用人名来命名文件夹,并且利用文件夹的路径定为每张样本图片的label。
LJZ文件夹一共有500张图片,如上图所示!
这是data文件夹下面的三个子文件夹,各有500张图片。