论文提要“DeepFace: Closing the Gap to Human-Level Performance in Face Verification”
2015-09-22 17:01
771 查看
人脸识别步骤:检测,矫正,表示,识别。
论文使用了3D人脸模型进行矫正,9层的深度神经网络学习特征,有几层局部连接层。
人脸矫正方法:(1)3D人脸模型,(2)搜索基准点,(3)像素级相似矩阵变化。论文根据基准点对人脸进行3D建模,将裁减的人脸转化为3D模式。每次迭代,使用支持向量回归(SVR)从图像描述子LBP预测点结构。
2D矫正,图1(a)所示的六个基准点,用来对图像进行尺度变换,旋转,平移得到六个锚点位置,通过拟合Ti2d:=(si,Ri,ti)T^i_{2d}:=(s_i,R_i,t_i),锚点位置xjanchor:=si[Ri|ti]∗xjsourcex_{anchor}^j:=s_i[R_i|t_i]*x_{source}^j,最后组合成2D相似变换:T2d:=T12d∗...∗Tk2dT_{2d}:=T_{2d}^1*...*T_{2d}^k。累积变换生成2D的矫正裁切,1(b)所示。
3D矫正,2D矫正对out-of-plane的补偿不够,对非限定条件下的人脸识别不力。作者使用了广义3D模型并注册了一个3D仿射相机,将2D裁切变化为3D形式。图1(g)所示。通过在2d裁切中定位67个基准点x2dx_{2d}实现,3D广义模型通过对USF Human-ID数据库进行三维扫描的平均实现,通过后处理得到矫正后的定点vi=(xi,yi,zi)ni=1v_i=(x_i,y_i,z_i)^{n}_{i=1},将67个点放置在3D形状上,得到67个点与3D的关联方法。仿射3D-2D摄像机P使用最小平方方法拟合,x2d=X3dP→x_{2d}=X_{3d}\overrightarrow P,P最小化loss,loss(P)=rT∑−1rloss(P)=r^T\sum^{-1}r,其中r=x2d−X3dP→r=x_{2d}-X_{3d}\overrightarrow P,X3dX_{3d}是一个(67∗2)×8(67*2)\times8的矩阵。拟合的摄像机P由8个未知的P→\overrightarrow P组成的向量表示。
正脸化,拟合的摄像机P只是一个近似,将r加入到基准点中得到X^3d\hat X_{3d},正脸化通过2d到3d的变换实现,由67个基准点得到的Delaunay三角化指导。
表示
DNN结构及训练,结构如图2所示。C1层的输入是3D矫正后的3通道RGB图像,大小为152*152,32个滤波器大小为11*11*3,32个特征图输入到max-pooling(M2)层,3*3邻域的最大值,步长为2。之后输入到C3层,16*9*9。这三层的目的是提取低层特征,如边缘和纹理,最大池化层使得卷积层的输出对局部变化更鲁棒。网络pooling层较多会损失信息,因此值使用了一个pooling层。这三层只是将输入扩展到一些简单的局部特征。
L4,L5,L6层是局部连接的,类似于对卷积层使用滤波器组,不同的局部学习不同的滤波器。校正后图像的不同的区域具有不同的局部统计特征,因此卷积层不能满足。
F7,F8层是全连接层,这些层可以获得不同区域之间的联系,全连接层输出到K类的softmax层,产生类标签的分布,k-th类的输出为pk=exp(ok)/∑hexp(oh)p_k=exp(o_k)/\sum_hexp(o_h)
训练最小化cross-entropy 损失,L=−logpkL=-logp_k,最小化过程通过计算L对参数的梯度实现,使用SGD更新参数。梯度使用bp error实现。特征比较稀疏,75%是0,使用dropout解决。
归一化
特征归一化到0,1之间,之后使用L2L_2归一化,f(I):=G¯¯¯(I)i/||G(I)i||2f(I):=\overline G(I)_i/||G(I)_i||_2,其中G¯¯¯(I)i=G(I)i/max(Gi,ϵ)\overline G(I)_i=G(I)_i/max(G_i,\epsilon)
论文使用了3D人脸模型进行矫正,9层的深度神经网络学习特征,有几层局部连接层。
人脸矫正方法:(1)3D人脸模型,(2)搜索基准点,(3)像素级相似矩阵变化。论文根据基准点对人脸进行3D建模,将裁减的人脸转化为3D模式。每次迭代,使用支持向量回归(SVR)从图像描述子LBP预测点结构。
2D矫正,图1(a)所示的六个基准点,用来对图像进行尺度变换,旋转,平移得到六个锚点位置,通过拟合Ti2d:=(si,Ri,ti)T^i_{2d}:=(s_i,R_i,t_i),锚点位置xjanchor:=si[Ri|ti]∗xjsourcex_{anchor}^j:=s_i[R_i|t_i]*x_{source}^j,最后组合成2D相似变换:T2d:=T12d∗...∗Tk2dT_{2d}:=T_{2d}^1*...*T_{2d}^k。累积变换生成2D的矫正裁切,1(b)所示。
3D矫正,2D矫正对out-of-plane的补偿不够,对非限定条件下的人脸识别不力。作者使用了广义3D模型并注册了一个3D仿射相机,将2D裁切变化为3D形式。图1(g)所示。通过在2d裁切中定位67个基准点x2dx_{2d}实现,3D广义模型通过对USF Human-ID数据库进行三维扫描的平均实现,通过后处理得到矫正后的定点vi=(xi,yi,zi)ni=1v_i=(x_i,y_i,z_i)^{n}_{i=1},将67个点放置在3D形状上,得到67个点与3D的关联方法。仿射3D-2D摄像机P使用最小平方方法拟合,x2d=X3dP→x_{2d}=X_{3d}\overrightarrow P,P最小化loss,loss(P)=rT∑−1rloss(P)=r^T\sum^{-1}r,其中r=x2d−X3dP→r=x_{2d}-X_{3d}\overrightarrow P,X3dX_{3d}是一个(67∗2)×8(67*2)\times8的矩阵。拟合的摄像机P由8个未知的P→\overrightarrow P组成的向量表示。
正脸化,拟合的摄像机P只是一个近似,将r加入到基准点中得到X^3d\hat X_{3d},正脸化通过2d到3d的变换实现,由67个基准点得到的Delaunay三角化指导。
表示
DNN结构及训练,结构如图2所示。C1层的输入是3D矫正后的3通道RGB图像,大小为152*152,32个滤波器大小为11*11*3,32个特征图输入到max-pooling(M2)层,3*3邻域的最大值,步长为2。之后输入到C3层,16*9*9。这三层的目的是提取低层特征,如边缘和纹理,最大池化层使得卷积层的输出对局部变化更鲁棒。网络pooling层较多会损失信息,因此值使用了一个pooling层。这三层只是将输入扩展到一些简单的局部特征。
L4,L5,L6层是局部连接的,类似于对卷积层使用滤波器组,不同的局部学习不同的滤波器。校正后图像的不同的区域具有不同的局部统计特征,因此卷积层不能满足。
F7,F8层是全连接层,这些层可以获得不同区域之间的联系,全连接层输出到K类的softmax层,产生类标签的分布,k-th类的输出为pk=exp(ok)/∑hexp(oh)p_k=exp(o_k)/\sum_hexp(o_h)
训练最小化cross-entropy 损失,L=−logpkL=-logp_k,最小化过程通过计算L对参数的梯度实现,使用SGD更新参数。梯度使用bp error实现。特征比较稀疏,75%是0,使用dropout解决。
归一化
特征归一化到0,1之间,之后使用L2L_2归一化,f(I):=G¯¯¯(I)i/||G(I)i||2f(I):=\overline G(I)_i/||G(I)_i||_2,其中G¯¯¯(I)i=G(I)i/max(Gi,ϵ)\overline G(I)_i=G(I)_i/max(G_i,\epsilon)
相关文章推荐
- SurfaceView的使用
- iOS音频、视频播放
- 字符串的截取和打印CGRect
- ZSDR101-跑成品MRP
- C语言:n=(i=2,++i)什么意思?结果是什么?
- 自定义view引起的错误:No resource identifier found for attribute *in package *
- maven中依赖包的问题
- centos7.0体验与之前版本的不同
- ClassLoader加载指定的类需注意六个细节或报ClassNotFundEception异常总结
- Ubuntu 14.04 安装jdk1.6
- Android 一个Activity里面2个ListView垂直排列,动态设置ListView高度
- 解决Admob Banner首次展示不显示的问题
- ZSDR100 跑原材料MRP
- short,int,float,long,double
- Android基础:数据存储(一):文件存储
- bash: ./arm-linux-gcc : No such file or directory
- Uri详解之二——通过自定义Uri外部启动APP与Notification启动
- java SE复习笔记40
- 【Linux】VMware中Redhat9下安装VMTools
- ZSDRM001-发货清单