PFLD:简单高效的实用人脸关键点检测算法

2019 年 4 月 17 日 PaperWeekly


作者丨杜敏 

学校丨华中科技大学硕士

研究方向丨模式识别与智能系统




研究背景


人脸关键点检测,在很多人脸相关的任务中,属于基础模块,很关键。比如人脸识别、人脸验证、人脸编辑等等。想做人脸相关的更深层次的应用,人脸关键点是绕不过去的点。正是因为它是一个基础模块,所以对速度很敏感,不能太耗时,否则影响了系统整体的效率。所以对人脸关键点检测的要求是,又准又快。


研究问题


人脸关键点目前存在的问题(不能又准又快)的原因如下:


1. 局部变化:表情、局部特殊光照、部分遮挡,导致一部分关键点偏离了正常的位置,或者不可见了; 


2. 全局变化:人脸姿态、成像质量;


3. 数据不均衡在人脸数据里面,数据不均衡体现在,大部分是正脸数据,侧脸很少,所以对侧脸、大角度的人脸不太准;


4. 模型效率:在 CNN 的解决方案中,模型效率主要由 backbone 网络决定。 


在实际使用中,人脸关键点的问题主要有两个:1)对“点是否遮挡”判断是否准确;2)对大角度人脸(+-60 度以内)点位置预测的准确性和稳定性。


解决思路


1. 修改 loss,增加关键点的空间约束项(三个姿态角)和数据均衡项;

2. backbone 采用 MobileNet(常规操作); 

3. 用 auxiliary network,让点位置预测更稳定和鲁棒(常规操作)。


复现指南



模型


损失函数

 

损失函数的意义在于表示差异,而且能表示真正的距离。特别是当对象本身具备 3D 属性,而仅在 2D 上表示的时候,这样的距离表示就是不准确的。本文作者认为,对于人脸这种对象,人脸 pose(更简单的说是 3 个欧拉角)可以弥补一些人脸 3D 到 2D 的信息损失。具体怎么弥补? 

希望是网络可以学到 3D 姿态的信息,最容易想到的方法是让网络去预测三个角度,这么做是可以的。进一步还能怎么做?把预测的角度损失和点位置损失组合起来,具体的组合方式,比如相加,或者相乘。相加的方式比较类似多任务损失,相乘的方式可以理解为一种加权,因为角度损失一般会归一化到 0-1 之间。 

在实际中又发现,这个角度分布,存在样本不均衡的问题,所以又增加了样本均衡项。



绿色框是预测的角度和 gt 的差值,通过 cos 变成 0-1 之间,通过 (1-x) 操作变成单调增。 


红色框是样本均衡项,作者把人脸分成六类(侧脸,正脸,抬头,低头,有表情,有遮挡),统计了训练集中这六类的数量分布,计算对应的数量比例,比如 1/10,用它的倒数,作为均衡项(用倒数是否合理?是否有点糙?可以考虑 focal loss 和 class-balance loss 的处理方法)。


网络



上面是 auxiliary 网络,预测三个角度,infernce 不参与,和下面的网络,共用一些层。角度预测的 gt,是用一个平均正脸上预先定义的 11 点,和 gt 中的 11 点估计出的旋转角度,作为角度的 gt。

 下面是 backbone + head:



红框是 head,用了多尺度预测,类似 SSD 的做法。


实验


SOTA 比较:和去年的 LAB 方法(Look at Boundary)相比,NME 提升 0.1 个点。 

速度:ARM845 上,一张人脸只要 7ms。backbone 优化,另外一个原因是直接回归位置坐标,而不是常规的 heatmap + offsetr 的方式,无后处理耗时。

Ablation:



对于直接回归位置坐标,本文提出的改进 loss 提升略明显(存疑)。



个人评价


应用决定算法对什么更敏感。人脸关键点终究是一个耗时敏感的问题,为了效率,本文的考虑有如下:

  • backbone 采用 MobileNet 

  • 直接回归点坐标,省去后处理耗时 

  • 用 auxiliary 网络,这个网络再怎么搞,都不会影响 inference 耗时 

  • 对 loss 的优化,再怎么玩,都不会影响 inference 耗时 


什么会影响耗时:


  • 输入大小 

  • inference 涉及的 backbone 和 head 

  • target_to_label 的耗时 


所以,像什么对抗损失、模仿学习、加数据训等等方法,都是可以在不改变算力的情况提升模型性能的手段,在工业界常常使用。 


三点想法:


  • 如果模型的角度预测分支,放在和位置预测一起出,效果会怎么样?

  • 如果人脸的角度不是预测的,是标注的,效果会怎么样?

  • 考虑效率的话,输入大小和模型算力配比,是最佳的均衡么?


如果有大神复现了本方法,求分享交流,想知道上面三个问题的答案。




点击以下标题查看更多往期内容: 




#投 稿 通 道#

 让你的论文被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢? 答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。


📝 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向) 

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志


📬 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site 

• 所有文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通




🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



关于PaperWeekly


PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。


▽ 点击 | 阅读原文 | 下载论文

登录查看更多
20

相关内容

高效医疗图像分析的统一表示
专知会员服务
34+阅读 · 2020年6月23日
专知会员服务
31+阅读 · 2020年4月24日
PFLD:简单、快速、超高精度人脸特征点检测算法
人工智能前沿讲习班
6+阅读 · 2019年3月4日
【优博微展2018】刘昊:基于深度神经网络的人脸关键点检测
清华大学研究生教育
32+阅读 · 2018年12月1日
AI综述专栏 | 人体骨骼关键点检测综述
人工智能前沿讲习班
18+阅读 · 2018年11月7日
AI综述专栏 | 人脸检测算法综述
人工智能前沿讲习班
6+阅读 · 2018年9月10日
人体骨骼关键点检测综述
极市平台
21+阅读 · 2018年6月29日
一文综述人脸检测算法(附资源)
数据派THU
7+阅读 · 2018年5月8日
【CVPR2018】实时旋转鲁棒人脸检测算法
深度学习大讲堂
4+阅读 · 2018年4月19日
简单车牌检测
计算机视觉战队
6+阅读 · 2017年6月23日
Arxiv
5+阅读 · 2019年2月28日
Arxiv
6+阅读 · 2018年7月9日
Arxiv
5+阅读 · 2018年4月17日
VIP会员
相关VIP内容
高效医疗图像分析的统一表示
专知会员服务
34+阅读 · 2020年6月23日
专知会员服务
31+阅读 · 2020年4月24日
相关资讯
PFLD:简单、快速、超高精度人脸特征点检测算法
人工智能前沿讲习班
6+阅读 · 2019年3月4日
【优博微展2018】刘昊:基于深度神经网络的人脸关键点检测
清华大学研究生教育
32+阅读 · 2018年12月1日
AI综述专栏 | 人体骨骼关键点检测综述
人工智能前沿讲习班
18+阅读 · 2018年11月7日
AI综述专栏 | 人脸检测算法综述
人工智能前沿讲习班
6+阅读 · 2018年9月10日
人体骨骼关键点检测综述
极市平台
21+阅读 · 2018年6月29日
一文综述人脸检测算法(附资源)
数据派THU
7+阅读 · 2018年5月8日
【CVPR2018】实时旋转鲁棒人脸检测算法
深度学习大讲堂
4+阅读 · 2018年4月19日
简单车牌检测
计算机视觉战队
6+阅读 · 2017年6月23日
Top
微信扫码咨询专知VIP会员