点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

作者 | Aniket Maurya

译者 | Flora

策划 | AI前线

过去十年,深度学习领域出现了许多先进的新算法和突破性的研究,并且引入了新的计算机视觉算法。

这一切始于 2012 年的 AlexNet。AlexNet 是一个深度(卷积)神经网络,它在 ImageNet 数据集(拥有超过 1400 万张图片的数据集)上取得了很高的准确率。

人类是如何识别人脸的?

也许,人类大脑中的神经元首先识别场景中的人脸(从人的体形和背景),然后提取面部特征,并通过这些特征对人进行分类。我们已经在一个无限大的数据集和神经网络上进行了训练。

机器中的面部识别是以同样的方式实现的。首先,我们采用面部检测算法来检测场景中的人脸,然后从检测到的人脸中提取面部特征,最后使用算法对人进行分类。

面部识别系统的工作流

1. 人脸检测

人脸检测是物体检测的一个特化版本,特别之处在于,它只检测一种物体,即人脸。就像计算机科学里需要权衡时间和空间,机器学习算法也需要在推理速度和准确性之间进行权衡。现在有很多物体检测算法,不同算法对速度和准确性的取舍有所不同。

本文评估了如下几个最先进的物体检测算法:

  • OpenCV(Haar-Cascade)

  • MTCNN

  • YoloV3 和 Yolo-Tiny

  • SSD

  • BlazeFace

  • ShuffleNet 和 Faceboxes

为了构建一个强大的人脸检测系统,我们需要准确且快速的算法,以满足在 GPU 以及移动设备上实时运行的需要。

准确度

在流媒体视频的实时推理中,人们的面部可能有不同的姿势、遮挡和照明效果。因此,算法能在不同的光照条件和不同姿态下精确检测人脸非常重要。



在不同的姿态和光照条件下的人脸检测

OpenCV(Haar-ascade)

我们从 OpenCV 的 Haar-cascade 实现开始,它是一个用 C 语言编写的开源图像处理库。

优点: 由于这个库是用 C 语言编写的,所以它在实时系统中的推理速度非常快。

缺点: 这个实现的问题是它无法检测侧脸,而且在不同姿态和光照条件下表现欠佳。

MTCNN

这种算法基于深度学习方法。它使用深度级联卷积神经网络(Deep Cascaded Convolutional Neural Networks)来检测人脸。

优点: 它比 OpenCV 的 Haar-Cascade 方法准确性更高

缺点: 运行时间较长。

YOLOV3

YOLO(“You only  look  once”)是用于物体检测的最先进的深度学习算法。它由许多卷积神经网络组成,形成一个深度 CNN 模型 (深度意味着模型架构复杂性很高)。

原始的 YOLO 模型可以检测 80 个不同的物体类别,而且检测精度很高,而我们只需要用该模型检测一个物体——人脸。我们在 WiderFace(包含 393,703 个面部标签 的图像数据集)数据集上训练了这个算法。

YOLO 算法还有一个微型版本,即 Yolo-Tiny。Yolo-Tiny 需要的计算时间比较少,但却牺牲了一些准确性。我们用相同的数据集训练了一个 Yolo-Tiny 模型,其边界框(boundary box)结果并不一致。

优点: 非常准确,没有任何缺陷。比 MTCNN 更快。

缺点: 由于具有巨大的深度神经网络层,它需要的计算资源更多。因此,该算法在 CPU 或移动设备上运行地很慢。在 GPU 上,它的大型架构也需要耗费更多的 VRAM。

SSD

SSD(Single Shot Detector)也是一个类似 YOLO 的深度卷积神经网络模型。

优点: 良好的准确性。它可以检测各种姿势、光照和遮挡。良好的推理速度。

缺点: 比 YOLO 模型差。虽然推理速度较好,但仍不能满足在 CPU、低端 GPU 或移动设备上运行的要求。

BlazeFace

就像它的名字一样,它是由谷歌发布的速度极快的人脸检测算法。它接受 128x128 维的图像输入,推理时间是亚毫秒级,已优化到可以在手机中使用。它速度这么快的原因是:

  • YOLO 和 SSD 用来检测大量的类别,而 BlazeFace 不同,是一个专门的人脸检测器模型。因此 BlazeFace 的深度卷积神经网络架构比 YOLO 和 SSD 的架构小。

  • 它采用的是深度可分离卷积层(Depthwise Separable Convolution),而不是标准的卷积层,这样就降低了计算量。

优点: 非常好的推理速度,且人脸检测的准确率高。

缺点: 这个模型的优化目标是对手机摄像头获取的图像进行人脸检测,因此它预期人脸会覆盖图像中的大部分区域,而当人脸尺寸较小时,它的识别效果就是很好。所以,当对闭路电视摄像机获取的(CCTV ,Closed Circuit Tele Vision)图像进行人脸检测时,它表现得并不理想。

Faceboxes

Faceboxes 是我们使用的最新的人脸检测算法。与 BlazeFace 类似,它是一个小型的深度卷积神经网络,只为检测一种类别——人脸而设计。它的推理时间可满足 CPU 上的实时检测需求。它的准确度可以与 Yolo 人脸检测算法相媲美,而且,不管图像中的人脸较大还是较小,它都可以精确地检测。

优点: 推理速度快,准确性好。

缺点: 评估仍在进行中。

2. 特征提取

在检测到图像中的人脸后,我们对人脸进行裁剪,并将其送入特征提取算法,该算法创建面部嵌入(face-embeddings)——一个代表人脸特征的多维(主要是 128 或 512 维)向量。我们使用 FaceNet 算法来创建面部嵌入。

嵌入向量代表一个人的面部特征。因此,同一个人的两个不同图像的嵌入向量之间的距离比较接近,而不同人的嵌入向量之间的距离比较远。其中,两个向量之间的距离采用的是欧氏距离。

3. 面部分类

在得到面部嵌入向量后,我们训练了一种分类算法,即 K- 近邻(K-nearest neighbor,KNN)算法,根据一个人的嵌入向量对其进行分类。

假设在一个组织中,有 1000 名员工。我们创建了所有员工的面部嵌入,并使用嵌入向量训练分类算法。该算法以面部嵌入向量作为输入,以人的名字作为输出返回。

在把图片放到网上前,用户可以采用过滤器修改图片中的特定像素。人眼无法察觉这些变化,但它会让面部识别算法觉得很困惑。—— ThalesGroup

当前,面部识别算法已经取得了巨大的进步。但这仅仅是技术革命的开始。可以想象一下,未来面部识别算法和聊天机器人技术的联合起来是多么强大。

英文原文:

https://www.pimonk.com/post/how-do-facial-recognition-systems-algorithms-work-in-2021

好消息!

小白学视觉知识星球

开始面向外开放啦

面部识别算法是如何工作的?相关推荐

  1. 在非互联网公司?!算法工程师的工作内容及心得建议

    [导语]网上已经有很多在互联网公司工作的算法工程师的日常了,那么小编便来说说在咨询公司,身为算法工程师,工作是一种什么样子的体验,同时也为对咨询感兴趣的小伙伴指明点方向. 具体内容: 工作内容详解 对 ...

  2. Android 面部识别之二(调用开源面部识别算法seetaface检测)

    Android 面部识别之二(调用开源面部识别算法seetaface检测) https://github.com/seetaface/SeetaFaceEngine(Seetaface官方地址) 如果 ...

  3. 7 年算法工程师的工作总结,太精辟了!

    大家好,我是chris,入行前5年在一家上市游戏公司做算法,从数据挖掘算法在业务线落地开始,涉及机器学习.深度学习,后来逐步负责整个算法团队建设. 现在在阿里,也是负责算法方面的工作,涉及到的领域涵盖 ...

  4. CV算法工程师:工作一年的小反思

    今天是正式工作后的第一年,打算做一件事,以后要持续记录自己的工作感想和生活状态.人这一辈子那么有限,作为一个普通人,也许我穷极一生也不会有什么大的成就可以让外人为我写下一个传记.但是我可以用自己的手记 ...

  5. python算法工程师简历_7 年算法工程师的工作总结,太精辟了!

    原标题:7 年算法工程师的工作总结,太精辟了! 大家好,我是chris,入行前5年在一家上市游戏公司做算法,从数据挖掘算法在业务线落地开始,涉及机器学习.深度学习,后来逐步负责整个算法团队建设. 现在 ...

  6. 名校算法博士找工作两月无果,因本科是不知名学校被婉拒

    一名学习算法的上海交大博士,工作三年后裸辞,本以为可以很轻松的找到下家,可是两个月过去了,却没有找到合适的工作.一名猎头在得知其本科毕业于不知名学校后,表示公司对学历有规定,如果本科不是211,没有机 ...

  7. 亚马逊63岁「老司机」困在算法里,工作4年却因机器评分太低被开除!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来源:外媒 编辑:LQ [导读]63岁的老司机诺曼丁为亚马逊Flex配送干了4年,11 ...

  8. java加密工作模式None_java加解密算法--对称加密工作模式

    对称加密又分为分组加密和序列密码. 分组密码,也叫块加密(block cyphers),一次加密明文中的一个块.是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆 ...

  9. 人工智能AI常见的经典K-means聚类算法原理和工作过程

    K-means聚类算法亦称K聚类均值算法,K-means算法是硬聚类算法中的一种.聚类算法是一类无监督机器学习.K-means算法是计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法.K-me ...

最新文章

  1. 手工搭建APACHE服务
  2. Python 错误和异常小结[转]
  3. 【链接保存】十分钟上手sklearn:特征提取,常用模型,交叉验证
  4. 乌班图mysql8.0安装第一次手工启动_Ubuntu Server 16.04下mysql8.0安装配置图文教程
  5. 自己动手实现STL:前言
  6. Oracle内置存储过程之DBMS_OUTPUT
  7. Python - 列表解析式/生成器表达式
  8. python中的translate_Python3 translate()方法
  9. 会议直播方案 腾讯会议
  10. linux 串口monitor,串口监视工具CommMonitor如何使用-CommMonitor的使用方法 - 河东软件园...
  11. mac小白怎么下载网页视频?
  12. iterm2 ssh 乱码_Royal TSX 使用 iterm2 插件 SSH 连接报错及中文乱码
  13. 【Micro USB选择指南】手工焊接Micro USB接口器件型号选择
  14. 井字棋TicTacToe_01
  15. 解决Linux无法连接外网的问题
  16. [审核]审核被拒(陌生社交应用)
  17. css_使div中的文本自动换行
  18. matlab趋势分析法,趋势分析法案例.pdf
  19. tcl多媒体面试 java_TCL面试经验
  20. cw脉冲matlab产生,CW脉冲和LFM信号Matlab仿真.pdf

热门文章

  1. 人工智能的中国式崛起
  2. 安卓Android开发连载系列高级课
  3. Vmware 分辨率设置
  4. SEO优化网站教程5
  5. Win10系统怎么使用U盘重装(图文并茂)
  6. 零时科技|2021年,你应该了解的区块链安全
  7. windows环境, C++程序里强制切换显卡(切换为英伟达)
  8. 嵌入式面试常见问题(十一)—各大公司面试题
  9. IntelliJ IDEA 常用的配置 【钢镚核恒】
  10. Java定义一个数组,输出数组中的最大值和最小值