摘要: 本文主要是展示FaceID解锁机器的基本工作机制,采用的方法是基于人脸映射和孪生卷积神经网络,Github上附详细代码。

对于果粉们来说,对新出的iPhone X讨论最多的是其解锁方式,TouchID的继承者——FaceID。对于新一代无边框造型手机而言,各大手机厂商不得不开发新的手机解锁方法以保持其无边框造型。一些苹果手机的竞争对手们继续使用传统的指纹识别传感器,只不过是将其放在其它不影响造型的位置上。而苹果公司这一次又走在了科技潮流的前沿,对其进行了创新,发明了一种更加简便快捷的方法——用户只需要看着手机即可完成解锁过程。由于先进的前摄深度相机,iPhone X能够创建用户人脸的立体图像,此外,使用红外相机捕捉用户面部的图像,这是为了使得系统对环境光线、颜色等变化更具有鲁棒性。之后,通过深度学习,智能手机能够很好地学习用户的面部细节,因此使得用户每次看手机的时候,手机都能够自动识别身份并进行解锁。有些人会对这种方法的准确率产生质疑,毕竟人的指纹是不会变的,而人脸的特征会随着是否留胡须、是否带眼镜、化妆等随之变化。然而令人惊讶的是,苹果公司宣传FaceID比TouchID方法更加安全,而且其错误率仅为1:1,000,000。

整个系统过程看着很简单,无非是获取用户人脸图像后,使用深度学习的方法对其进行人脸识别。我好奇的是整个过程是如何应用深度学习方法和如何对每一步骤进行优化,以得到这么高的识别正确率。本文将告诉大家我是如何使用Kears实现一个类似于FaceID算法的。

了解FaceID

“神经网络给FaceID提供的能力不仅仅是执行简单的分类过程”

第一步是仔细分析FaceID是如何在iPhone X上工作的。他们的白皮书可以帮助我们了解FaceID的工作机制。

使用TouchID时,用户必须先登记自己的指纹,需要在指纹传感器上按压几次,经过大约十几种不同方位的采集后,智能手机完成整个登记过程。同理,FaceID也需要用户首先登记自己的人脸信息,这个过程更加简单,用户只需要看着手机,然后沿着圆圈慢慢转动头部即可,这样使得能够登记来自不同角度的人脸信息。这种极快的登记方法涵盖了很多底层的学习算法,下面将一一介绍。

对于神经网络而言,执行分类过程意味着学习预测智能手机所看到的人脸是否为其登记的人脸。因此,应该使用一些训练数据来学习到辨别“真”或“假”的能力。但从原理上来讲,这与许多深度学习案例不一样,传统的一些深度学习方法是使用大量训练数据集来训练模型,这将需要花费大量的时间、精力等。此外,对于苹果公司而言,先训练一个更复杂的离线“网络模型”,训练好后将其迁移到手机上,这样的一种方法是不会被采用的。我相信FaceID是基于类似于孪生卷积神经网络(Siamese CNN)实现的,并且通过离线训练。将人脸映射成一个低维的潜在空间,使得不同人脸之间的距离最大化,使用对比损失(contrastive loss)衡量模型的性能。

从人脸到神经网络

孪生神经网络基本上由两个相同的神经网络组成,它们之间共享所有的权重。这种体系结构可以学习计算特定数据类型之间的距离,比如图像。我的想法是通过孪生神经网络,将用户图像映射到一个低维的特征空间,类似于一个n维数组,之后训练网络进行映射,以便尽可能地从不同类别中提取数据点,而来自同一类别的数据点尽可能地接近。归根到底,网络将学习从数据中提取最有意义的特征,并将其压缩成数组,之后创建有意义的映射。孪生神经网络能够做到这一点,自动编码器同样也能做到。

使用这种技术,人们可以使用大量的人脸来训练这样的网络模型以识别哪一个面孔与用户者最相似。就像苹果公司所做的那样,人们可以使用更难的图像数据来增强网络对双胞胎、敌对攻击(掩码)等的鲁棒性,使其拥有正确的预测和计算能力。使用这种方法的一个最大优点是获得了一个即插即用模型,它可以识别不同的用户,只需要简单地将初始设置时拍摄的图像映射到潜在空间中,而不需要任何进一步的训练。此外,FaceID能够适应你各方面的变化:突然变化(如眼镜、帽子、化妆等)和缓慢变化(胡须等)。这些是通过在映射特征空间中添加参考向量,根据新的外观计算出来的。

用Kears实现FaceID

对于所有的机器学习项目而言,首先需要的就是数据。创建自己的数据集需要花费很多时间和精力。因此,本文通过浏览网页获得一个RGB-D人脸数据集。这些RGB-D图像数据是由一系列面向不同方向以及不同面部表情的人脸组成,这和iPhone X使用的数据一样。

为了看到最终的实现效果,你可以看看我个人的GitHub主页,在里面可以发现有一个Jupyter Notebook。此外,我使用Colab Notebook完成本文实验。

本文创建了一个基于SqueezeNet的卷积神经网络模型,该网络模型将RGBD人脸图像作为网络的输入,其输出是两个映射之间的距离。模型训练时使用的对比损失,最终实现最大限度地减少属于同一个人的照片之间的距离,最大化不同人物照片之间的距离。

经过一些训练后,网络能够将人脸映射为128维数组,这将导致同一个人的照片被分到一起,而和其他人的照片尽可能的远。这意味着为了解锁手机设备,网络模型只需要计算在解锁过程中所拍摄的图片与之前登记阶段储存图片之间的距离。如果距离低于某一阈值(该值越小越安全),设备才解锁。

我使用T-SNE算法将128维中的两维特征进行可视化,每种颜色都对应着一个不同的人。正如图中所示,网络模型已经学会对这些图片进行分组。此外,使用PCA降维算法时,其得到的可视化图像也很有趣。

实验

实验模拟仿真整个FaceID的流程:首先,对用户面部登记;然后,在解锁阶段,模型通过计算解锁时检测到的人脸与之前登记人脸之间的距离,并确定它是否在设定的阈值以下,最终判断是否应该解锁手机。

现在让我们从登记用户开始:从数据集中获取同一个人的一系列照片,并模拟登记过程。设备计算出这些图片的特征映射,并将其存储在本地内存中。

现在看看如果是同一个用户试图解锁设备会发生什么情况。同一用户的不同姿势和面部表情都会获得一个较低的距离,大约平均为0.30左右。

下面看看如果是不同用户尝试解锁设备会发生什么情况。不同用户的人脸图像计算得到的距离平均为1.10。

因此,使用一个0.40左右的阈值就应该足够防止陌生人解锁您的手机设备。

结论

本文主要是展示FaceID解锁机器的基本工作机制,采用的方法是基于人脸映射和孪生卷积神经网络。本文的Python代码可以在这里获得,希望本文对你有所帮助。

作者信息

Norman Di palo,罗马大学学生,专注于人工智能、机器人。

文章原标题《How I implemented iPhone X’s FaceID using Deep Learning in Python》,

作者:Norman Di palo,译者:海棠,审阅:袁虎。

原文链接

干货好文,请关注扫描以下二维码:

用Python及深度学习实现iPhone X的FaceID功能相关推荐

  1. 手机编写python苹果_用Python及深度学习实现iPhone X的FaceID功能

    摘要: 本文主要是展示FaceID解锁机器的基本工作机制,采用的方法是基于人脸映射和孪生卷积神经网络,Github上附详细代码. 对于果粉们来说,对新出的iPhone X讨论最多的是其解锁方式,Tou ...

  2. 苹果手机怎么学python_我是如何在 Python 内使用深度学习实现 iPhone X 的 FaceID 的...

    雷锋网按:本文为 AI 研习社编译的技术博客,原标题 How I implemented iPhone X's FaceID using Deep Learning in Python,作者为 SHI ...

  3. 使用深度学习实现iPhone X的FaceID

    新款iPhone X最热门功能之一就是新的解锁方法:FaceID.由于创建了无边框手机,苹果不得不开发一种能简单快捷的解锁手机的新方法.不同于一些竞争对手继续使用放在不同位置的指纹传感器,苹果决定革新 ...

  4. 如何用 OpenCV、Python 和深度学习实现面部识别?

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 Face ID 的兴起带动了一波面部识别技术热 ...

  5. Keras快速上手:基于Python的深度学习

    Keras快速上手:基于Python的深度学习 谢梁,鲁颖,劳虹岚 著 ISBN:9787121318726 包装:平装 开本:16开 正文语种:中文 出版社: 电子工业出版社 出版时间:2017-0 ...

  6. 从Theano到Lasagne:基于Python的深度学习的框架和库

    从Theano到Lasagne:基于Python的深度学习的框架和库 [日期:2015-08-03] 来源:http://creative-punch.net/  作者:Creative Punch ...

  7. 附pdf下载 | 入门Python和深度学习的经典书

    当下Python和深度学习为代表的人工智能AI技术非常火热,正深刻影响着人类社会的方方面面.今天分享推荐三本入门Python和深度学习的电子书: python电子书教程 PyTorch电子书教程 神经 ...

  8. python人工智能方向怎么学_人工智能方向需要学习python或是深度学习呢?

    要回答这个问题,首先,我们先了解一下什么是Python和深度学习,各用于什么领域?了解了这两个问题,对于人工智能方向是需要学什么?先学什么?都会有一台清晰的答案. 一.Python Python是一种 ...

  9. 吸烟行为检测系统(Python+YOLOv5深度学习模型+清新界面)

    摘要:吸烟行为检测软件用于日常场景下吸烟行为监测,快速准确识别和定位吸烟位置.记录并显示检测结果,辅助公共场所吸烟安全报警等.本文详细介绍吸烟行为检测系统,在介绍算法原理的同时,给出Python的实现 ...

最新文章

  1. ubuntu websocket python2
  2. python爬虫案例讲解-Python爬虫案例集合
  3. 深度学习 tensorflow tf.layers.conv2d_transpose 反卷积 上采样
  4. 推动边缘计算的七项核心技术
  5. Android之Adapter总结
  6. 关于为什么10000000可以表示-128
  7. Refactoring Game Entities with Components
  8. T4 生成指定DB表实体
  9. Please Select android SDK的解决办法
  10. adb 安卓模拟器 进程端口_Frida初体验安卓CTF逆向
  11. 教大家一种迅雷下载百度云文件方法
  12. oracle varchar2 转换成date,将Oracle VARCHAR2转换为DATE并排除无效数据
  13. 【流量池】裂变营销:10种人脉裂变技能,6个裂变核心,8个吸粉人性本能怎样玩粉丝裂变?
  14. 小程序左滑删除,可上下滑动
  15. 英文单词乱序后还原 c语言,乱序背单词_有谁也用《不背单词》这个软件吗怎么可以改变背单词的顺序有顺序倒序和乱序的_淘题吧...
  16. jink Art儿童摄影师视频教程中文字幕
  17. win计算机名长度限制,Win7,Server 2012文件名过长无法删除解决方案
  18. android 9.0 10.0 去掉音量键+Power键组合键的屏幕截图功能
  19. 星期几—YYYY-MM-DD,表示一个日期,你知道是星期几吗?
  20. GSMA SGP.21协议学习

热门文章

  1. mysql填写账户远程_mysql账户添加远程访问
  2. 【LeetCode笔记】200. 岛屿数量(Java、DFS)
  3. layui添加复选框_layui复选框使用介绍
  4. linux redis 主从配置,redis集群(主从配置)
  5. pdf在线翻译_如何免费快速地翻译pdf英文文档,并保留很好的格式?
  6. 电脑音频服务未运行怎么解决_电脑故障维修技巧教程:新手必看的修电脑技巧!...
  7. PHP留言并展示_利用PHP实现简单留言板
  8. python以垂直方式输出hello world_python3提问:垂直输出Hello World,全部代码不超过2行....
  9. 天大校花,博士发Nature,30岁不到当耶鲁教授!
  10. 施一公又火了!曾突然回国震惊所有美国人,如今所创公司IPO在即,还有基金大佬重仓加盟!...