原文:https://blog.algorithmia.com/understanding-facial-recognition-openface/
作者:Stephanie Kim
翻译:不二
欢迎加入CSDN人工智能技术交流QQ群(群号:299059314),内涵大量学习材料。

译者注:自从发现卷积神经网络对图像识别的特殊功能以后,人脸识别技术发展非常迅速,各种新算法层出不穷。在有效训练的情况下,基于openface的人脸识别已经非常精准,下面透过OpenFace来理解人脸识别。

人脸识别已经成为我们生活当中越来越普遍的一部分。

如今,智能手机使用人部识别来取得控制权,而像阿凡达这样的动画电影则用它来实现逼真的动作和表达。警方监控摄像头借助人脸识别软件鉴别通缉犯,同样的人脸识别也被零售商店用于进行有针对性的营销活动。并且我们都使用过类似于名人像 App和Facebook的自动标记工具,将我们、朋友和家人进行分类。

人脸识别可以在许多不同的场景中应用,但并不是所有的人脸识别库在准确性和性能上都是平等的,而且大多数最先进的系统都是专有的黑盒子。

OpenFace是一个开源库,它具有专利模型的性能和精确性。该项目是在考虑移动性能的情况下创建的,因此让我们来看看一些使这个库快速而准确的内部结构,并通过一些用例来思考为什么可能想要在项目中实现它。

高层体系结构概述

OpenFace是Brandon Amos、Bartosz Ludwiczuk和Mahadev Satyanarayanan开发的一种深度学习人部识别模型,模型基于文章:FaceNet:为人脸识别统一的嵌入和聚类,该文章由谷歌的James Philbin、James Philbin和Florian Schroff发表,并通过Python和Torch来实现,以便能在在CPU或GPU上运行。

尽管OpenFace只有几年的历史,但它已经被广泛采用,因为它提供的精确度与谷歌的FaceNet或facebook的DeepFace等私有的最先进的系统所包含的人脸识别模型类似。

OpenFace的特别之处除了开源之外,还在它主要集中在移动设备上的实时人脸识别,所以可以用非常精确的数据来训练一个模型,尽管模型的数据非常少。

从高层次的角度来看,OpenFace使用的Torch,是一个科学的计算框架能进行离线训练,这意味着它只在OpenFace完成一次,用户不必亲自动手训练成百上千的图片。然后把这些图像被扔进神经网络中用谷歌的FaceNet模型进行特征抽取。FaceNet依赖triplet loss方法来计算神经网络对人脸进行分类的准确性,并能够基于超球表面的测量结果进行人脸聚类。

在通过dlib的面部检测模型运行新图像之后,这个经过训练的神经网络在Python实现中被使用。一旦这些人脸被OpenCV的仿射变换规格化,所有的人脸都指向同一个方向,它们就会通过训练的神经网络单向传递。因此产生的128维度人脸嵌入(每张脸的128个测量值称为一个嵌入)可以对匹配分类,甚至可以用于相似检测的聚类算法中。

训练

在OpenFace pipeline的训练部分中,500k图像通过神经网络传递。这些图像来自两个公共数据集:CASIA-WebFace(由10575个独立的个体组成,总共有494,414张图像)和FaceScrub(由530个个体组成,共有106,863张图像,他们都是公众人物)。

在所有这些图像前面训练神经网络的目的是很明显的,在移动或者任何其他实时场景中都不可能训练50万张图片来获取所需的面部嵌入。但请记住,这部分pipeline只完成一次,因为OpenFace将这些图像用于生成128维度的人脸嵌入,它标识一个通用的面孔,用于Python训练的pipeline。然后使用低维度的数据(而不是在高维空间中)匹配图像,这有助于快速地创建模型。

正如前面提到的,OpenFace使用Google的FaceNet架构来进行特征提取,并使用triplet loss方法来测试神经网络对脸部的精确程度。它通过对三个不同的图像进行训练,其中一个是已知的人脸图像,叫做anchor图像,然后另一个图像是positive嵌入,而最后一个是不同的人的图像,被称为negative嵌入。

如果你想了解更多关于triplet loss的信息,请点击Andrew NG的卷积神经网络Coursera视频。

使用triplet嵌入的很重要的一点是,在一个单位超球面上,用欧氏空间距离能判断哪些图像更近,哪些更远。很明显,negative图像嵌入比positive和anchor测量的更深,而posivit与anchor空间距离更近。这一点很重要,因为决定集群算法可以用于相似性检测。如果想要在族谱网站上检测家庭成员,或者在社交媒体上寻找可能的营销活动(比如说团购),可能需要使用聚类算法。

脱离背景的人脸

上面已经介绍了OpenFace如何使用Torch来训练成千上万的来自公共数据集的图片,以获得低维度的面部嵌入,现在通过查看他们对流行的人脸检测库dlib的使用情况,来看看为什么要使用它,而不是OpenCV的面部检测库。

人脸识别软件的第一步是将人脸从图像的背景中分离出来,并将人脸从图像中分离出来。人脸检测算法还必须能够处理弱的和不一致的光线,以及不同的面部位置,比如倾斜或旋转的脸。幸运的是,dlib和OpenCV一起处理了所有这些问题。Dlib负责寻找脸部的基准点,而OpenCV则负责处理面部的标准化。

值得注意的是,在使用OpenFace时,可以实现dlib的面部检测,它组合使用了HOG向量的梯度)和支持向量机或OpenCV的Haar级联分类器。它们都接受过positive和negative图像训练,但是在实现上、检测速度和准确性方面都有很大的不同。

使用HOG分类器有几个好处。首先,在图像上使用一个滑动子窗口进行训练,因此不需要进行子采样和参数操作,就像在OpenCV中使用Haar分类器一样。这使得dlib的HOG和SVM的人脸检测更容易使用,而且可以更快地进行训练,同时所需要的数据更少,此外HOG的面部识别比OpenCV的Haar级联分类器更准确。所以使用dlib的HOG搭配SVM做人脸检测非常方便!

预处理

除了在图像中找到每张脸,人脸识别过程的还包括预处理图像,以便解决一些如不一致和弱光线的问题,预处理将图像转换成灰度级以进行更快的训练,同时对面部位置标准化。

虽然一些面部识别模型可以通过大量的数据集训练来处理这些问题,但dlib使用了OpenCV的2D仿射变换,它可以旋转脸部,使眼睛、鼻子和嘴巴的位置保持一致。在仿射变换中,有68个面部特征点用于特征检测,并且将测量所得点之间的距离与普通人脸图像中的点进行比较,随后根据这些点将图像进行旋转和转换,通过比较将其裁剪为96 96个像素,用于被训练的神经网络。

将图像从背景中分离出来,并使用dlib和OpenCV进行预处理之后,再将图像传送到经过训练的神经网络中,这是在Torch的pipeline部分完成的。这个步骤中,神经网络上有一个单向传递来获得用于预测的128维度嵌入(面部特征)。这些低维度的面部嵌入在分类或聚类算法中会使用到。

测试中OpenFace使用一个线性支持向量器,它通常在现实世界中使用以匹配图像的特征。OpenFace令人印象最深刻的一点是对图像进行分类只需要几毫秒的时间。

使用场景

经过一个较高层次的OpenFace架构的讨论之后,现在列举一些关于使用场景的有趣的想法。前面提到,人脸识别被用作一种访问控制和识别的形式。其中之一便是几年前探索的当进入办公室时,用它来识别和定制经历。https://blog.algorithmia.com/hey-zuck-we-built-your-facial-recognition-ai/。那已经是很久以前的故事了,可以尝试考虑创建一款移动应用,用于识别出参加俱乐部或派对的VIP用户。保镖们不需要记住每个人的脸,也不需要依赖一份名单来让人们进入。同时,在训练数据上添加新面孔也很容易,当个体回到户外呼吸新鲜空气,并想再次进入俱乐部时,模型就会被训练出来。参照以上这些原则,可以在聚会或会议上进行人脸识别,因为在那里有人需要临时进入楼层或办公室,安保人员或前台人员可以轻松地更新或删除手机上的数据集。

在哪里寻找已实现的OpenFace

我们已经做了一个检出OpenFace的案例,可以从OpenFace on GitHub下载模型实现人脸识别,或者从OpenFace model on Algorithmia通过SVM拉取代码实现添加、训练、移除和预测图像。如果想学习如何使用面部识别算法,请查看celebrity classifier。

看OpenFace如何做到精准人脸识别相关推荐

  1. 热成像进入AI人工智能时代!精准人脸识别体温计,实名制测量体温

    见所未见,未来已来. --题记 第25大AI趋势: 农业监测 刚刚,在六人无限制德扑游戏中,AI碾压了人类扑克高手. 知名创投研究机构CB Insights调研了25种最大的AI趋势,以确定2019年 ...

  2. 如何使用python人脸识别_如何利用python进行精准人脸识别

    2017-10-21 回答 1.1.介绍introduction 从opencv2.4开始,加入了新的类facerecognizer,我们可以使用它便捷地进行人脸识别实验.本文既介绍代码使用,又介绍算 ...

  3. 硬核科普:一文看懂人脸识别技术流程

    小编是个天生懒惰的人,同时又是个急性子,这样的人最享受被科技服务的乐趣. 举个例子,十多年前大家还在普遍用现金的时代,小编在商店买东西排队结账,每当看到收银员找零时手忙脚乱的样子就会心急如焚,只恨不能 ...

  4. 人脸识别最全知识图谱—清华大学出品(附全文下载)

    文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 清华大学AMiner平台(公众号ID:SciTouTiao) 看点:全面解析人脸识别技术原理 ...

  5. OpenCV 人脸识别 源代码

    请直接查看原文 OpenCV 人脸识别 源代码 https://hotdog29.com/?p=553 在 2019年7月6日 上张贴 由 hotdog发表回复 opencv 人脸识别 在本教程中,您 ...

  6. 大数据+人脸识别在商业银行中的应用

    在当前利率市场化.蓬勃发展.经济新常态三大因素形成共振的历史转折点上,我国商业经营模式面临着全新的变革.如何在精细化经营管理的基础上为客户提供更优质.更安全的服务体验,成为各商业银行竞争的焦点.近年来 ...

  7. js如何实现扫描身份证识别_人脸识别是如何实现的

    前言 以前我们看电影的时候看到人脸识别,瞳孔识别,和指纹识别的时候感觉好先进,特别有未来科技感.但是现在人脸识别技术已经非常普及了,无论我们是在付款或者在验证密码的时候都可以应用到人脸识别技术了.那么 ...

  8. Android园区部队人脸识别源码门禁项目讲解

    Android园区部队人脸识别源码门禁项目讲解 这边搞人脸识别相关项目有一段时间,今天抽时间讲述一个经典的人脸识别项目:部队人脸识别门禁系统. 大家都知道部队对人员管理安全要求是相当高的,很多保密的技 ...

  9. 人脸识别版本目前的问题

    人脸识别的版本暂时的问题: 1. 指标+稳定性 我们要保证运行的结果是跟算法出来的结果是一致的. 因为我们用的caffe 跟 别人跑的caffe 不是一样的.所以我们要从指标上来保证我们的结果是一致的 ...

最新文章

  1. multipartfile 获取音频时长_我在音频平台日赚150元的正确打开方式。或许适合你...
  2. mybatis-day1入门案例
  3. netduino之电源参考电路MC33269DT-5.0G
  4. MongoDB教程——第2天
  5. mybatis查询返回null解决方案
  6. Mobile Widget是一种新的手机应用形式吗
  7. BZOJ 1001 平面图转对偶图
  8. 视频中的字幕如何提取为文本
  9. Attention机制--concat方式
  10. 阿里程序员常用的15款开发者工具
  11. 自制hdmi线一头改vga图_杀鸡取卵 | 破拆电脑VGA电缆获取收音机天线零件:双目铁氧体磁芯...
  12. Leetcode(347)——前 K 个高频元素
  13. 桌面计算机图标带虚线框,win10系统桌面图标有虚线框的操作方法
  14. STM32F1系列以及CM3内核的时钟与中断内容详解
  15. 绘图神器draw.io(写文必备)
  16. MySQL8.0密码找回与权限刷新
  17. 如何确定产品生命周期
  18. Python pypinyin库,实现文字转拼音
  19. ROS学习----依据ROS入门教程,整理的ROS命令
  20. WindML、FreeType和TrueType三者相结合实现矢量字体的显示

热门文章

  1. 浅谈共享电单车的商业模式
  2. Flex布局 text-align 失效的问题
  3. “12306”,为什么现在又不崩了?系统架构是如何支撑百万QPS的
  4. 最先进的微型计算机,获得《微型计算机》称赞,GPD P2 MAX堪称对便携本的终极追求...
  5. 杭电acm题目分类 非常详细
  6. RBF神经网络与BP网络优缺点比较
  7. Drools动态创建规则文件并动态调用
  8. 用mprotect定位踩内存问题
  9. 好文章 强烈推荐计算机专业的看,“计算机科学与技术学习心得”
  10. Maven中optional和scope元素的使用,你弄明白了?