2021年云栖技术大会-可持续技术发展正在直播中 了解详情
写点什么

面部识别算法是如何工作的?

2021 年 9 月 30 日

面部识别算法是如何工作的?

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


这一切始于 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

2021 年 9 月 30 日 10:281431

评论

发布
暂无评论
发现更多内容

【Flutter 专题】34 图解自定义 View 之 Canvas (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月日更

Pandas教程:数据处理基石-数据探索

Peter

Python pandas

看一遍就理解:MVCC原理详解

云流

Java MySQL 架构 面试 后端

私有云部署系列之动态获取IP(程序执行)

稻草鸟人

Python

“第三次分配”来了,你会被“分配”吗?

旺链科技

区块链 数字经济 观点分享

字节跳动是如何落地微前端的

字节跳动终端技术

字节跳动 微前端 Web应用开发

Pandas教程:数据类型操作

Peter

Python pandas

【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析

李浩宇/Alex

Disruptor 10月日更 异步高性能 高并发处理 性能提升

华为技术官珍藏版:SpringBoot全优笔记,面面俱到,实在太全面了

胧月

Java 架构 面试 微服务 后端

Vue进阶(幺贰捌):Vue插槽:slot、slot-scope与指令v-slot应用讲解

No Silver Bullet

Vue 10月日更 插槽

系统召回太慢?上 Milvus × PaddleRec 双剑合璧大法!

Zilliz

数据库 推荐算法 召回 向量检索

这些行业用ERP系统会有很大帮助

低代码小观

企业管理 ERP

云资源是什么意思?有什么特点?

行云管家

云计算 云服务 多云服务 云资源

物理服务器是什么意思?怎么构成?与云服务器有啥区别?

行云管家

云计算 服务器 云服务器 物理服务器

高并发中的 限流、熔断、降级、预热、背压!

进击的王小二

高并发 java

架构实战课程 模块5作业

Frank

架构实战课程 模块6作业

Frank

KubeVela 1.1 发布,开启混合环境应用交付新里程碑

阿里巴巴云原生

阿里云 云原生 KubeVela

细节理解!阿里内部Java高并发系统设计全彩手册曝光!霸榜GitHub

进击的王小二

Java 架构 高并发 Java性能调优

9. python 入门教程快速复习,序列,数值类型,字符串方法,列表、集合、字典方法,文件操作,解析式

梦想橡皮擦

10月日更

引航计划|后端|盘点后端领域的点点滴滴

xcbeyond

后端 引航计划 内容合集

BPM软件是什么?BPM软件跟BPA有关联吗?

低代码小观

企业管理 业务流程管理 信息管理

新一代容器平台ACK Anywhere,来了

阿里巴巴云原生

阿里云 云原生 ACK Anywhere

企业运维监控管理系统我给推荐行云管家!

行云管家

云计算 运维 运维监控 云管平台

2021年10月4日Facebook史上最严重宕机复盘分析

郑州埃文科技

ip数据 网络波动 网动仪

想了解Xtrabackup备份原理和常见问题分析,看这篇就够了

华为云开发者社区

MySQL 数据库 华为云 备份 XtraBackup

爱奇艺数据质量监控的探索和实践

爱奇艺技术产品团队

监控 数据治理 pingback

Golang语言HTTP客户端实践

FunTester

golang 性能测试 HTTP 接口测试 FunTester

直播回顾 | 云和恩墨范计杰:Oracle DBA的SQL编写技能提升宝典(含SQL资源)

墨天轮

oracle sql 函数

真香!华为JDK大佬耗时57天手写744页HotSpot VM源码笔记

程序员小毕

源码 程序员 架构 jdk 设计模式

不可思议!阿里大佬熬夜9天整理出749的HotSpot VM源码笔记

Java 架构 面试 程序人生 编程语言

开源中间件技术学习路线

开源中间件技术学习路线

面部识别算法是如何工作的?-InfoQ