如何模仿FaceID?Python了解一下(模仿脸书的软件叫什么)
off999 2024-10-20 08:09 36 浏览 0 评论
本文介绍了如何使用 Python 在 Keras 框架上实现 FaceID,对 iPhone X 这一新解锁机制进行了反向工程和概念验证。想知道 FaceID 背后人脸识别模块的原理,想自己动手实现带人脸深度特征的网络,不妨阅读此文。
GitHub 地址:https://github.com/normandipalo/faceID_beta
人们对 iPhone X 讨论最多的一个功能就是最新的解锁方式,TouchID 的接替者:FaceID。
随着苹果手机边框面积的减少,苹果公司必须开发一种更便捷、快速的新型解锁方式。尽管一些竞争者继续使用指纹传感器,但是苹果决定创新,革新手机解锁方式:即只需要看一眼它。借助于改进(虽然微小)的前置深度相机,iPhone X 为用户面部创建了一个 3D 映射图。此外,用户人脸照片会通过红外摄像机捕捉,该摄像机对环境的光线、颜色变化具备更强的鲁棒性。使用深度学习,智能手机可以非常细致地了解用户面部,从而能在用户每次拿起手机时快速识别用户。令人惊讶的是,苹果称此方法比 TouchID 更安全,误差率低至 1:1,000,000。
我对苹果实现 FaceID 的技术非常感兴趣,尤其是它在移动设备端完美运行的原理。FaceID 只需要对用户面部进行稍微的初始训练,即可在用户每次拿起手机时流畅运行。我使用深度学习研究了该流程以及如何优化每一步。本文将展示如何使用 Keras 实现一个类似 FaceID 的算法。我将对采用的多个架构决策作出解释,并展示一些最终实验(实验使用 Kinect 完成,Kinect 是一个流行的 RGB + 深度相机),实验输出与 iPhone X 前置摄像头类似,不过实验使用的设备比 iPhone X 大一些。下面我们开始对苹果这一变革性功能进行反向工程吧。
了解 FaceID
「主导 FaceID 的神经网络不只执行分类任务。」
FaceID 设置流程
第一步:仔细分析 FaceID 在 iPhone X 上的运行原理。苹果的 FaceID 白皮书(https://images.apple.com/business/docs/FaceID_Security_Guide.pdf)可以帮助我们理解 FaceID 的基本机制。使用 TouchID 时,用户必须先通过多次按压指纹传感器来注册自己的指纹。在大约 15–20 次按压之后,手机完成指纹注册,TouchID 可以使用。类似地,使用 FaceID 时,用户必须先注册自己的脸。注册过程很简单:用户只需正常看着手机,缓慢转动头部一圈,这样可以注册面部的不同姿势。这样注册过程就结束了,用户可以使用 FaceID 解锁手机。快速的注册过程向我们提示了很多底层学习算法。例如主导 FaceID 的神经网络不只执行分类任务,我会在下文中解释原因。
苹果介绍 iPhone X 和 FaceID 的 Keynote。
执行分类任务对神经网络而言意味着学习预测它看到的人脸是否属于用户。因此,它应该使用一些训练数据来预测「正类」「负类」。但是与大量深度学习应用案例不同,该方法不适用于人脸识别。如果将该方法应用于人脸识别,那么首先神经网络应该使用新获取的用户面部数据从头开始重新训练,这要求大量时间、能耗,以及获取不同人脸的训练数据作为负样本(而这是不切实际的),迁移学习和对训练好的模型进行精细调整也都需要这些。此外,该方法无法利用这一优势:即苹果公司可以「离线」训练更复杂的网络,即在实验室训练好,然后部署到手机上,即装即用。我认为 FaceID 主要使用是一种类似孪生神经网络的架构,苹果公司「离线」训练该网络,然后将人脸映射至低维潜在空间,以最大化不同人面部之间的差距,该网络使用对比损失(contrastive loss)。正如苹果在 Keynote 中展示的那样,这样你就获得了一个可执行一次学习的架构。
FaceID 似乎是 TouchID 之后的新标准。苹果会将这一功能应用到所有新设备中吗?
使用神经网络将面部数值化
孪生神经网络基本上由两个一样的神经网络构成,二者共享所有权重。该架构可以学习计算特定数据类型之间的距离,如图像。即你将成对数据输入孪生神经网络中(或者在同一个网络中在两个不同的步中输入数据),该网络将数据映射至低维特征空间(类似 n 维数组),然后训练该网络使不同类别的数据点距离尽可能地远,同一类别的数据点尽可能地近。在长时间运行中,该网络将学习提取数据中最有意义的特征,并将其压缩成数组,创建一个有意义的映射。为了对该过程有一个直观的理解,你可以想象一下使用小向量描述犬种使类似的犬具备更接近的向量。你可能使用一个数字来编码皮毛颜色,一个数字表示大小,另一个数字表示毛皮长度等等。很聪明,对吧?孪生神经网络可以学会这么做,类似自编码器。
图源:论文《Dimensionality Reduction by Learning an Invariant Mapping》(Hadsell、Chopra、LeCun)。注意该架构如何学习手写数字图像之间的相似性,如何自动将其进行二维分组。类似的技术可应用于人脸。
使用该技术,我们可以使用大量人脸数据训练类似架构,来识别相似度最高的人脸。有足够的预算和算力(像苹果那样),你也可以使用更难的样本训练对对抗攻击(掩码)等具备鲁棒性的网络。那么使用该方法的最终优势在哪里呢?你将拥有一个即插即用的模型,无需训练即可识别不同的用户,只需在初始设置时拍一些照片来计算用户面部在潜在人脸映射空间中的位置。(想象一下,就像写下一只新的狗的犬种向量,然后将它存储在某个地方。)此外,FaceID 能够适应用户的改变:不管是突然的改变(如眼镜、帽子、化妆)还是缓慢的变化(胡须)。这是通过在映射空间中添加参考人脸向量(基于新外表计算得出)来完成的。
FaceID 可以在用户面部发生改变时随之进行调整。
最后,我们来看一下如何在 Keras 中用 Python 实现该网络。
在 Keras 中实现 FaceID
所有机器学习项目首先需要的都是数据。创建自己的数据集需要时间和多人写作,难度较大。因此,我在网上找了一个看起来比较合适的 RGB-D 人脸数据集(http://www.vap.aau.dk/rgb-d-face-database/),它由一系列人朝着不同方向、带有不同面部表情的 RGB-D 图像构成,非常适合 iPhone X 的应用场景。
最终实现的 GitHub 版本库地址:https://github.com/normandipalo/faceID_beta
使用 Colab Notebook 的实验:https://colab.research.google.com/drive/1OynWNoWF6POTcRGFG4V7KW_EGIkUmLYI
我基于 SqueezeNet 架构创建了一个卷积神经网络,将成对的面部 RGB-D 图像(即 4 通道图像)输入网络,输出两个嵌入之间的距离。使用对比损失训练该网络,以最小化同一个人不同图像之间的距离,最大化不同人图像之间的距离。
对比损失
经过一段时间的训练,该网络能够将人脸映射至 128 维数组,这样同一个人的图像被聚类为一组,而不同人的图像距离较远。这意味着要解锁你的设备,该网络只需计算解锁时输入的图像与注册阶段存储图像之间的距离。如果距离在特定阈值以下(阈值越小,安全性越高),则设备解锁成功。
我使用 t-SNE 算法对 128 维嵌入空间进行二维可视化。每个颜色对应不同的人:如下图所示,该网络学会把同一颜色的图像分到很接近的区域(使用 t-SNE 时,不同簇之间的距离是无意义的)。使用 PCA 降维算法时,可视化图也很有意思。
使用 t-SNE 在嵌入空间中创建的人脸集群。每个颜色代表不同的人脸(不过颜色有重复使用)。
使用 PCA 在嵌入空间创建的人脸集群。每个颜色代表不同的人脸(不过颜色有重复使用)。
实验
现在我们可以看看该模型的运行效果,使其模拟通常的 FaceID 过程:首先,进行用户面部注册。然后是解锁阶段,从用户解锁(应该会成功)到其他人解锁(不会成功)。如前所述,重点在于该网络计算解锁手机的人脸与注册人脸之间的距离,及其是否低于特定阈值。
首先开始注册:我从数据集中抽取了同一个人的一组照片来模拟注册阶段。设备正在计算每个姿势的嵌入,并存储在本地。
新用户注册阶段,受 FaceID 注册过程启发。
深度相机看到的注册阶段。
现在我们来看如果用户尝试解锁设备会发生什么。同一用户的不同姿势和面部表情都达到了极低的距离,平均距离在 0.30 左右。
同一用户在嵌入空间中的人脸距离。
而不同人的 RGB-D 图像的距离平均值为 1.1。
不同用户在嵌入空间中的人脸距离。
因此,将阈值设置为 0.4,可以防止陌生人解锁你的设备。
结论
本文介绍了如何基于人脸嵌入和孪生卷积网络实现 FaceID 解锁机制的概念验证。希望对大家有所帮助。
原文地址:https://towardsdatascience.com/how-i-implemented-iphone-xs-faceid-using-deep-learning-in-python-d5dbaa128e1d
相关推荐
- ipad密码忘了怎么办最简单的方法
-
一般ipad开机密码忘了有以下这种方法可以试一下:操作步骤/方法 1.下载最新版的iTunes。2.通过数据线将ipad与电脑iTunes相连接。3.将ipad按住电源键关机。4.同时按住电...
- 戴尔官翻机官网(戴尔官翻机购买地址)
-
肯定可以购买啊,价格还便宜。如果是官翻机应该是可以的,不像市场上的私人翻新机,这个质量应该有保障的可以买的。就是官方翻新机,市场上是有的。具体进入渠道先不管。反正市面上是肯定有的。但是这类手机是享受苹...
- 手机系统在哪里找(手机系统需要更新吗)
-
设置方法如下:1、首先输入锁屏密码,进入桌面;2、打开【设置】进入系统设置中心,打开【应用市场】即可查找应用程序;3、进入设置中心的【更多设置】,找到【开发者选项】;4、打开【开启开发者选项...
- 电脑城装机系统在哪里下载(电脑城都用什么装系统)
-
其实所有系统基本都一致,装机版已经集成一些必要软件,有个别也许还做了优化,但相对而言,在安全性和兼容性上差一些。不是绝对的,因为装机版也分好多种。纯净版最好,系统干净,使用放心。一般的电脑维修店都能够...
-
- win7右键没有个性化(win7系统右键没有个性化)
-
如果电脑右键没有出现个性化和属性选项,可能是系统出现了错误或者个人设置问题。解决方法如下:首先检查计算机中是否安装有系统文件,如果文件丢失或被删除,则需要重新安装系统文件;其次,可以尝试恢复系统默认配置,去掉不必要的自定义设置;最后,如果上...
-
2025-12-25 08:03 off999
- ie11官方下载(ie11官方免费下载)
-
1/9点击左下窗户小图标。2/9点击齿轮设置图标。3/9点击【应用】。4/9点击【应用和功能】。5/9点击【程序和功能】6/9点击【启动或关闭windows功能】。7/9ie11没有勾选。8/9点击勾...
- 东芝笔记本怎么进入bios(东芝笔记本怎么进入语言界面)
-
以下是一些通用的方法:1.重启或开机时,按下F2键进入BIOS设置界面。在某些笔记本上,您需要按住Fn键才能按F2键。2.重启或开机时,同时按下Ctrl+Alt+Del键,然后立即按F2键...
- window10家庭版下载(window10家庭版下载地址)
-
家庭版用户可通过以下步骤下载AutoCAD2020:访问Autodesk官方网站(autodesk.com)并创建或登录您的Autodesk帐户。导航到AutoCAD2020...
- 超级吞噬系统txt(超级吞噬系统txt完整版下载)
-
男主从未推倒柳儿,一直把柳儿当妹妹,出去历练升级从未带着她,后面男主把她安置好后,作者就再没写过她。两人一直分开。吞噬星空的九大超级势力有六大巅峰种族,人族,虫族,机械族,妖族,晶族,狱族,还有另外三...
- dos如何格式化硬盘并分区(怎么在dos下格式化分区工具)
-
1、方式一:在“开始”搜索框汇总输入“cmd”并回车,2、方式二:单击“开始”——所有程序——附件——命令提示符,3、查看分区数:在DOS界面下输入“wmicdiskdrivegetpartit...
- vivo系统升级最新版本(vivo系统升级到什么版本了)
-
您可以按照以下步骤来更新vivoY5s的操作系统:1.进入设置-系统更新。2.点击“检查更新”,确保您的手机已经连接上WiFi并检测到有可用的更新。3.如果有可用的更新,请按照提示下载并安...
- 电脑做系统软件排行榜(做电脑系统的软件)
-
1、360安全卫士是一款由奇虎360公司推出的功能强、效果好、受用户欢迎的安全杀毒软件。360安全卫士拥有查杀木马、清理插件、修复漏洞、电脑体检、电脑救援、保护隐私,电脑专家,清理垃圾,清理痕迹多种功...
- win7热点(win7热点无ip分配)
-
1、点击桌面左下角的开始按钮,在搜索栏输入cmd,右击上方出现的cmd.exe,在弹出菜单中选择以管理员身份运行。2、然后在“命令提示符”里输入“netshwlansethostednetwor...
- centos下载安装(centos安装软件教程)
-
首先要知道您需要下载linux哪个发行版,目前比较流行的是ubuntu,所以以ubuntu为例说明:1、访问ubuntu官方网站www.ubuntu.com2、点击右上角的DownLoad(下载),...
- 360老版本卫士2014版(360卫士8.7.0)
-
先打开360官网,下载360软件管家,再从360软件管家里下载360卫士这是明显的中毒表现:1、关闭系统还原;2、重启,按F8,进入安全模式。3、在安全模式里,打开360杀毒。4、全盘查杀。要耐心等待...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
