用深度学习识别人脸openface和dlib

  • 时间:
  • 浏览:1

至此,你意味完成了另另一一二个 预测了。你也如果 修改./demos/classifier.py 你你你这些 python 脚本,来让它匹配我所有人的脸。

重要提示:

https://cdn-images-1.medium.com/max/50/1*_GNyjR3JlPoS9grtIVmKFQ.gif

意味你想我所有人尝试你你你这些步骤,OpenFace 提供了另另一一二个  lua 脚本,它如果 生成另另一一二个 文件夹中所有图像的嵌入,并将它们写入 csv 文件。点此查看怎么还可以运行。

有如果,人脸识别是由一系列的几次相关大问题组成的:

让亲戚亲戚我们歌词 歌词 来了解一下现代人脸识别是怎么还可以工作的! 有如果,识别你的亲戚亲戚我们歌词 歌词 这太容易了。 亲戚亲戚我们歌词 歌词 如果 最大化扩展这项技术,来处里另另一一二个 更具挑战性的大问题——区分威尔·法瑞尔(Will Ferrell,著名演员)和查德·史密斯(Chad Smith,著名摇滚音乐家)!

作为人类,你的大脑时不时在一瞬间自动做出了有有哪些判断。实际上,人类在识别人脸这方面做得太好了,以至于亲戚亲戚我们歌词 歌词 会在日常物品中同样去「找脸」:

4. 看看亲戚亲戚我们歌词 歌词 过去意味测量过的所有脸部,找出哪我所有人的测量值和亲戚亲戚我们歌词 歌词 要测量的面部最接近。这本来我我如果 找的人!

想要通过任何基本的机器学习分类算法来达成你你你这些目标。亲戚亲戚我们歌词 歌词 无须还要太花哨的角度学习技巧。亲戚亲戚我们歌词 歌词 将使用另另一一二个 简单的线性 SVM 分类器,但实际上还有什么都有什么都的分类算法如果 使用。

现在,亲戚亲戚我们歌词 歌词 知道了眼睛和嘴巴在哪儿,亲戚亲戚我们歌词 歌词 将图像进行旋转、缩放和错切,使得眼睛和嘴巴尽意味靠近中心。亲戚亲戚我们歌词 歌词 不必做任何花哨的三维扭曲,意味这会让图像失真。亲戚亲戚我们歌词 歌词 只会使用有有哪些不能保持图片相对平行的基本图像变换,类似于旋转和缩放(称为仿射变换):

3. 把上一步得到的面部图像贴到 神经网络中,神经网络知道怎么还可以找到 128 个特性测量值。保存这 128 个测量值。

现在亲戚亲戚我们歌词 歌词 要面临最核心的大问题了——怎么还可以区分不同的人脸。这才是这件事的有趣之处!

4. 最后,将这张脸的特点与已知的所有人脸进行比较,以选折 这我所有人的姓名。

为此,亲戚亲戚我们歌词 歌词 将使用一种生活生活称为面部特性点估计(face landmark estimation)的算法。 什么都有方式都如果 做到你你你这些点,但这次亲戚亲戚我们歌词 歌词 会使用由 瓦希德·卡奇米(Vahid Kazemi)和约瑟菲娜·沙利文(Josephine Sullivan)在 2014 年造出的方式。

这将生成另另一一二个 名为 ./generated-embeddings/classifier.pkl的新文件,其含高高了你用来识别新面孔的 SVM 模型。

到你你你这些步为止,你应该有了另另一一二个 可用的人脸识别器!

第五步:识别面孔!

获取另另一一二个 未知脸孔的新照片,有如果像本来我把它传递入分类器脚本中:

https://cdn-images-1.medium.com/max/50/1*_GNyjR3JlPoS9grtIVmKFQ.gif

最终的结果是,亲戚亲戚我们歌词 歌词 把原始图像转上加了另另一一二个 非常简单的表达形式,你你你这些表达形式如果 用一种生活生活简单的方式来捕获面部的基本特性:

1. 使用 HOG 算法给图片编码,以创建图片的复杂版本。使用你你你这些复杂的图像,找到其中看起来最像通用 HOG 面部编码的主次。

转自:https://zhuanlan.zhihu.com/p/24567586

让亲戚亲戚我们歌词 歌词 一步一步地处里你你你这些大问题。 对于每个步骤,亲戚亲戚我们歌词 歌词 将学习另另一一二个 不同的机器学习算法。 我无须会完整性解释每另另一一二个 的算法,有如果这篇文章就变成了一本教科书。但想要学到每个步骤的精髓,以及怎么还可以在 Python 中使用 OpenFace 和 dlib 来构建另另一一二个 你我所有人的面部识别系统。

什么都有亲戚亲戚我们歌词 歌词 还要做的,本来我通过亲戚亲戚我们歌词 歌词 预训练的网络来处里亲戚亲戚我们歌词 歌词 的脸部图像,以获得 128 个测量值。这在等亲戚亲戚我们歌词 歌词 测试图像的什么都测量值:

要在一张图片中找到脸,亲戚亲戚我们歌词 歌词 首先将图像转换为黑白,意味亲戚亲戚我们歌词 歌词 无须还要颜色数据来找到脸:

2. 通过找到脸上的主要特性点,找出脸部的姿势。一旦亲戚亲戚我们歌词 歌词 找到有有哪些特性点,就利用它们把图像扭曲,使眼睛和嘴巴居中。

有如果保存每个像素的梯度太过细节化了,亲戚亲戚我们歌词 歌词 最终很有意味「一叶障目不见泰山」。意味能从更高的角度上观察基本的明暗流动,亲戚亲戚我们歌词 歌词 就如果 看出图像的基本规律,这会比完后 更好。

你你你这些算法的基本思路是找到 68 我所有人脸上普遍发生的特定点(称为特性点, landmarks)——包括下巴的顶部、每只眼睛的实物轮廓、每条眉毛的实物轮廓等。接下来亲戚亲戚我们歌词 歌词 训练另另一一二个 机器学习算法,让它不能在任何脸部找到这 68 个特定的点:

每次训练要观察另另一一二个 不同的脸部图像:

什么都有让亲戚亲戚我们歌词 歌词 试一下亲戚亲戚我们歌词 歌词 的系统。首先,我使用威尔·法瑞尔、查德·史密斯和吉米·法伦(Jimmy Falon)三人每人 20 张照片的嵌入来训练分类器:

好的,那末亲戚亲戚我们歌词 歌词 应该测量面部的有哪些数值,来建立亲戚亲戚我们歌词 歌词 的已知脸部数据库呢?耳朵的大小?鼻子的长度?眼睛的颜色?还有有哪些?



想要就能访我不知道在 docker image 中 /host/Users/...的 OSX 文件

亲戚亲戚我们歌词 歌词 将在每一张脸上定位的 68 个特性点。这张图片的作者是在OpenFace工作的卡内基梅隆大学 Ph.D. 布兰东·阿莫斯Brandon Amos)。

你你你这些通过训练卷积神经网络来输出脸部嵌入的过程,还要几瓶的数据和强大的计算能力。即使使用昂贵的 Nvidia Telsa 显卡,你也还要最少 24 小时的连续训练,不能获得良好的准确性。

为了处里你你你这些点,亲戚亲戚我们歌词 歌词 将试图扭曲每个图片,使得眼睛和嘴唇时不时在图像中的样本位置(sample place)。 这将使亲戚亲戚我们歌词 歌词 在接下来的步骤中,更容易比较脸部之间的不同。

1. 首先,找到一张图片中的所有人脸。

什么都有,处里方案是训练另另一一二个 角度卷积神经网络(就像亲戚亲戚我们歌词 歌词 在第三章做的那样)。有如果,并也有让它去识别图片中的物体,你你你这些次亲戚亲戚我们歌词 歌词 的训练是要让它为脸部生成 128 个测量值。

意味你想用 Python 和 dlib 亲手试试看你你你这些步搞笑的话,这里有什么都代码帮你寻找脸部特性点并用有有哪些特性点完成图像变形。



第二步

为你想识别的每我所有人建立另另一一二个 子文件夹。类似于:

为了做到你你你这些点,亲戚亲戚我们歌词 歌词 将图像分割成什么都 16×16 像素的小方块。在每个小方块中,亲戚亲戚我们歌词 歌词 将计算出每个主方向上有几次个梯度(有几次指向上,指向右上,指向右等)。有如果亲戚亲戚我们歌词 歌词 将用指向性最强那个方向的箭头来代替本来我的那个小方块。

为了在你你你这些 HOG 图像中找到脸部,亲戚亲戚我们歌词 歌词 要所还要做的,本来我找到亲戚亲戚我们歌词 歌词 的图像中,与已知的什么都 HOG 图案中,看起来最类似于的主次。有有哪些 HOG 图案也有从什么都面部训练数据中提取出来的:

2. 译者注:你你你这些算法也如果 用来训练检测什么都的物品,有如果最时不时还是被用于人脸的检测,其英文名称为 Viola–Jones object detection framework



第一步

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



感情是什么 搞笑的话提示:意味你正在 OSX 上使用 Docker,让想本来我使你的 OSX /Users/

文件夹在 docker image 中可见:

亲戚亲戚我们歌词 歌词 还要的方式是一种生活生活从每张人脸上提取什么都基本的测量数值。有如果,亲戚亲戚我们歌词 歌词 如果 用同样的方式测量未知的面孔,并找到最接近测量数值的那张已知的脸。类似于,亲戚亲戚我们歌词 歌词 如果 测量每个耳朵的大小、眼睛之间的间距、鼻子的长度等。意味想本来我看了像《犯罪现场调查》本来我的电视剧,你就知道我在说有哪些了。

但一旦网络训练完成,即使它从来那末见过有有哪些面孔,它也如果 生成这张面孔的测量值!什么都有你你你这些训练只需一次即可。幸运的是,OpenFace 上面的大神意味做完了有有哪些,有如果亲戚亲戚我们歌词 歌词 发布了几次训练如果来 直接使用的网络。谢谢布兰东·阿莫斯和他的团队!

现在你知道你你你这些切也有怎么还可以运行的了,这里是怎么还可以使用 OpenFace 在你我所有人的电脑上运行整我所有人脸识别系统的说明:

亲戚亲戚我们歌词 歌词 还要做的是训练另另一一二个 分类器,它如果 从另另一一二个 新的测试图像中获取测量结果,并找出最匹配的那我所有人。分类器运行一次只还要几毫秒,分类器的结果本来我人的名字!

1. 加载一张已知的人的面部训练图像

你有那末发现 Facebook 研发出了一种生活生活不能在你的照片中识别出你亲戚亲戚我们歌词 歌词 的神奇neng li? 完后 ,你还要手动点击你亲戚亲戚我们歌词 歌词 的照片,输入亲戚亲戚我们歌词 歌词 的名字,有如果上加标签。现在,假使 你一上传照片,Facebook 就会神奇地标注出你的每另另一一二个 亲戚亲戚我们歌词 歌词 :

亲戚亲戚我们歌词 歌词 还要构建另另一一二个 流水线(pipeline)来识别人脸,它如果 把上另另一一二个 步骤的结果发送给下另另一一二个 步骤。换句话说,亲戚亲戚我们歌词 歌词 会将好几次机器学习算法连接到一块儿:

在为几千我所有人的数百万图像重复该步骤数百万次完后 ,神经网络学习了怎么还可以可靠地为每我所有人生成 128 个测量值。对于同另另一一二个 人的任何十张不同的照片,它都应该给出大致相同的测量值。

你你你这些技术被称为人脸识别。你的亲戚亲戚我们歌词 歌词 被标记了几次完后 ,Facebook 的算法就不能识别你亲戚亲戚我们歌词 歌词 的脸。 这是一项非常惊人的黑科技——Facebook 的人脸识别准确率达到了 98%,几乎与人类做得一样好!



这将创建另另一一二个 名为./aligned-images/的子文件夹,上面是每另另一一二个 测试图像裁剪过、有如果对齐的版本。

其次,从对齐的图像中生成特性文件:

有如果,算法查看它我所有人为这另另一一二个 图片生成的测量值。再有如果,稍微调整神经网络,以确保第一张和第二张生成的测量值接近,而第二张和第三张生成的测量值略有不同。

结果成功了!不同角度的脸部,甚至是侧脸,它都能捕捉到!



第三步

将每我所有人的所有图像基因重组进对应的子文件夹。确保每张图像上只出现一张脸。不还要裁剪脸部付进 的区域。OpenFace 会我所有人裁剪。

第四步

从 openface 的根目录中运行你你你这些

openface 脚本。

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

这是在测试图片上定位 68 个特性点的结果:

2. 第二,对于每一张脸来说,无论光线明暗或面朝别处,它依旧不能识别出是同另另一一二个 人的脸。

到目前为止,在前三章,亲戚亲戚我们歌词 歌词 用机器学习来处里了什么都一步就能完成的大问题——估计房子的价格、基于现有数据生成新数据[1]、判别图像当中有无含高某个物品。 所有有有哪些大问题都如果 通过下列步骤处里:选折 另另一一二个 机器学习算法,输入数据,有如果获得结果。

意味你对图片中的每另另一一二个 像素重复你你你这些过程,最终每个像素会被另另一一二个 箭头取代。有有哪些箭头被称为梯度(gradients),它们能显示出图像上从明亮到黑暗的流动过程:

3. 加载另外另另一一二个 人的照片

事实证明,对于亲戚亲戚我们歌词 歌词 人类来说什么都显而易见的测量值(比如眼睛颜色),对计算机来说那末哪些意义。研究人员发现,最准确的方式是让计算机我所有人找出它要分派的测量值。角度学习比人类更懂面部有哪些主次的测量值比较重要。

机器学习专业人士把每张脸的 128 个测量值称为另另一一二个 嵌入(embedding)。将复杂的原始数据(如图片)缩减为可由计算机生成的另另一一二个 数列的方式,在机器学习(不得劲是语言翻译)中出现了什么都有次。亲戚亲戚我们歌词 歌词 正在使用的你你你这些脸部提取方式是由 Google 的研究人员在 2015 年造出的,但也有什么都类似于方式发生。

就像电视剧一样!非常真实!#科学

接下来,我在你你你这些分类器上运行了威尔·法瑞尔和查德·史密斯在吉米·法伦的节目上互相模仿的那个视频的每一帧:

人类如果 很轻松地识别出到另另一一二个 图片也有威尔·法瑞尔,但电脑会认为这两张图片是另另一一二个 完整性不同的人。

让亲戚亲戚我们歌词 歌词 回顾一下亲戚亲戚我们歌词 歌词 的步骤:

意味你想用 Python 和 dlib 亲手试试看,有有哪些代码显示了怎么还可以生成和查看 HOG 图像。

50 年初的完后 , 当保罗·比奥拉(Paul Viola)和迈克尔·琼斯(Michael Jones) 造出了一种生活生活不能快速在廉价相机上运行的人脸检测方式完后 [2],人脸检测在成为了主流。然而现在,更可靠的处里方案出现了。 亲戚亲戚我们歌词 歌词 将使用 505 年造出的一种生活生活称为方向梯度直方图(Histogram of Oriented Gradients)的方式,简称 HOG

亲戚亲戚我们歌词 歌词 流水线的第一步是人脸检测。显然,在亲戚亲戚我们歌词 歌词 区分人脸完后 ,亲戚亲戚我们歌词 歌词 还要要照片中找到亲戚亲戚我们歌词 歌词 才行!

运行完后 ,你你你这些./generated-embeddings/子文件夹会含高另另一一二个 含高每张图像嵌入的 csv 文件。

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

最后你你你这些步实际上是整个过程中最简单的一步。亲戚亲戚我们歌词 歌词 要做的本来我找到数据库中,与亲戚亲戚我们歌词 歌词 的测试图像的测量值最接近的那我所有人。

哇,亲戚亲戚我们歌词 歌词 把图片中的脸主次离出来了。 但现在,亲戚亲戚我们歌词 歌词 要处里的大问题本来我,对于电脑来说,面朝不同方向的同一张脸,是不同的东西:

实际上你你你这些方式有另另一一二个 巨大的大问题。像 Facebook 你你你这些拥有数十亿用户和数万亿张照片的网站,是不意味去循环比较每张先前标记的脸的,这浪费的时间太长了。亲戚亲戚我们歌词 歌词 还要在毫秒内识别人脸,而也有几次小时。

意味你在过去 10 年里使用过相机,你意味意味见过正在运行中的人脸检测功能:

3. 第三,不能在每一张脸上找出可用于与他人区分的独特之处,比如说眼睛有多大,脸有多长等等。

确保你意味安装了 python、OpenFace 和 dlib。你也如果 在这里手动安装,意味使用另另一一二个 意味设定好的 docker image:

最简单的人脸识别方式,本来我直接把亲戚亲戚我们歌词 歌词 在第二步中发现的未知人脸,与亲戚亲戚我们歌词 歌词 意味标注了的人脸图片作比较。当亲戚亲戚我们歌词 歌词 发现未知的面孔与另另一一二个 完后 标注过的面孔看起来及其类似于的完后 ,它肯定是同另另一一二个 人。似乎这主意看起来不错,对吧?

你应该会得到像本来我的另另一一二个 预测:

1. 译者注:根据已有的超级马里奥的关卡生成新的关卡

2. 加载同另另一一二个 人的另一张照片