写点什么

人脸关键点定位算法在实际应用中的经验总结

  • 2020-06-04
  • 本文字数:3852 字

    阅读完需:约 13 分钟

人脸关键点定位算法在实际应用中的经验总结

人脸关键点定位算法(Facial landmark detection)是指在 2D 人脸图片上定位出一些具有特殊语意信息的点,例如鼻尖、眉毛、嘴角等,如图 1 所示。人脸关键点定位算法并不是一项单一的任务,而是作为众多高级人脸分析任务的基础,这些高级人脸任务主要有人脸识别、3D 人脸重建、人脸表情迁移、人脸美化等。因此,人脸关键点定位的精度将于严重影响后续任务的精度。



图 1 人脸关键点定位图片


目前,人脸关键点定位模型主要可以分为基于手工特征的传统方法和基于深度学习的回归方法。传统方法主要有 AAMs (active appearance models)、CLMs (constrained local models)、ESR (explicit shape regression)、SDM (supervised descent method)等,这些方法主要是通过手动设计的特征去拟合出人脸关键点的位置。近年来,随着以卷积神经网络 (Convolutional Neural Networks, CNNs)和循环神经网络 (Recurrent Neural Networks, RNNs) 为代表的深度学习的方法快速发展,人脸关键点定位算法也迅速转向基于深度学习的方法。由于深度神经网络强大的特征提取能力,基于深度学习的人脸关键点定位算法在测评指标如 NME (Normal Mean Error) 和 FR (Failure Rate)上迅速超越传统方法。


一般来说,基于深度学习的人脸关键点定位又可以分为基于坐标回归的方法和基于热图回归的方法。总的来说,基于坐标回归的方法速度快、计算量小,但是精度不如基于热图回归的方法高;然而,基于热图回归的方法更侧重于结果的精度,但是模型体积较大、速度较慢。对于实际应用场景来说,按照任务要求的不同(如速度、精度以及运算效率等),选择不同类型的方法。接下来,文章将先对人脸关键点定位算法在实际使用中所面临的问题进行简要分析,然后按照不同类型的方法,对该领域的实践经验进行介绍。

一、 人脸关键点定位算法所面临的一些挑战

1.1 输入图片具有很强的特异性

在实际使用场景中,如人脸美妆、人脸识别等,模型输入的图片本身具有极强的特异性,例如极端的光照环境、夸张的表情、大角度的姿态、图片抖动所产生的模糊等。如图 2 所示,对这些图片进行精确地人脸关键点定位非常困难。



图 2 一些极端姿态的人脸图片

1.2 训练数据的不平衡

目前,公开的人脸关键点定位数据库都存在数据不平衡这一问题,既:正脸的图片的总数要远多于侧脸的图片总数,而大角度侧脸的训练图片更少。使用这种数据集训练出的人脸关键点定位算法,在评测数据集上可以获得非常高得精度,但是在实际使用中,有可能因为头部的轻微偏转,导致模型的精度严重下降。

1.3 模型运行效率

目前,人脸关键点定位任务在学术界和工业界所最求的目标并不完全相同。在学术界中,科研人员更加关注模型最终输出的结果在各种评测集上是否达到了最优,其次才是模型的参数量和执行效率等问题;然而,在工业界中,工程师们在一定的误差范围内,追求模型更小的体积以及更快的运行效率。这一问题致使高精度的人脸关键点定位模型很难直接应用到实际的任务之中。

二、 人脸关键点定位算法经验总结:

我们这一篇文章,主要将集中在算法在实际使用场景中的调优问题,将主要围绕在压缩模型体积的情况下,尽量减少定位精度的损失。下面将分别对基于坐标回归的方法和基于热图回归的方法在实际项目中的一些经验和总结分别进行描述和讨论。

2.1 基于坐标回归的人脸关键点定位算法调优

基于坐标回归的人脸关键点算法速度快,但是定位精度略差于基于热图回归的方法。这种方法比较适宜用于对实时性要求较高、但对定位精度要求相对不高的任务中(如人脸识别、情绪判断、头部姿态估计等)。基于坐标回归的算法在我们的实际项目中,可以做到模型体积小于 200KB,速度到达 1500fps ,同时在精度上仍然可以达到要求。下面介绍常用的调优方法:

2.1.1 设计轻量化的模型

在我们实际经验中,使用精心设计和调参的小模型在一定的情况下,精度完全可以超过使用了特征提取能力更强的大模型;常用的轻量化特征提取网络如 ShuffleNet、MobileNet 等,但是这些模型的体积对于边缘计算设备(智能手机、机器人等)仍然较大,模型的参数量和计算量如表 1 所示。此外,这种为图像分类设计的网络,直接应用到人脸关键点定位任务中并不是一种好的策略。为此,我们设计了一种专门用来进行人脸关键点定位的一种轻量化模型,表 2 是模型的基本结构。其中 ConvDW 代表深度可分离卷积,ConvDW*表示在该层对输入的 Feature Map 进行降采样。




我们使用 MSE Loss 作为优化函数,在 300W 数据集上进行训练和测试,获得结果如表 3 所示。从表中我们可以看出,使用我们专门设计的人脸关键点定位模型可以在极小的模型参数量和计算量中,获得更好地结果。


2.1.2 使用恰当的损失函数

对于基于坐标回归的人脸关键点定位算法,Loss 函数也是一项至关重要的优化项。在 Wing-CNN 文章之前,大部分基于坐标回归的算法都是使用 MSE Loss 作为损失函数,但是 MSE Loss 非常容易受到异常值的影响,通俗的来讲,MSE Loss 有可能因为几个极端的异常数据而陷入局部极值中,导致模型收敛较差。因为人脸关键点定位的标注数据本身就存在一定的误差,因此标注数据中存在异常值(或错误值)的可能性比目标检测、图像分类等视觉任务更大。问了解决这一问题,Wing-CNN 中提出使用 Wing Loss 来缓解模型对异常值的敏感程度。在表 4 中,我们对比了使用我们设计的小模型作为 BackBone 分别使用 MSE Loss 和 Wing Loss 作为损失函数在 300W-Fullset 上的测试结果。从表中,我们可以看出使用 Wing Loss 可以明显的提升模型的结果精度。


2.1.2 使用多阶段模型去提升人脸关键点定位性能

在实际应用中,如果需要获得高精度的人脸关键点定位结果,通常使用基于热图回归的算法;但是,有一些特殊的任务如手机端的视频人脸美妆软件(该算法完全在手机端运行,不需要借网络),就会对速度有较高的要求,同时也需要获得非常精确地人脸关键点定位结果。此时,我们可以借助多阶段人脸关键点定位模型来完成。


训练多阶段人脸关键点定位模型,首先使用一个非常浅层的关键点定位模型(Model-I)去进行 5 点定位,之后通过 5 点对人脸图片进行校正,然后再使用一个相对较大的模型(Model-II)进行正常的人脸关键点定位(如 68 点、106 点等)。图 3 表示多阶段的人脸定位模型训练的基本过程。



图 3 多阶段人脸关键点训练过程


在模型训练阶段,为了节约计算量,Molde-I 可以使用较小尺寸的输入图片(如 64x64),使用更加激烈的数据增广方法例如更大的旋转角、更强的边框扰动;在训练 Model-II 过程中,输入经过 Model-I 处理后转正的图片,此时的图片的输入尺寸、增广方式都按照正常训练方式进行。依据我们多次相关类型项目经验,多阶段定位模型可以获得与基于热图回归方法相互匹敌的结果,并且模型的运算速度快、系统开销少。因为 Model-I 的模型非常小,而且输入图片的尺寸也非常小,所以基本不会对模型速度和运行开销产生影响。

2.2 基于热图回归的人脸管家点定位算法模型调优

通常情况下,基于热图回归的人脸关键点模型算法受限于自身体积、运算量等制约,不会部署到对速度具有较高要求的移动端产品中。但是随着短视频、直播等新兴行业的发展和边缘计算设备运算能力的逐步提升,将高精度的人脸关键点定位算法在实际项目部署的需求逐渐增加。目前,我们是使用知识蒸馏的方法,可以完成精度高、实时性强的关键点定位模型在手机端的部署。我们对 Hourglass 进行精简,精简的方式主要是模型的深度和宽度两个方面,然后使用热图回归的常用方法对完成 Teacher Model 和 Student Model 的训练,在知识蒸馏过程中,不但需要对 Student Model 中每一个 Block 输出的 Feature Map 进行监督学习,也需要让 Student Model 对训练数据进行学习。知识蒸馏过程中,使用 MSE Loss 作为损失函数。

2.3 训练数据方面的调优

2.3.1 使用对抗生成网络(GAN)进行数据增广

根据实际的项目经验可知,同一张人脸图片在不同的光照背景、图片质量的情况下,定位结果会产生一定的偏差,如图 4 所示。这些细微的偏差会导致模型在最终的结果产生震荡,不但会对最终的精度产生影响,当算法应用到视频中时,会是定位结果在相邻帧之间产生严重的抖动。




图 4 图片背景对关键点定位结果导致的影响


对于这一问题,我们主要是通过 GAN 来替换图片的背景,完成训练图片的大规模增广。图 5 是我们在 300W 数据集上进行的数据增广实验结果。实际项目经验显示,使用 GAN 进行数据增广训练的人脸关键点定位模型无论是在定位精度还是在稳定性上都远好于未使用数据增广训练的模型。



图 5 使用 GAN 进行数据增广的结果

2.3.2 通过头部姿态来进行数据增广

对于常用的人脸关键点定位数据库包括 300W、AFLW、COFW 以及 WFLW 等,这些数据库中的正面人脸都远多于侧面的人脸图片。为了让训练数据中正脸和侧脸图片数量大致相等,我们可以通过给定的人脸关键点坐标等来计算出人脸的朝向(patch、yaw、roll),通过对人脸朝向的角度区间进行分类,然后手动复制那些姿态较少的数据,使各个区间中人脸图片的数量基本保持一致。与 GAN 背景转换方法相比,这种方法不需要训练对抗生成网络,因此也更加常用。


在本篇文章中,我们首先介绍了人脸关键点定位模型在实际使用时所面临的一些问题,然后分别从基于坐标回归的方法、基于热图回归的方法以及数据增广这三个角度,介绍了一些我们在项目中所总结的算法调优的经验和方法。希望这些方法和总结可以促进人脸关键点定位技术的发展和进步。


作者介绍:


沙宇洋,中科院计算所工程师,北京邮电大学硕士,目前主要从事人脸识别以及无人驾驶等相关方向的研究和实际产品开发。


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2020-06-04 07:006717
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 493.3 次阅读, 收获喜欢 1966 次。

关注

评论 1 条评论

发布
用户头像
您好 请问项目的代码可以分享一下吗,想学习一下具体的网络和数据增广的方法
2022-04-07 17:33
回复
没有更多了
发现更多内容

图解MySQL中SQL语句的执行过程

程序员小毕

Java MySQL 数据库 sql 程序员

【实践篇】推荐算法PaaS化探索与实践 | 京东云技术团队

京东科技开发者

PaaS 推荐算法 PaaS平台化能力 企业号 7 月 PK 榜

并发编程-CompletableFuture解析 | 京东物流技术团队

京东科技开发者

并发编程 CompletableFuture JDK1.8 企业号 7 月 PK 榜

Linux系统Docker优化详细教程。

百度搜索:蓝易云

Docker 云计算 Linux 运维 云服务器

浅析 TiSpark v3.x 新变化

TiDB 社区干货传送门

版本测评 新版本/特性解读 7.x 实践

HDC.Together2023 HarmonyOS学生公开课议程抢先看!

HarmonyOS开发者

HarmonyOS

区块链服务网络的顶层设计与应用实践

BSN研习社

亚信安慧通过ISO20000认证,AntDB数据库团队服务能力再上新台阶

亚信AntDB数据库

数据库 AntDB AntDB数据库 企业号 7 月 PK 榜

电子科技大学入驻飞桨AI Studio高校专区,AI优质课程等你来学!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

暑期参加百度网盘AI大赛,夺万元现金、获大厂内推!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

软件测试/测试开发丨Python 内置库 sys 学习笔记分享

测试人

Python 程序员 软件测试

Linux系统Memcached性能优化详细教程。

百度搜索:蓝易云

memcached 云计算 Linux 运维 云服务器

技术分享|GrowingIO分析云对ClickHouse的实践

Geek_2d6073

河北幸福消费金融基于 Apache Doris 构建实时数仓,查询提速 400 倍!

SelectDB

数据库 大数据 数据分析 后端 Doris

瀚元科技:利用A-OPS 智能运维助力边缘服务器运维效率提升30%

openEuler

Linux 运维 操作系统 openEuler 边缘

如何开发一对一视频源码

山东布谷网络科技

App 源代码

UPS设备在物流机房中的应用浅析 | 京东物流技术团队

京东科技开发者

机房管理 企业号 7 月 PK 榜 UPS

Java 命令行参数解析方式探索(四):Spark & Flink

冰心的小屋

Java spark 命令行 command Parameter

【落下帷幕】2023 中国大学生计算机设计大赛大数据应用大类国赛评审

ModelWhale

云计算 数据分析 在线编程 数据科学竞赛 中国大学生计算机设计大赛

MegEngine Python 层模块串讲(中)

MegEngineBot

Python 深度学习 开源

LED显示屏分为几类,特点分别是什么?

Dylan

LED显示屏 户外LED显示屏 户内led显示屏

技术优化:降本增效的常规实践

有态度的马甲

防范地质灾害,北斗用芯监测

江湖老铁

软件测试/测试开发丨Python 内置库 OS 学习笔记分享

测试人

Python 软件测试 测试开发 os内置库

Apache Doris 1.2.6 版本正式发布|版本通告

SelectDB

数据库 大数据 后端 Doris

数据库优化器设计穿越探索之旅

阿里技术

数据库 架构

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

大瞿科技

如何基于 Apache Doris 构建新一代日志分析平台

SelectDB

数据库 大数据 数据分析 Doris

【7.21-7.28】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

【好文推荐】敏捷绩效考核如何做?

ShineScrum捷行

PoseiSwap 即将开启质押,利好刺激下 POSE通证短时涨超 30%

西柚子

人脸关键点定位算法在实际应用中的经验总结_AI&大模型_沙宇洋_InfoQ精选文章