写点什么

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

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


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


作者介绍:


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


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

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

关注

评论 1 条评论

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

TiDB Cloud 上线亚马逊云科技 Marketplace,为全球用户提供云端一栈式实时 HTAP 数据库体验

PingCAP

来自未来的交互设计!当电影中的一切变为现实,设计师要如何进化?

博文视点Broadview

基于Calcite的分布式多数据源查询

麒思妙想

MySQL 数据库 Apache Calcite gbase8a

流批一体技术框架探索及在袋鼠云数栈中的实践

袋鼠云数栈

“在线设计”网络资源管理的源头活水

鲸品堂

通信运营商 在线设计平台

2022年保障企业内网安全就用行云管家!免费试用!

行云管家

云计算 云平台 内网 云管平台

第三方测评:GaussDB(for Redis)稳定性与扩容表现

华为云开发者联盟

redis 华为云 GaussDB(for Redis) NoSQL数据库 云原生NoSQL数据库

“以终为始”的正确使用方式

石云升

思维模型 1月月更

手把手教你丨小熊派移植华为 LiteOS-M

华为云开发者联盟

华为 鸿蒙 LiteOS 小熊派 移植

微信的业务架构图和学生管理系统的毕业设计

Geek_8d5fe5

架构实战营

异步调用如何使用是最好的方式?

CRMEB

Spring Boot Admin 添加报警提醒和登录验证功能!

王磊

五步实现HarmonyOS应用(ets)【鸿蒙开发 07】

坚果

鸿蒙 1月月更

前端工程师 2022 年必备的 7 个工具

开源之巅

JavaScript node.js

企业上云后,不容忽视的管理工具-云管平台

行云管家

云计算 企业上云 云管平台 云管理

携程DBA负责人俞榕刚:OceanBase在携程的落地和实践

OceanBase 数据库

数据库 分布式 OceanBase 开源 携程 客户实践

恒源云(GPUSHARE)_attention decoder效果不佳时如何应对

恒源云

深度学习 计算机视觉

一线开发人员,你对项目了解多少?

蜜糖的代码注释

Java 程序员 后端技术

ReactNative进阶(二十九):BloC 模式

No Silver Bullet

React Native 1月月更 BloC

鉴释加入龙蜥社区,助力开源生态建设

OpenAnolis小助手

Linux 开源 社群 合作伙伴

用 docker 快速搭建 kafka(qbit)

qbit

kafka zookeeper docker image

☕【Java深层系列】「并发编程系列」让我们一起探索一下CompletionService的技术原理和使用指南

码界西柚

Java 线程池 CompletionService 异步执行 1月日更

恒源云(GPUSHARE)_AdderSR: Towards Energy Efficient Image Super-Resolution学习笔记

恒源云

人工智能 深度学习 计算机视觉

全栈工程师?你知道全流程工程师吗?

蜜糖的代码注释

Java 开发 后端技术

鉴释加入龙蜥社区,助力开源生态建设

OpenAnolis小助手

Linux 开源

Linux之wc命令

入门小站

Linux

高并发环境下,6个构建缓存服务需要注意的问题

华为云开发者联盟

缓存 高并发 开发 并发 缓存服务

03uniapp的生命周期【uniapp 专题 03】

坚果

小程序 uniapp 1月月更

Flutter启动流程分析之插件化升级探索

得物技术

flutter Weex Google 框架 原生

必读!如何有效的进行沟通

观测观测

在线YAML转TOML工具

入门小站

工具

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