使用openface训练自己的第一个模型

今天实现了openface训练了自己第一个人脸识别的模型,实现过程中参照了这个博客帮了我大忙  http://www.vccoo.com/v/2ed520


实现的过程和结果如下:

前提:我的这台机子已经配置过了openface+dlib,所以我不用太为环境而担忧。环境在实现的过程中就出现了一个错 误:/home/zpj/torch/install/bin/luajit: /home/zpj/torch/install/share/lua/5.1/trepl/init.lua:384: module 'csvigo' not found:No LuaRocks module found for csvigo

经检查发现少了一个csvigo的模块,既然找到了问题,安装就行了,于是进行如下步骤

root@zpj-HP-xw4550-Workstation:~/openface/training-images# luarocks install csvigo


ok ,搞定!


搞定了问题,就是训练了



2、

第一步

在 openface 文件中建立一个名为./training-images/的文件夹

mkdir training-images

第二步

为你想识别的每个人建立一个子文件夹。例如:我找了四组训练图片,每组图片大约在15张左右,其实有点少了。一组我的Pengjunzhu/,一组我女朋友的Xinqi/、另两组分别是孙红雷Hongleisun/和黄磊Leihuang/的,这是在《男人帮》截的图。把这四组图片放在四个文件夹里面。


第三步

然后把这几个训练文件夹放到openface/tarin-images。图片的格式无所谓。确保每张图像上只出现一张脸。不需要裁剪脸部周围的区域。OpenFace 会自己裁剪。

第四步

从这个 OpenFace 的根目录中运行这个 OpenFace 脚本。

首先,进行姿势检测和校准:

./util/align-dlib.py ./training-images/ align outerEyesAndNose ./aligned-images/ --size 96

这将创建一个新./aligned-images/子文件夹,带有每一个测试图像的裁剪过的并且对齐的版本。

第二,从对齐的图像中生成表征:

./batch-represent/main.lua -outDir ./generated-embeddings/ -data ./aligned-images/

运行完后,这个./aligned-images/子文件夹会包含一个带有每张图像的嵌入的  csv 文件。

第三,训练自己的面部检测模型:

./demos/classifier.py train ./generated-embeddings/

这将产生名为./generated-embeddings/classifier.pkl的新文件名。这个文件有你将用来识别新面部的 SVM 模型。

到了这,你应该有一个可用的面部识别器。


第五步:识别面部!


获取一张未知脸的新照片。把它像这样传递给分类器脚本:

./demos/classifier.py infer ./generated-embeddings/classifier.pkl your_test_image.jpg

我们会得到一个看起来像这样的预测:

=== /test-images/will-ferrel-1.jpg ===

Predict will-ferrell with 0.73 confidence.

  注:我这里用的自己的照片进行测试结果,最好的结果达到了89%,最坏的结果66%  这是因为我的训练图片比较少。

从这里开始直到你适应这个 ./demos/classifier.py Python 脚本 做任何你想做的。


重要提示

  • 如果你得到了坏的结果,请尝试在第三步中为每个人添加更多一些照片(尤其是不同姿势的照片)。

  • 这个脚本总是会给出一个预测,即便是一张它不知道的脸。在真实的应用中,你会看到信度得分,并抛除低信度的预测,因为它们很可能是错误的。


到这里基本上实现了一个分类器了,但是我还有两点不是很明白但是特别想知道的,

1、加入我要增加某一组的训练数据,那么我能不能在现有训练模型的基础上进行训练,而不用在从新训练模型。

  我知道一定有的,但是我还不知怎么做。

2、如何调用摄像头,这样我就可以通过摄像头传过来的图片进行测试了,而不用这样在手动进行识别了。


这是我目前不知道但特别想知道的了两项技术。

2016.08.21 晚



今天又测试了下模型。这个模型是不能识别一张猫脸的。哈哈...

抛出的错误是 Exception: Unable to find a face: train-test/haha.jpeg

那能不能识别出一个陌生人的脸的呢?

这个结果很让我吃惊,我copy了一直刘德华的照片,拿去测试,竟然发现他和孙红雷的置信度是90%,我一下子就蒙逼。要知道我拿孙红雷自己的照片最高置信的度才89%.这一定是那里出了问题。训练量不够么?我下一步要去找几组比较多的训练集。看看效果怎么样。

就这个问题今天在群里请教了下,可能的原因是预处理没处理好 , 也许是裁剪的问题,裁剪和定位的问题。

你可能感兴趣的:(计算机视觉)