如何在 TensorFlow 使用深度学习建立脸部辨识 (三)

【应用】脸部辨识 – TensorFlow x deep learning (三)

上一篇文章带您初步完成了人脸辨识的实作,现在来到了这系列的最终章,将介绍如何训练分类器,并评估成果。

在 Tensorflow 创建嵌入 (Embeddings)

处理完数据之后,下一步就是产生每张人脸的嵌入(embedding),而这些嵌入后续可以用来作为分类、回归或丛集分析使用。

下载权重(Weights)

您将使用 Inception Resnet V1 作为卷积神经网络。首先,创建一个文件来下载模型的权重。借由迁移学习,我们可以将预先训练好的权重应用在新的数据集上。以下将会使用 LFW 数据集为例:

docker run -v $PWD:/medium-facenet-tutorial \    -e PYTHONPATH=$PYTHONPATH:/medium-facenet-tutorial \    -it colemurray/medium-facenet-tutorial python3 /medium-facenet-tutorial/medium_facenet_tutorial/download_and_extract_model.py \    --model-dir /medium-facenet-tutorial/etc  

加载迁入

接下来,你将利用 Tensorflow 的 queue API 来平行加载已经预处理好的图片。通过使用列队 (queues),可以使用多线程平行加载图片。使用 GPU 时,这使你可以在 CPU 上执行图片预处理,并在 GPU上执行行矩阵乘法。

训练分类器

输入队列处理好后,下一步是创建嵌入。

首先,你将从你创建的队列中加载图片。在开始训练前,还有一步额外的预处理步骤:对图片添加随机变换,例如翻转或是亮度及对比的改变,以增加训练用的资料

在训练模型时,我们会以 128 张图片作为一个批次(batch)。而对于每张图片,此模型会回传一个 128 维度的嵌入,所以每一个批次会回传一个 128(每张图片的嵌入维度) x 128(每个批次的图片张数) 的矩阵。

接下来,这些嵌入将被做为 scikit-learn SVM 分类器的输入特征值,以训练出一个可以进行身份识别的分类器。如果其中某个身份的人脸资料少于 10 张图片的话,则该身份资料将忽略不计,此参数可以经由命令行调整。

docker run -v $PWD:/medium-facenet-tutorial \    -e PYTHONPATH=$PYTHONPATH:/medium-facenet-tutorial \    -it colemurray/medium-facenet-tutorial \    python3 /medium-facenet-tutorial/medium_facenet_tutorial/train_classifier.py \    --input-dir /medium-facenet-tutorial/output/intermediate \    --model-path /medium-facenet-tutorial/etc/20170511-185253/20170511-185253.pb \    --classifier-path /medium-facenet-tutorial/output/classifier.pkl \    --num-threads 16 \    --num-epochs 25 \    --min-num-images-per-class 10 \    --is-train   # ~16 mins to complete on MBP  

评估结果

训练好分类器之后,就可以使用训练资料之外的新图片进行测试。只要将前述指令中的 is_train 去除就可以评估实验结果。

docker run -v $PWD:/$(basename $PWD) \    -e PYTHONPATH=$PYTHONPATH:/medium-facenet-tutorial \    -it colemurray/medium-facenet-tutorial \    python3 /medium-facenet-tutorial/medium_facenet_tutorial/train_classifier.py \    --input-dir /medium-facenet-tutorial/output/intermediate \    --model-path /medium-facenet-tutorial/etc/20170511-18253/20170511-185253.pb \    --classifier-path /medium-facenet-tutorial/output/classifier.pkl \    --num-threads 16 \    --num-epochs 5 \    --min-num-images-per-class 10  

完成每个图片的推论后,你会在 console 看到如下结果。

结论

在这篇人脸辨识的教学中,你可以学到机器学习的历史以及如何制作先进的 pipeline。你知道该如何利用 docker 来管理您的 libraries 的依赖关系,提供一个与平台无关的一致环境。您使用Dlib进行预处理,使用 Tensorflow + Scikit-learn 训练能够基于图片预测身份的分类器。

延伸阅读:

1. 如何在 TensorFlow 使用深度学习建立脸部辨识 (一)
2. 如何在 TensorFlow 使用深度学习建立脸部辨识 (二)

(原文经授权且翻译自:https://goo.gl/oKQrHa)

 


iKala - GCP 专门家

GCP 专门家,Google Cloud 官方认证的首席合作伙伴。自家影音产品架构在 GCP 上,使用经验超过 3 年,具备从 IDC 搬迁至 AWS 最后落脚于 GCP 的经验,是最能协助您避掉所有技术地雷的 GCP 伙伴,更拥有业界最多支援 Google Cloud 的技术人员。

我们提供了多项的 GCP 加值服务:

了解更多: https://gcp.expert/
加入我们: https://goo.gl/rg9D3Q
Facebook Fan Page: https://www.facebook.com/gcp.expert/
联络我们:+886 2 87681110 或请来信 gcp@ikala.tv


想在手机阅读更多程式设计资讯?下载【香港硅谷】Android应用
分享到Facebook
技术平台: Nasthon Systems