Py学习  »  机器学习算法

【机器学习很有趣系列】3分钟学会创建人脸识别系统

TFT小组 • 4 年前 • 482 次点击  


点击上方蓝字,关注最有趣的TFT小组


人工智能给世界带来的改变是翻天覆地的,人脸识别就是其中之一。生活中,几乎每一个人都在用人脸识别系统——我们靠人脸识别解锁手机;Facebook面部识别技术可以防止陌生人利用我们的照片;手机相册可以根据人脸进行分类;先进的安保系统也会采用摄像头进行人脸识别。这些系统到底是怎么识别我们的脸呢?让我们一起接着往下看。


人脸验证

    人脸识别

VS


人脸验证是解决“这是我们要找的人吗?”的问题。举个例子:当你在学校参加考试的时候,监考官会通过核对你的学生证上的照片来确认你的身份。这就是人脸验证。手机用人脸解锁也是运用的人脸验证技术。人脸验证是1:1匹配问题。


现在,我们假设:监考官能对的上每一个考生的脸和名字(可能监考官就是参加考试的学生们的班主任)。所以考生们去参加考试都不用带学生证,监考官看到自己的学生,就直接让他们进去考场。这就是人脸识别。人脸识别解决的问题是:“这个人是谁?”与人脸检测对比,人脸识别是一个1:K的问题。


01

图像逐个像素对比的缺点


一个最简单的人脸验证方式就是,把两张图片的每一个像素都进行比较——Pixel-by-pixel comparison图像逐个像素比。如果两张图片之间的距离小于某一个阈值,那么我们可以认为这两张图片表示同一个人。但是即使是轻微的光线改变、位置改变或方向改变,图像中像素值也会发生剧烈的变化。所以像素比的方法不是很好用。


02

使用Face Embedding来解决问题


Google团队开发了一个新的人脸识别系统:FaceNet,可以直接将人脸图像映射到欧几里得空间,Euclidean空间的距离代表了人脸图像的相似性。


我们将人脸图像X embedding到d维度的欧几里得空间:

理想的状态是,对于来自同一个人的两张图片,即使这个人换了发型,戴了👓,化了妆,他们的embedding仍然是相似的,相反,但对于不同的人,embedding是十分不同的。


在卷积网络(CNN)架构中,初始的网络层主要识别基本的图像元素:直线、边、圆等等。深层主要识别更复杂元素:数字、人脸、汽车等等。


为了得到图像embedding,我们将图像输入一个预训练的模型,然后运行一个前向传播(feedforward)算法,从一些更深的全连接层提取出向量(想要学习CNN的小伙伴,请私戳我们了解课程)。


03

怎么去优化这些embedding?


FaceNet直接使用基于triplets的LMNN(最大边界近邻分类)的loss函数训练神经网络,网络直接输出为128维度的向量空间。


在Triplet(三联子) Loss模型中,我们希望单个个体的图像和该个体的其它图像距离近,与其它个体的图像距离远。



假设给定人脸A的两张图片Anchor、Positive,人脸B的一张图片Negative,令d表示相似度计算函数(值越小表示相似度越高)。训练目标为,令Anchor和Positive的距离小于Anchor和Negative的距离,即:



∥f(X1) — f(X2)∥² is the degree of similarity between image X1 and X2. If it’s smaller than a chosen thresh是描述图像X1和X2的相似度。如果它小于我们选择的阈值,我们就说X1和X2两张图片上是同一个人。你是不是在想:‘∥A∥’ 长这么奇怪,到底是什么呀?它叫弗罗贝尼乌斯范数(Frobenius norm),你可以完全忽略它的名字,这不影响我们对其他的理解。


Anchor和Positive的距离小于Anchor和Negative的距离。我们可以表示为:



04

创建人脸验证和人脸识别系统


如果你知道人脸识别的基本概念。接下来我就告诉你怎么创建人脸验证和人脸识别系统。这非常简单!


人脸验证系统


我推荐你下载一个预训练模型,因为训练人脸识别模型计算量非常大。

首先创建一个人像数据库,它包含每个人像的embedding向量。



然后我们定义一个函数,将图像embedding和人名输入作为参数,该函数能验证他们是否是同一人,这里我们设置阈值为0.7,如果小于0.7,则属于同一个人。



哈哈,简单吗!我们已经创建了人脸验证系统。现在让我们来创建人脸识别系统。上文提过:在人脸识别中,学生是不需要带自己的证件参加考试的,只需要将脸放在摄像头前(老师面前)。


人脸识别系统


在人脸识别中,根据输入图像embedding,我们计算所有图像之间的距离,然后选出最小距离。这就是人脸识别系统。



恭喜你!!!你又学会了创建人脸识别系统。


看完这篇文章是不是收获满满呢,如果喜欢我们的文章,请持续关注哦~


记得长按关注:TFT机器学习


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41132
 
482 次点击