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

阅读: 评论:0

⽤深度学习识别⼈脸openface和dlib
你有没有发现 Facebook 研发出了⼀种能够在你的照⽚中识别出你朋友的神奇neng li?之前,你需要⼿动点击你朋友的照⽚,输⼊他们的名字,然后加上标签。现在,只要你⼀上传照⽚,Facebook 就会神奇地标注出你的每⼀个朋友:
Facebook 会基于你之前的标注,⾃动标注出你照⽚中的⼈。我不知道该说它有⽤呢还是邪乎呢!
这种技术被称为⼈脸识别。你的朋友被标记了⼏次之后,Facebook 的算法就能够识别你朋友的脸。这是⼀项⾮常惊⼈的⿊科技——Facebook 的⼈脸识别准确率,⼏乎与⼈类做得⼀样好!
让我们来了解⼀下现代⼈脸识别是如何⼯作的!但是,识别你的朋友这太容易了。我们可以最⼤化扩展这项技术,来解决⼀个更具挑战性的问题——区分(Will Ferrell,著名演员)和(Chad Smith,著名摇滚⾳乐家)!破碎机锤头铸造工艺
其中⼀个⼈是威尔·法瑞尔,另⼀个是查德·史密斯。我保证他们不是同⼀个⼈!数字仪表
如何⽤机器学习解决复杂问题?
到⽬前为⽌,在前三章,我们⽤机器学习来解决了⼀些⼀步就能完成的问题——估计房⼦的价格、基于现有数据⽣成新数据[1]、判别图像当中是否包含某个物品。所有这些问题都可以通过下列步骤解决:选择⼀个机器学习算法,输⼊数据,然后获得结果。
但是,⼈脸识别是由⼀系列的⼏个相关问题组成的:
dc-dc变换器1. ⾸先,到⼀张图⽚中的所有⼈脸。
2. 第⼆,对于每⼀张脸来说,⽆论光线明暗或⾯朝别处,它依旧能够识别出是同⼀个⼈的脸。
自制巧克力模具3. 第三,能够在每⼀张脸上出可⽤于与他⼈区分的独特之处,⽐如说眼睛有多⼤,脸有多长等等。
4. 最后,将这张脸的特点与已知的所有⼈脸进⾏⽐较,以确定这个⼈的姓名。
作为⼈类,你的⼤脑总是在⼀瞬间⾃动做出了这些判断。实际上,⼈类在识别⼈脸这⽅⾯做得太好了,以⾄于他们会在⽇常物品中同样去「脸」:
计算机还不具备这种⾼级泛化能⼒( ⾄少现在还不⾏…… ),所以我们必须⼿把⼿⼀步⼀步教它们怎么做。
我们需要构建⼀个流⽔线(pipeline)来识别⼈脸,它可以把上⼀个步骤的结果发送给下⼀个步骤。换句话说,我们会将好⼏个机器学习算法连接到⼀起:
⼀个基础的⼈脸识别的流⽔线是怎样⼯作的
⼈脸识别——分步讲解
让我们⼀步⼀步地解决这个问题。对于每个步骤,我们将学习⼀个不同的机器学习算法。我并不会完全解释每⼀个的算法,否则这篇⽂章就变成了⼀本教科书。但你会学到每个步骤的精髓,以及如何在 Python 中使⽤和来构建⼀个你⾃⼰的⾯部识别系统。
一次性台布
第⼀步:出所有的⾯孔
我们流⽔线的第⼀步是⼈脸检测。显然,在我们区分⼈脸之前,我们必须要照⽚中到他们才⾏!
如果你在过去 10 年⾥使⽤过相机,你可能已经见过正在运⾏中的⼈脸检测功能:
⼈脸检测是相机很好的⼀个功能。当相机⾃动选中⼈脸时,它可以确保在拍摄时对焦到所有⼈脸。不过,我们使⽤它另有其因——我们需要到想要传递到流⽔线下⼀步的图像区域。
2000 年初的时候,当保罗·⽐奥拉(Paul Viola)和迈克尔·琼斯(Michael Jones)发明了⼀种能够快速在廉价相机上运⾏的之后[2],⼈脸检测在成为了主流。然⽽现在,更可靠的解决⽅案出现了。我们将使⽤ 2005 年发明的⼀种称为(Histogram of Oriented Gradients)的⽅法,简称HOG。
要在⼀张图⽚中到脸,我们⾸先将图像转换为⿊⽩,因为我们并不需要颜⾊数据来到脸:
然后,我们将查看图⽚中的每⼀个像素。对于单个像素,我们也要查看它周围的其他像素:
我们的⽬标是出并⽐较当前像素与直接围绕它的像素的深度。然后我们要画⼀个箭头来代表图像变暗的⽅向:
看这个像素和它周围的像素,图像向右上⽅变暗。
如果你对图⽚中的每⼀个像素重复这个过程,最终每个像素会被⼀个箭头取代。这些箭头被称为梯度(gradients),它们能显⽰出图像上从明亮到⿊暗的流动过程:
⽤梯度来代替像素这事看起来没有明确⽬的,但其实背后的理由很充分。如果我们直接分析像素,同⼀个⼈明暗不同的两张照⽚将具有完全不同的像素值。但是如果只考虑亮度变化 ⽅向 (direction)的话,明暗图像将会有同样的结果。这使得问题变得更容易解决!
高压阻尼线
但是保存每个像素的梯度太过细节化了,我们最终很有可能「⼀叶障⽬不见泰⼭」。如果能从更⾼的⾓度上观察基本的明暗流动,我们就可以看出图像的基本规律,这会⽐之前更好。
为了做到这⼀点,我们将图像分割成⼀些 16×16 像素的⼩⽅块。在每个⼩⽅块中,我们将计算出每个主⽅向上有多少个梯度(有多少指向上,指向右上,指向右等)。然后我们将⽤指向性最强那个⽅向的箭头来代替原来的那个⼩⽅块。
最终的结果是,我们把原始图像转换成了⼀个⾮常简单的表达形式,这种表达形式可以⽤⼀种简单的⽅式来捕获⾯部的基本结构:
原始图像被表⽰成了
HOG 形式,以捕获图像的主要特征,⽆论图像明暗度如何。
为了在这个 HOG 图像中到脸部,我们要所需要做的,就是到我们的图像中,与已知的⼀些 HOG 图案中,看起来最相似的部分。这些HOG 图案都是从其他⾯部训练数据中提取出来的:
使⽤这种技术,我们现在可以轻松地在任何图⽚中到脸部:
如果你想⽤ Python 和 dlib 亲⼿试试看,显⽰了如何⽣成和查看 HOG 图像。
第⼆步:脸部的不同姿势
哇,我们把图⽚中的脸部分离出来了。但现在,我们要处理的问题就是,对于电脑来说,⾯朝不同⽅向的同⼀张脸,是不同的东西:

本文发布于:2023-06-19 03:41:12,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/3/144239.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   问题   像素
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图