【QCon】精华内容上线92%,全面覆盖“人工智能+”的典型案例!>>> 了解详情
写点什么

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

  • 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 背景转换方法相比,这种方法不需要训练对抗生成网络,因此也更加常用。


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


作者介绍:


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


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2020-06-04 07:006683
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论 1 条评论

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

拆解雪花算法生成规则 | 京东物流技术团队

京东科技开发者

算法 雪花算法 企业号 7 月 PK 榜

antv-x6使用及总结 | 京东物流技术团队

京东科技开发者

数据可视化 可视化开发 企业号 7 月 PK 榜 antv-x6

【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(备份+恢复篇)

洛神灬殇

MySQL 数据恢复 数据备份 技术分析

IPQ5018|WIFI6|DR5018 vs DR5018M what's the difference?

wallyslilly

ipq5018

GitHub上有哪些好项目?GeaFlow图计算快速上手之SSSP算法

TuGraphAnalytics

图算法 图论 GeaFlow tugraph 单源最短路径

百度商业AI技术创新大赛区域赛落幕,各大高校科技新秀角逐复赛

百度Geek说

人工智能 百度 AIGC 企业号 7 月 PK 榜

Java的异常处理

java易二三

异常处理 java 编程 #编程

Java框架——SSM框架增删改查

java易二三

SSM框架 java 编程

提升直播软件源码开发平台性能关键利器功能_山东布谷科技创作

山东布谷科技

源码 软件 软件开发 直播 源码搭建

AI驱动税务智能,开启智慧税务新纪元

用友BIP

AI 税务管理

高性能网络 SIG 月度动态:再获认可!3 位成员成为 Linux 内核社区 reviewer

OpenAnolis小助手

Linux 内核 高性能网络 龙蜥sig smc

大数据实时链路备战——数据双流高保真压测 | 京东云技术团队

京东科技开发者

大数据 压测 企业号 7 月 PK 榜 双流 数据双流

Ubuntu 18.04系统编译安装Docker教程。

百度搜索:蓝易云

Docker 云计算 Linux ubuntu 运维

TE智库 |《中国通用大模型内容生成及安全性能力评测》报告发布,深度测评中国大模型玩家

TE智库

深耕零售行业数字化,乐檬软件与华为云携手共进

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 7 月 PK 榜

Ubuntu 18.04系统编译安装Tomcat教程。

百度搜索:蓝易云

云计算 tomcat Linux ubuntu 运维

粗粮细作,铁合金行业的节能降耗

用友BIP

冶金

保护 TDengine 查询性能——3.0 如何大幅降低乱序数据干扰?

爱倒腾的程序员

数据库

【专业 TypeScript 实战】15 个高级技巧,开创卓越开发之路!

汽车之家客户端前端团队

云环境与服务器的四大区别简单聊聊

行云管家

云计算 云服务器 云环境

点云标注在自动驾驶中的优化策略

来自四九城儿

创业大赛|第二届“金靴奔跑”创新创业大赛!

科兴未来News

点云标注在自动驾驶中的难点

来自四九城儿

告别传统人肉运维,实现360°可观测!奇点云数据存算引擎DataKun R2.0发布

Geek_2d6073

中企出海,数智人力构建全球化组织的驱动力!

用友BIP

中企出海 数智人力

结合线上线下环境,提供产品的服务...

Bonaparte

产品 产品经理 产品设计 产品思维 产品服务

深入探析数智时代下的分布式系统架构设计

不在线第一只蜗牛

AI 低代码 分布式架构 数智时代

如何更快地渲染?深入了解3D渲染性能的指南

Finovy Cloud

Python案例实现|租房网站数据表的处理与分析

TiAmo

Python 数据分析 爬虫

大型企业采购云管平台的需求是什么?选择哪家厂商好?

行云管家

云计算 企业上云 云管平台

频繁FullGC的原因竟然是“开源代码”? | 京东云技术团队

京东科技开发者

JVM GC 企业号 7 月 PK 榜 Full GC

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