当前位置: 首页 > 编程日记 > 正文

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

640?wx_fmt=png

作者 | 周强(CV君)

来源 | 我爱计算机视觉(公众号id:aicvml)

60s测试:你是否适合转型人工智能?

https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw

什么样的算法才是好算法?

真正能实用的算法才是最好的算法!

这需要实现三个目标:精度高、速度快、模型小!

近期,arXiv新发布的文章《PFLD: A Practical Facial Landmark Detector》,则是实用人脸特征点检测算法的典范。

640?wx_fmt=png

PFLD算法,目前主流数据集上达到最高精度、ARM安卓机140fps,模型大小仅2.1M!

这篇新出的论文,必将成为人脸特征点检测领域的重要文献,今天我们就一起来探究一下,PFLD算法到底有什么黑科技。

作者信息:

640?wx_fmt=png

作者分别来自天津大学、武汉大学、腾讯AI实验室、美国天普大学。

感谢各位大牛!

人脸特征点检测的挑战

作者首先从算法实用性角度讨论了人脸特征点检测问题的面临的挑战。

  • Challenge #1 - Local Variation

人脸表情变化很大,真实环境光照复杂,而且现实中大量存在人脸局部被遮挡的情况等。

  • Challenge #2 - Global Variation

人脸是 3D 的,位姿变化多样,另外因拍摄设备和环境影响,成像质量也有好有坏。

  • Challenge #3 - Data Imbalance

现有训练样本各个类别存在不平衡的问题。

  • Challenge #4 - Model Efficiency

在计算受限的设备比如手机终端,必须要考虑计算速度和模型文件大小问题。

算法思想

作者使用的网络结构如下:

640?wx_fmt=png

其中,

黄色曲线包围的是主网络,用于预测特征点的位置;

绿色曲线包围的部分为辅网络,在训练时预测人脸姿态(有文献表明给网络加这个辅助任务可以提高定位精度,具体参考原论文),这部分在测试时不需要。

作者主要用两种方法,解决上述问题。

对于上述影响精度的挑战,修改loss函数在训练时关注那些稀有样本,而提高计算速度和减小模型size则是使用轻量级模型。

  • Loss函数设计

Loss函数用于神经网络在每次训练时预测的形状和标注形状的误差。

考虑到样本的不平衡,作者希望能对那些稀有样本赋予更高的权重,这种加权的Loss函数被表达为:

640?wx_fmt=png

M为样本个数,N为特征点个数,Yn为不同的权重,|| * ||为特征点的距离度量(L1或L2距离)。(以Y代替公式里的希腊字母)

进一步细化Yn:

640?wx_fmt=png

其中

640?wx_fmt=png

即为最终的样本权重。

K=3,这一项代表着人脸姿态的三个维度,即yaw, pitch, roll 角度,可见角度越高,权重越大。

C为不同的人脸类别数,作者将人脸分成多个类别,比如侧脸、正脸、抬头、低头、表情、遮挡等,w为与类别对应的给定权重,如果某类别样本少则给定权重大。

  • 主网络

作者使用轻量级的MobileNet,其参数如下:

640?wx_fmt=png

  • 辅网络

参数如下:

640?wx_fmt=png

实验结果

作者在主流人脸特征点数据集300W,AFLW上测试了精度,尽管看起来上述模型很简单,但超过了以往文献的最高精度!

下图是在300W上的CED,完美将其他算法的曲线压在下面。

640?wx_fmt=png

下图为在300W数据集上不同评价标准IPN\IOP精度比较结果,依然是最棒的。

640?wx_fmt=png

其中PFLD 1X是标准网络,PFLD 0.25X是MobileNet blocks width 参数设为0.25的压缩网络,PFLD 1X+是在WFLW数据集上预训练的网络。

值得一提的是表格中LAB算法,是CVPR2018上出现的优秀算法,之前一直是state-of-the-art。感兴趣的朋友可以参考52CV当时的报道:重磅!清华&商汤开源CVPR2018超高精度人脸对齐算法LAB 。

下图是该算法在AFLW数据集上与其他算法的精度比较:

640?wx_fmt=png

同样是达到了新高度!

下面来看一下算法处理速度和模型大小,图中C代表i7-6700K CPU,G代表080 Ti GPU,G*代表Titan X GPU,A代表移动平台Qualcomm ARM 845处理器。

640?wx_fmt=png

PFDL同样是异乎优秀!与精度差别很小的LAB算法相比,CPU上的速度提高了2000倍!

下面是一些特征点检测示例,尽管很多样本难度很大,但PFLD依然给出了可以接受的结果。

640?wx_fmt=png

640?wx_fmt=png

作者没有开源代码,但给出了Android应用 APK 和Android工程(算法封装在bin文件里)。

这个算法实在是太吸引人了,你是不是也想试一下呢?

论文作者给的网址:

https://sites.google.com/view/xjguo/fld

可惜国内不能下载,不过不用担心,(本文作者)已经把它搬到百度云了

链接:

https://pan.baidu.com/s/16HjDy9TyotCVwDdd55oWVQ 

提取码:glwr

作者也下载了APK试用,表示好像没看到效果,不知是不是手机兼容性有问题。提醒一下,论文作者声明,该工程仅可用于研究比较,如需商业使用需要联系作者获得授权。

论文地址:

https://arxiv.org/pdf/1902.10859.pdf

PFLD算法看起来简单,但精度却很高,这无疑来自作者设计的Loss函数很好的处理了样本类别不平衡的问题,你觉得还有更好的处理方法吗?欢迎留言。

(本文为AI科技大本营转载文章,转载请联系作者)

人工智能的现状及今后发展趋势如何? 

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

群招募

扫码添加小助手微信,回复:公司+研究方向(学校+研究方向),邀你加入技术交流群。技术群审核较严,敬请谅解。

640?wx_fmt=jpeg

推荐阅读:

  • 投稿近2000,NAACL 2019接收率仅为22.6%|附录取论文名单

  • 如何从零开始用PyTorch实现Chatbot?(附完整代码)

  • 成长路线图:如何成为一名Python开发者?

  • 春招已近,这份面试指南请收下

  • 20万赚200万,48岁创业者是这样吊打小鲜肉的!

  • 一部刷爆朋友圈的5G短片,看完才知道5G多暖多重要!

  • 他修过车、杀过鱼,最终进入阿里巴巴打造9个本地版支付宝!

  • 光凭 5G 根本无法解决宽带问题!

  • 为啥程序员下班后只关显示器从不关电脑?

640?wx_fmt=png

❤点击“阅读原文”,查看历史精彩文章。

相关文章:

Cookie实现记住密码、自动登录

前端代码 <form id"form" action"xxx" method"post"><div><input type"text" name"account" id"account" placeholder"账号"><input type"text" name"pwd" i…

【Ubuntu】VirtualBox+ubuntu中显示摄像头

1、下载插件 https://www.virtualbox.org/wiki/Downloads 2、修改下载的插件的后缀 将后缀名改为vbox-extpack 如下载的插件为Oracle_VM_VirtualBox_Extension_Pack-5.2.14.txt&#xff0c;改为Oracle_VM_VirtualBox_Extension_Pack-5.2.14.vbox-extpack 3、安装插件 点击…

以SIGSEGV为例详解信号处理(与栈回溯)

以SIGSEGV为例详解信号处理(与栈回溯) 信号是内核提供的向用户态进程发送信息的机制, 常见的有使用SIGUSR1唤醒用户进程执行子程序或发生段错误时使用SIGSEGV保存用户错误现场. 本文以SIGSEGV为例, 详细分析信号使用方法, 内核信号的发送与接收机制. 1. 信号处理例程 以下是一…

十个jQuery图片画廊插件推荐

2019独角兽企业重金招聘Python工程师标准>>> jQuery的画廊插件可以将分组图像和多媒体资料转成类似Flash的图像或照片。当幻灯片已经成为网站的重要组成部分&#xff0c;jQuery的重要性不能被忽视。下面为你介绍了10个最有美感&#xff0c;创新性和创造性的jQuery图…

总结机器学习优质学习文章Top50!

整理 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;在过去一年里&#xff0c;我们每个月都会给大家推荐一些优质的、最新的机器学习研究成果或机器学习技术文章&#xff0c;很多文章是从近千篇文章中评选出来的。综合考虑这些文章的更新时间…

【Qt】ubuntu QtCreator的pro文件中使用pkg-config

试验环境 ubuntu14.04.5 opencv2.4.13.6 Qt Creator 4.0.3 Qt 5.6 使用方法 在pro文件中&#xff0c;添加opencv头文件路径 INCLUDEPATH /usr/local/opencv2.4.13.6/include 添加pkg-config –libs opencv CONFIG link_pkgconfig PKGCONFIG opencv 可以在命令行下…

弯曲评论上关于SOC的一段文章【整理】

近几天&#xff0c;弯曲评论上针对一个文章进行了热烈的讨论。这个文章本无关乎SOC&#xff0c;不过&#xff0c;有业界同仁willchen将话题引到了SOC上&#xff0c;并发表了一番言论&#xff0c;整理如下&#xff08;BTW&#xff0c;看着willchen的文字&#xff0c;让我想到了s…

C# richtextbox 自动下拉到最后 方法 RichTextBox读取txt中文后出现乱码

C# richtextbox 自动滚动到最后 光标到最后 自动显示最后一行 private void richTextBox1_TextChanged(object sender, EventArgs e) { richTextBox1.SelectionStart richTextBox1.TextLength; // Scrolls the contents of the control to the current car…

【Qt】在Qt中使用opencv,不要使用opencv创建窗口

问题描述 在ubuntu14.04.5 Qt5.6中使用opencv创建窗口显示摄像头时&#xff0c;报错&#xff1a; (:1103): Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init() (:1103): GLib-CRITICAL **: Source ID 52 was not found when attempting to remove …

曝贾扬清第二跳,加入阿里!达摩院或将承载中国下一个AI愿景?

整理 | Jane出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;无论是国外还是国内&#xff0c;AI 界的人才动向一直是大家关注的焦点&#xff0c;从 2017 年3 月&#xff0c;吴恩达离职百度&#xff0c;开启创业之路&#xff1b;2018 年 9 月&#xf…

excel表格出问题了

我excel文件出问题&#xff0c;所有sheet表的N2表格内容自动替换成了几个固定的文字&#xff0c;出现两次了&#xff0c;第一次我手工改回来了&#xff0c;这有出现了第二次&#xff0c;我不知道是病毒原因&#xff0c;还是其他原因&#xff0c;应该不是我误操作&#xff0c;一…

阿里云凌晨大规模宕机,华北部分网站陷入瘫痪

整理 | 琥珀出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;今天凌晨&#xff0c;有不少网友反馈称阿里云疑似出现了宕机故障。据消息称&#xff0c;北京时间 2019 年 3 月 2 日 23:55 分左右开始&#xff0c;监控发现华北 2 地域部分 ECS 实例及部分 EMR、RDS on EC…

java8中的时间处理6 - 格式化

下面是格式化和解析的粒子&#xff1a; LocalDate date LocalDate.now();System.out.println(date);System.out.println(date.format(DateTimeFormatter.ofPattern("d::MMM::uuuu")));System.out.println(date.format(DateTimeFormatter.BASIC_ISO_DATE));LocalDate…

【Qt】ubuntu14.04.5 qt5.6中使用opencv3.4报错:Using GTK+ 2.x and GTK+ 3 in the same process is not supported

问题描述 ubuntu14.04.5 qt5.6中使用opencv3.4报错&#xff1a; Using GTK 2.x and GTK 3 in the same process is not supported 原因 Qt5.6使用的GTK2.x&#xff0c;opencv3.4安装时使用的GTK3。 解决方法 1、降低opencv版本&#xff0c;将opencv3.4更换为opencv2.4 这…

mysql 开启慢查询命令【转】

以MySQL 5.1.36为例&#xff1a;在slow_query_log &#xff08;注意log_slow_querys参数已经废弃&#xff09;值为ON的情况下&#xff08;默认为OFF&#xff09;&#xff0c;当一条SQL语句执行的时间超过了 long_query_time 预设的时间&#xff08;默认为10s&#xff0c;同时精…

不用开着电脑,如何将脚本代码放到服务器上?

作者 | sergiojune 转载自公众号日常学python&#xff08;ID:daily_learn&#xff09; 程序员转行学什么语言&#xff1f; https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw 上次弄了个机器人&#xff0c;反响挺不错的&#xff0c;我也挺满意的&#xff0c;因为这个我也初…

【Qt】ubuntu14.04+qt5.6+opencv2.4编程注意事项

cv::imshow();//不能在QT中使用该接口来创建窗口 否侧会报错&#xff1a; (:1103): Gtk-WARNING **: gtk_disable_setlocale() must be called before gtk_init() (:1103): GLib-CRITICAL **: Source ID 52 was not found when attempting to remove it 参见&#xff1a;ht…

Docker完整建站详介

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff0c;在主服务器上操作&#xff1a;安装完成docker;略 二&#xff0c;查看镜像 [rootlocalhost ~]#docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos/shop2.web.top latest 8fc9b211671a 14…

word2007启用宏

word选项-》信任中心->启用宏

用Python分析《工作细胞》的一万多条评论后,非漫迷也要入番了

作者 | 量化小白一枚&#xff0c;上财研究生在读&#xff0c;专注于数据分析与量化投资 来源 | 量化小白上分记&#xff08;公众号 id&#xff1a;quanthzp&#xff09; 责编 | Jane 人工智能的现状及今后发展趋势如何&#xff1f; https://edu.csdn.net/topic/ai30?utm_so…

【VritualBox】虚拟机VirtualBox中ubuntu下加载USB设备报错:busy with a previous request.Plaease try again later

1、问题描述 在VirtualBox中添加USB设备时&#xff0c;报错&#xff1a; USB device with ‘SanDisk Crurer Blade’UUID {*} is busy with a previous request.Plaease try again later 返回 代码: E_INVALIDARG(0x80070057) 组件: HostUSBDeviceWrap 界面&#xff1a; I…

谈谈动态规划的思想

动态规划&#xff08; dynamic programming &#xff09;算法是解决多阶段决策过程最优化问题的一种常用方法&#xff0c;难度比较大&#xff0c;技巧性也很强。利用动态规划算法&#xff0c;可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。动态规划算法的基本思想…

关于ARM启动的一篇文章

时间&#xff1a;2010-12-28 09:22:36 来源&#xff1a;老古开发网 作者&#xff1a;写的不错, 应该对大家有所帮助&#xff1a; 基于ARM的芯片多数为复杂的片上系统,这种复杂系统里的多数硬件模块都是可配置的,需要由软件来设置其需要的工作状态。因此在用户的应用程序之前,需…

【Qt】QImage加载bmp位图数据

QImage直接加载bmp文件 QImage image(image.bmp); QImage加载已经获取的bmp数据 unsigned char *imageData = NULL; int imageLen = (102*3+2)*126+54; imageData = (unsigned char*)malloc(imageLen); FILE*stream; if((stream=fopen("image.bmp","r")…

CVPR 2019审稿满分论文:中国博士提出融合CV与NLP的视觉语言导航新方法

整理 | 刘畅、Jane 责编 | Jane 出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09; 如何挑战百万年薪的人工智能&#xff01; https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw CVPR 2019 接收论文编号公布以来&#xff0c;AI科技大本营开始陆续…

有无目标的人生差10倍!赶紧和娃把新年计划做起来

春节连续几天朋友圈都是吃吃喝喝、陪父母陪娃、游山玩水&#xff0c;一派国泰民安的祥和状。昨晚一大学闺蜜突发感概&#xff0c;哎&#xff0c; 2018都快过1/6了&#xff0c;新年计划还没开始做&#xff0c;难道还是只能一声轻叹“今年一定是非常有意义的一年”吗&#xff1f;…

installshield 2009实现安装包自动编译

1.根据当前日期&#xff0c;在服务器上建立一个以日期命名的文件夹&#xff0c;删除本地现有的文件夹并下载最新的文件到本地call mydate %DATE%Rem Copy files from common folder on the designer to the common folder on my computerrd "F:\MySourceFile\MMS2.0\progr…

首发 | 旷视14篇CVPR 2019论文,都有哪些亮点?

译者 | Linstancy 责编 | Jane 出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09; 回顾 CVPR 2018 &#xff0c;旷视科技有 8 篇论文被收录&#xff0c;如高效的移动端卷积神经网络 ShuffleNet、语义分割的判别特征网络 DFN、优化解决人群密集遮挡问…

【Qt】Qt多屏编程,在指定显示屏上显示指定对话框

问题描述 主机连接两个显示器,一主一副,要求主显示器显示主界面,副显示器显示一对话窗口 解决方法 使用QDesktopWidget QDialog dlg = new QDialog(this); QDesktopWidget* desktop = QApplication::desktop(); this->setGeometry(desktop->screenGeometry(0)); …

Kruskal算法 - C语言详解

最小生成树 在含有n个顶点的连通图中选择n-1条边&#xff0c;构成一棵极小连通子图&#xff0c;并使该连通子图中n-1条边上权值之和达到最小&#xff0c;则称其为连通网的最小生成树。 例如&#xff0c;对于如上图G4所示的连通网可以有多棵权值总和不相同的生成树。 克鲁斯卡尔…