通过部分感知深度卷积网络进行人脸特征点定位
人脸特征点定位是一个非常具有挑战性的研究课题。由于纹理和形状的不同,不同人脸特征点的定位精度差异很大。但大多数现有的方法不能考虑特征点的部分位置。
为了解决这个问题,文章提出一个新颖的用深度卷积神经网络(CNN)端到端的回归框架。深度结构首先通过所有特征点编码图像到特征图上;然后这些特征被送到两个单独子网络模型中去回归轮廓特征点和内部特征点。最后在300-W基准数据集上评估,并证明所提出的深度框架实现了最先进的结果。
主要一些贡献:
提出一个新颖的端到端回归CNN模型用于人脸特征点定位,其通过组合一个轮廓子网络和一个内部子网络到一个统一的架构;
本文证明了所有的特征点底层的卷积特征共享,在最后层单独使用可以提高精确度和鲁棒性;
本文还演示了子网络的学习,并可视化了中间层的激活状态;
最后本文在300-W基准数据集上展现了提出的网络能实现先进的结果。
图1PA-CNN网络结构
所提出的Part-Aware CNN(PA-CNN)框架包含了一个轮廓子网络和一个内部子网络,为了处理不同人脸部分的特征点。如图1所示,由于纹理与形状的差异,将68个特征点分为两类,内部特征点有51个,指的是眉毛,眼镜,鼻子和嘴;轮廓特征点是另外的17个在脸的轮廓上。
在设计底部共享卷积层有两个问题:
第一个,所有的特征点可以结合一般特征,通过共享输入图像和一些卷积层,可以用来定位每一个特征点,与此同时,所有的特征点被隐式编码为几何约束;
第二个,共享底层特征使本文模型时间更有效。在网络的早期阶段,每层用来提取底层特征,这些特征被共享。如果使用单独模型,一个预测17个轮廓特征点和另一个预测51个内部特征点,类似的网络模型需要使用两次输入图像,非常耗时。
优化
在图像I中,令xi,yi∈R为第i个脸部特征点的x,y坐标,则得到向量[x1,y1,...,xN,yN]表示图像I中所有N个两部特征点的坐标,用P表示估计的特征点,G表示真实值。本文定义了如下的误差:E=P-G^2。预测的特征点定义为:
P=f(I;w)
其中,f表示非线性函数,I表示输入图像,w表示网络权值。P可以通过网络的前向传播计算可得,最后在训练批次中,网络误差可以表示为:
N表示批次大小,本文在训练阶段设置为70。目标是为了学习优化参数w去最小化损失函数E。最后得:
其中Econ是轮廓子网络的损失函数,Einn是内部子网络的损失函数,λ是权重参数去平衡轮廓子网络和内部子网络的损失,本实验设置为2。
实验
数据集是300-W,其有300张脸,它是基于现有数据集(LEPW,AFW,Helen和IBUG)基础上制作的,每张图像都有68个特征点。
实验还进行了数据增广,采用两种不同形式的数据增强,以扩大数据集,最后得到39561张图像。
图像旋转:随机旋转图像在(-5°,5°),(-10°,10°),(-15°,15°)范围内;
随机翻转:随机翻转图像在(-0.05°,0.05°)范围内。
评估
使用了平均误差(mean error),就是预测特征点与真实值的距离,通过瞳孔之间的间距归一化,得:
其中N表示所有的测试图像,M表示为特征点数量,li,ri表示左眼和右眼的位置。
实施细节
本文网络框架基于VGG-S,输入的图像大小为 ,最小批次大小为70,权重衰减为0.0001,训练学习率为0.0001,模型通过随机梯度下降训练,训练直至收敛。
图2另外两个模型。左:单独CNN模型;右:Two-CNN模型。
表1不同网络实验结果
图3不同模型的误差曲线
表2 不同网络耗时(Tesla K20 GPU)
图4子网络的激活可视化图
表3不同网络耗时(Tesla K20 GPU)
图5测试图像的特征点检测
总结
这次主要提出一个新颖的端到端回归框架,用卷积神经网络去解决困难的脸部特征点。深度结构首先通过所有的特征点编码图像到特征图上;然后这些特征被送到两个单独子网络模型中去回归轮廓特征点和内部特征点。实验结果在具有挑战性的300-W数据集中实现,并证明提出的框架可以实现最先进的结果,并且对较大的头部姿势和遮挡鲁棒。在未来,可以通过PA-CNN提取更多的人脸部件。
参考文献
【2】Burgos-Artizzu, X.P., Perona, P., Doll´ar, P.: Robust face landmark estimation
under occlusion. In: 2013 IEEE International Conference on Computer Vision
(ICCV), pp. 1513–1520. IEEE (2013)
【3】Cao, X., Wei, Y., Wen, F., Sun, J.: Face alignment by explicit shape regression.
Int. J. Comput. Vis.107(2), 177–190 (2014)
【8】Kazemi, V., Sullivan, J.: One millisecond face alignment with an ensemble of regression trees. In: 2014 IEEE Conference on Computer Vision and Pattern Recognition(CVPR), pp. 1867–1874. IEEE (2014)
【11】Ren, S., Cao, X., Wei, Y., Sun, J.: Face alignment at 3000 fps via regressing local binary features. In: 2014 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 1685–1692. IEEE (2014)
【15】Xiong, X., De la Torre, F.: Supervised descent method and its applications to face alignment. In: 2013 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 532–539. IEEE (2013)
【17】Zhang, J., Shan, S., Kan, M., Chen, X.: Coarse-to-fine auto-encoder networks (CFAN) for real-time face alignment. In: Fleet, D., Pajdla, T., Schiele, B.,Tuytelaars, T. (eds.) ECCV 2014. LNCS, vol. 8693, pp. 1–16. Springer, Heidelberg (2014). doi:10.1007/978-3-319-10605-2 1
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux系列之学会使用Top命令进行系统监控
- 一简单线程同步笔试题分享,欢迎纠错分享更多思路
- 卷积神经网络之-NiN 网络(Network In Network)
- 【注意力机制】空间注意力机制之Spatial Transformer Network
- 【小技巧】用Python给你的视频添加字幕
- 震惊!我三步就搞定了 Tomcat 源码环境搭建!
- 【小技巧】深度学习中的那些效率提升利器(附资源)
- 多个线程为了同个资源打起架来了,操作系统是如何让他们安分的?
- 学习链表,这些题你值得一刷!
- Gophish钓鱼测试
- 【位运算】只出现一次的数字 II,数电的知识终于用上了!
- Swaks伪造邮件发件人绕过SPF
- 某次网站的渗透测试
- phpMyAdmin 渗透利用总结
- 【C++简明教程】C++基本语法