最近做了一个人脸关键点相关的项目,选择了PFLD方案,在这里顺便写一下论文的学习笔记。

1. Introduction

论文地址:https://arxiv.org/pdf/1902.10859.pdf

人脸关键点检测论文《 PFLD: A Practical Facial Landmark Detector》 在2019年2月提出的,是由天津大学、武汉大学、腾讯AI Lab等共同提出。该算法在精度、效率、模型压缩方面都有较大的优势,部署在手机端是很适合的。

首先作者介绍人脸关键点检测在实用性上存在多方面的挑战,比如在大姿态、夸张表情、极端光照及遮挡的条件下的关键点检测。对这些情况总结为四个方面的挑战:

Challenge #1 - Local Variation.

在夸张表情及极端光照的下,人脸的部分区域特征就会发生较大偏差甚至消失的情况。

Challenge #2 - Global Variation.

考虑到拍照时不同的人脸姿态及使用不同的拍摄设备得到图像的质量方面,存在成像不清晰、颜色偏差等,这对关键点检测也有较大的影响。

Challenge #3 - Data Imbalance.

数据不平衡方面,训练的样本存在数据类别不平衡,这也是比较重要的问题。

Challenge #4 - Model Efficiency.

模型效率,比如使用我们的手机端进行跑模型,也要考虑模型的大小和计算速度的问题。

针对以上的这些挑战,作者就提出了解决方案,即PFLD算法。

2. Methodology

2.1. loss 函数

整个网络的结构如下图所示,分为主网络(橙色框)和辅助网络(绿色框),主干网络backbone是用来预测关键点,而辅助网络用来预测人脸姿态,使关键点位置更加稳定和鲁棒性更好。

loss函数的设计:

最原始的loss函数如上面的定义,其中M代表样本数,N代表关键点数,担任权重的角色,关键点的距离(L1距离或者L2距离)。

作者考虑到数据集的各个类别不均衡,所以对loss函数进行重新设计如下:

式中的  表示最终的权重,相当于公式1中的

 (K=3)表示真实的人脸姿态和估算姿态之间的差值,用欧拉角来表示,即 yaw, pitch, roll。可以看到随着误差角度的增大,惩罚也会相应增大。

C为人脸的属性分类,共分为6类:profile-face, frontal-face, head-up, head-down, expression, and occlusion。

2.2. Backbone Network(主网络)

主干网络主要用于提取特征和预测关键点。结构如上图所示,先采用了mobilenet v2 的多个bottleneck 层, 然后再采用multi-scale,再通过FC层把多个尺度的特征连接起来。(更多有关于bottleneck的知识,请读者去阅读mobilenet v2论文)

2.3. Auxiliary Network(辅助网络)

辅助网络用于预测人脸的姿态的欧拉角,让预测的关键点位置更加稳定和鲁棒。在估算人脸姿态时,ground-truth的姿态角度通过已知的关键点来估算。

2.4. Implementation Details

超参数:

input shape: 112x112

batch size :256

optimizer:Adam

weight decay: 

learning rate:

数据增强策略:

论文中使用300W挑战赛数据集,其中3148张图片用来训练,689张用来测试。在制作300W数据集时,对每张人脸图片进行翻转,在-30°~30°之前每隔5°进行一次旋转,在每张图片上随机遮挡人脸区域的20%

3. Experimental Evaluation

CED(cumulative error distribution)曲线如图所示:

上图是模型的大小与速度方面,可以看到PFLD模型很小,但运行速度非常快,在ARM 845处理器上达到140 fps。表中C代表 CPU i7-6700K,G表示GPU GTX 1080Ti ,A表示 Qualcomm ARM 845 处理器。PFLD  0.25X 和 1X 分别表示mobilenet 网络中深度可分离卷积的宽度乘法因子(width Multiplier)。

如上图,PFLD模型精度,在300W数据集上采用IPN/ IOP两种评价标准的精度对比结果,可以看到在精度方面依然是最棒的。

部分效果图如下:

看效果还是非常好的,自己也对该论文进行了复现,目前在精度方面也取得不错的结果,速度方面离论文还有一定差距,后面有空了再改善。


References:

[1] PFLD: A Practical Facial Landmark Detector

[2] PFLD:简单、快速、超高精度人脸特征点检测算法

人脸关键点检测PFLD论文解读相关推荐

  1. [人脸关键点检测] PFLD:简单、快速、超高精度人脸关键检测

    转载请注明作者和出处: http://blog.csdn.net/john_bh/ 论文链接:PFLD: A Practical Facial Landmark Detector 作者及团队: 天津大 ...

  2. 【论文解读】PFLD:高精度实时人脸关键点检测算法

    这篇文章作者分别来自天津大学.武汉大学.腾讯AI实验室.美国天普大学.该算法对在高通ARM 845处理器可达140fps:另外模型大小较小,仅2.1MB:此外在许多关键点检测的benchmark中也取 ...

  3. 【项目实战课】基于Pytorch的PFLD人脸关键点检测实战

    欢迎大家来到我们的项目实战课,本期内容是<基于Pytorch的PFLD人脸关键点检测实战>.所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲 ...

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

    作者丨杜敏 学校丨华中科技大学硕士 研究方向丨模式识别与智能系统 研究背景 人脸关键点检测,在很多人脸相关的任务中,属于基础模块,很关键.比如人脸识别.人脸验证.人脸编辑等等.想做人脸相关的更深层次的 ...

  5. Tensorflow2实现人脸关键点检测算法PFLD——一个精度高,速度快,模型小的人脸关键点检测模型

    1. 前言 最近,学了人脸关键点检测算法,发现一个比较好的人脸关键点检测模型,打算学一学,让我们来看看算法是如何实现的吧! 论文地址:https://arxiv.org/pdf/1902.10859. ...

  6. 【每周CV论文推荐】 初学深度学习人脸关键点检测必读文章

    欢迎来到<每周CV论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的. 人脸关键点检测是人脸图像中重要的基石,今天给 ...

  7. 人脸关键点检测综述(含论文、数据集、方法等)

    人脸关键点 人脸关键点检测是人脸识别和分析领域中的关键一步,它是诸如自动人脸识别.表情分析.三维人脸重建及三维动画等其它人脸相关问题的前提和突破口.近些年来,深度学习(http://www.rainc ...

  8. 「每周CV论文推荐」 初学深度学习人脸关键点检测必读文章

    人脸关键点检测是人脸图像中重要的基石,今天给大家介绍入门深度学习人脸关键点检测必读的文章. 作者&编辑 | 言有三 1 DCNN Cascade 听这个名字就知道是一个很早期的,使用Casca ...

  9. 人脸识别,人脸关键点检测算法

    from http://blog.csdn.net/sloanqin/article/details/48193119 1 Face++:http://www.faceplusplus.com.cn/ ...

  10. 创意赛第二季又来了,PaddleHub人脸关键点检测实现猫脸人嘴特效

    前段时间,下班后闲来无事,参加了百度PaddleHub的AI人像抠图创意赛,凭借着大家的阅读量,获得了一个第三名,得了一个小度音响,真香啊! 对,说的是我 小奖品 PaddleHub创意赛第二期又出来 ...

最新文章

  1. python培训费用-python培训费需要多少钱?
  2. 匿名内部类,就是内部类的简写格式。
  3. C++中内存分配、函数调用和返回值问题
  4. js 根据模板动态添加行
  5. ThreadLocal原理解析以及是否需要调用remove方法
  6. 卡巴微软趋势科技等多款流行的反恶意软件产品被曝多个漏洞,可导致提权等后果...
  7. Build Path
  8. 微信小程序使用IconFont彩色图标
  9. JQuery EasyUI 1.5.1 美化主题大包
  10. u2000网管服务器系统安装,华为U2000安装
  11. 2017阿里巴巴实习生招聘编程题
  12. Android反编译查看源文件
  13. 在1分钟K线图中显示分时图均价线的公式
  14. 打开.pos文件--ProcessOn
  15. JS 实现网页截屏五种方法
  16. ios core plot设置xy坐标
  17. Smmu硬件寄存器—V2
  18. 2.VIM文本编辑器的下载与使用
  19. 为什么祖传代码被称为“屎山”?
  20. php aes解密中文,PHP AES加密解密算法

热门文章

  1. 详解30道Vue面试题
  2. C++静态库与动态库的区别
  3. 微信小程序TabBar的使用
  4. pr踩点插件beat edit安装教程
  5. Pickit 3 Programmer使用说明及 烧写程序步骤
  6. pcan的dbc和project等的配置
  7. 【MD5加密算法能被破解么?】
  8. 在windows 2003 中,启动SQL Server 2000 提示“没有找到MSVCR71.dll因此这个应用程序未能启动”
  9. PS 如何简单的更换图片的背景色
  10. (四)Selenium通过谷歌插件实现使用隧道代理