人脸识别 Lightened CNN

论文地址为:https://arxiv.org/abs/1511.02683

代码地址:

https://github.com/AlfredXiangWu/face_verification_experiment

正如前面《人脸验证:DeepID》博客所说,人脸验证任务中需要关心两个问题:一个是人脸特征提取,另一个就是如何判断是不是同一个人。特征提取的方法有LBP等传统方法,也有DeepID这样的深度学习方法。判断是不是同一个人的方法简单的有余弦相似度,复杂的有Joint Bayesian。本文主要的内容集中于人脸特征提取,就是使用Lighten CNN提取特征。

概述

为了得到更好的准确度,深度学习的方法都趋向更深的网络和多个模型ensemble,这样导致模型很大,计算时间长。本文提出一种轻型的CNN,在取得比较好的效果同时,网络结构简化,时间和空间都得到了优化,可以跑在嵌入式设备和移动设备上。

相关研究

用CNN进行人脸验证分为三种。一种是使用人脸分类的任务训练CNN提取特征,然后用分类器判断是不是同一个人。第二种是直接优化验证损失。第三种是将人脸识别和验证任务同时进行。本文框架是属于第一种。

网络结构

MFM:就是比较两个特征图各位置的大小,取对应位置大的值。 使用 caffe 的 Eltwise 层。MFM激活函数相比于Relu的优点,主要是它可以学习紧凑的特征而不是Relu那样稀疏高维的。

architecture


本文网络结构如上图所示,和DeepID一样,在训练时使用人脸分类的任务进行训练,最后得到256维的人脸特征。具体而言,网络结构如下,文章提出了两种结构,网络的主要结构是一样的,文章更多是集中在了第一种结构。

结构

网络最后一层是Sofmax层,实现分类的目的,fc1的结果就是人脸的特征。

MFM激活函数

本文使用了一种称为MFM的激活函数,这个结构也很简单。在输入的卷积层中,选择两层,取相同位置较大的值。

MFM

写成公式:


输入的卷积层为2n层,取第k层和第k+n层中较大的值作为输出,MFM输出就变成了n层。激活函数的梯度为

                                                                 

这样激活层有一半的梯度为0,MFM可以得到稀疏的梯度。MFM激活函数相比于ReLU函数,ReLU函数得到的特征是稀疏高维的,MFM可以得到紧实(compact)的特征,还能实现特征选择和降维的效果。

实验

本文使用的数据集是CASIA-WebFace,有10575个人的493456张照片。训练使用了Caffe。输入图片为144*144的黑白图片,随机裁剪成128*128的大小。全连接层Dropout设置为0.7。不同层SGD的参数也不一样,前面除了fc2层,momentum设为0.9,weight decay为5e-4,fc2层为了防止过拟合,weight decay为5e-3。learning rate从1e-3降到5e-5。最终在GTX980上训练了两周。

结果

获取特征后,作者简单使用cosine similarity进行人脸验证。在LFW上,model A正确率为97.77%,model B为98.13%。可以看出这个结果是可以接受的。文章的模型A为26M,在i7-4790上测试一张图片的时间为71ms,我在骁龙808上测试是0.8s。

table

总结

本文网络属于轻量级结构,模型相对较小,前向计算速度快,能够在嵌入式设备上使用。虽然精度没有达到最高,但是属于可以接受的范围。



猜你喜欢

转载自blog.csdn.net/u011808673/article/details/80556545