1.DeepID1 (Deep Learning Face Representation from Predicting 10,000 Classes)

Step1:构建网络框架

DeepConvNet主要由卷积层、Pooling层和全连接层构成。其中,Deep hidden indentity features层与Pool3和Conv4部分连接。

Step2:特征提取

每张人脸图提取5个landmark(两个眼睛的中心,嘴角的两个角点,鼻尖):1.以部分landmarks弱对齐方式提取5个脸部patch;2.以每个landmark为中心,提取5个脸部patch。每张脸提取10个patch,选取3种不同分辨率,2种不同色彩(即彩色图和灰度图),一张人脸图可以提取60个pathches,因此需要训练60个CNN。每个CNN输出特征长度均为160,为了增加模型训练数据量,可以对60个patches进行镜像处理,最终得到的特征长度为160*60*2

Step3:神经网络人脸验证

作者采用两种不同的方法进行人脸验证,即基于联合贝叶斯的人脸验证方法和基于神经网络的人脸验证方法。

贝叶斯人脸验证方法:

将每一个人脸的160*2*60维特征用PCA降维到150维长度,然后用用两个长度为150维的特征计算其联合贝叶斯概率值,并与预定阈值比较判定是否是同一张人脸。

神经网络人脸验证方法

用于人脸验证的神经网络包括四层,即input layer, locally connected layer, fully connected layer和output layer。

input layer:利用Conv-Net可以从一幅人脸图像中提取出160*2*60维长度的一维特征(在这里60代表之前训练得到的60个CNN)。人脸验证的输入是两幅人脸图像,那么用60个CNN中的其中一个CNN对两幅人脸图像及其镜像图像进行特征提取,可以得到160*2(mirror)*2(people)=640维长度的一特征。相应地,60个CNN可以生成60组640维长度的一维特征,将这些特征首尾得到640*60维长度的以为特征。将640*60=38,400长度的一维特征作为人脸验证神经网络的输入。为了满足后续网络对输入层的需求,我们在输入端仍然采用60段独立的640维长度的特征(每段640维的特征是有两个人脸图像及其镜像图像通过一个CNN生成的)。

locally connected layer: 之前通过CNN特征提取得到的60组特征。事实上,每一组特征内部都是高度冗余的,因此在输入层后添加如下图所示的局部连接层作为第一个隐层,这样既可以保留局部特征学习特性又能实现特征降维。

fully connected layer:第二个隐层是全连接层,用于学习全局特征。

output layer:输出层是一个sigmoid函数,用于输出学习结果。

另外,需要注意的是训练网络中每一个隐层(即locally-connected layer和fully-cnnected layer)后都会跟relu层和dropout层,防止梯度弥散和过拟合,使loss收敛效果和网络泛化性能更好。

Step4:实验测试

作者比较了联合贝叶斯人脸验证和神经网络人脸验证方法的性能,实验结果如下:

1.通过联合贝叶斯人脸验证方法实验可知:采用60个Conv-net得到的特征比只使用1个Conv-net得到的特征效果好。(准确率从95.35%提升到96.05%)。即Convnet数量越多,准确率越高。

2.增加Soft-max layer的输出数量(即分类数,或识别的个体数)可以提升人脸验证的准确率。即分类的类别数越多,DeepConv-Net学到的DeepID特征(160维)越有效。此外,作者强调用于人脸验证的一定是160维长度的DeepID特征,而不是Softmax Layer的输出。如果用SoftmaxLayer输出的结果(例如用4348个不同人的数据训练DeepID,Softmax输出是4348维)进行人脸验证特征,采用联合贝叶斯人脸验证方法得到的准确率约为66%,而神经网络人脸验证方法则完全失效。

3.增加patches数(即Convnet数目,两者是相等的)会使DeepID特征维度升高,这与我们在前面第1条结果中得到的结论是一致的。此外,将Convnet数目从1提升到60时,分别用联合贝叶斯和神经网络两种方式进行人脸验证。实验结果表明:虽然神经网络人脸验证方法在Convnet数从1提升到60的过程中准确率相对提升幅度较联合贝叶斯方法略高,但是当Convnet数目是60个时,联合贝叶斯方法绝对准确率更高。

4.训练数据越多,Convnet数目越多(即一幅人脸图像提取的Patch数目),人脸验证准确率越高。

2. DeepID2 (Deep Learning Face Representation by Joint Identification-Verification)

继之前的DeepID1实现了97.45%的人脸验证准确率后,作者进一步发扬光大设计了DeepID2,将人脸验证准确率提高至99.15%。我们知道,提高识别网络性能本质上就是要降低类内差异,提高类间差异。然而,传统的DeepID1特征更多将特征学习过程集中在如何提高类间差异,而没有考虑到降低类内差异。特别是对于一些训练时没有出现的类别,对于同一个人的两幅不同图像,因为得到的DeepID1特征不同,很可能在人脸验证时错误识别为不同类别;又或者是,不同人的DeepID1特征验证位同一个人。因此,作者在设计DeepID2时,通过修改Loss函数的组成形式,在提高类间差距的基础上进一步降低类内差距,从而对训练过程中未出现的新类别在人脸验证阶段发挥积极作用。下面将具体介绍DeepID2:

Step1:DeepID2特征提取模型

DeepID2网络模型与DeepID1网络模型基本类似,DeepID2 layer的输入是有Pool3和Conv4共同组成的。这里需要注意DeepID2与DeepID1的一个重要区别是Loss函数的形式。DeepID1的Loss函数即SoftmaxLoss,DeepID2的Loss包括两个部分:SoftmaxLoss和L2/L1 Loss,即文中提到的识别Loss和验证Loss,具体形式如下所示:

第一个公式是识别Loss,其主要目的是增加类间差距,从而区分不同人脸的图像。第二个公式是验证Loss,其主要目的是增加类间差距、降低类内差距。可以看出Yij=1时表示i和j属于同一类,这时fi和fj越接近(类内差距越小)则loss越低;Yij=-1时表示i和j属于不同类,这是如果fi和fj的差值的平方大于某一个阈值m,则loss=0,因此可知对于不同类别类间差距越大,loss越小。作者认为验证loss可以从L1/L2/Cos Loss中任选一种形式,另外作者用权重lamda表示识别Loss和验证Loss的相对权重。

Step2:人脸验证

在进行人脸验证时,作者采用SDM算法从一幅人脸图像中检测到的21个脸部特征点,然后通过相似性变换进行全局人脸对齐。然后根据人脸中landmark的位置、图像颜色、图像尺度及水平镜像方式生成400个脸部patches.考虑到水平镜像的因素,对400个脸部patches可以训练200个CNNs进行识别。200个CNNs处理一幅人脸图像可以生成400组长度分别为160维的特征,即特征总长为400*160=64,000维。当然,这样的特征冗余度很高,因此作者采用前向-反向贪婪算法选取出效果最好的25组特征,这样可以生成25*160=4000维的特征。然后用PCA将4000维的特征降至180维。用联合贝叶斯人脸验证方法验证DeepID2特征。

实验结果:

1.作者验证了lamda(即验证loss的权值)对人脸验证准确率的影响。当lamda=0(相当于不用验证loss)或lamda=+无穷大(相当于不用识别loss),人脸验证效果都不如lamda在俩者之间的取值。作者采用不同的lamda取值测试L2人脸验证模型和联合贝叶斯人脸验证模型,从实验结果可以看出lamda从0增加到+无穷大时,两种人脸验证模型的准确率都是先升高后降低。

2.当用于训练DeepID2的人脸类别越丰富(即人脸类别数),通过CNN学习的特征在人脸识别阶段会越有效,该结论与DeepID1是类似的。

3.作者测试了不同形式的验证loss函数(L2+ loss, L2- loss, 余弦loss)对于人脸验证结果的影响,此处不作介绍。

4.作者选取了七组不重复的特CNN特征组合,用联合贝叶斯方法处理后,进一步采用svm对结果融合,得到最终结果99.15%。(OMG,这种处理方法.......)

总之,作者通过修改CNN网络模型(卷积层的kernel数)和Loss(最重要的修改)的方式训练得到新的DeepID2特征,通过进化版本的特征组合方式,实现了99.15%的人脸验证准确率。

DeepID1,DeepID2的更多相关文章

  1. 基于Caffe的DeepID2实现(下)

    小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...

  2. 基于Caffe的DeepID2实现(中)

    小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...

  3. 基于Caffe的DeepID2实现(上)

    小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...

  4. (转载)经典计算机视觉论文笔记——DeepFace\DeepID\DeepID2\DeepID3\FaceNet\VGGFace汇总

    1. DeepFace:Closing the Gap to Human-Level Performance in Face Verification 最早将深度学习用于人脸验证的开创性工作.Face ...

  5. 基于Caffe的Large Margin Softmax Loss的实现(上)

    小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...

  6. 【《zw版·Halcon与delphi系列原创教程》 zw_halcon人脸识别

    [<zw版·Halcon与delphi系列原创教程>zw_halcon人脸识别 经常有用户问,halcon人脸识别方面的问题. 可能是cv在人脸识别.车牌识别方面的投入太多了. 其实,人脸 ...

  7. [OpenCV] Face Detection

    即将进入涉及大量数学知识的阶段,先读下“别人家”的博文放松一下. 读罢该文,基本能了解面部识别领域的整体状况. 后生可畏. 结尾的Google Facenet中的2亿数据集,仿佛隐约听到:“你们都玩儿 ...

  8. paper 53 :深度学习(转载)

    转载来源:http://blog.csdn.net/fengbingchun/article/details/50087005 这篇文章主要是为了对深度学习(DeepLearning)有个初步了解,算 ...

  9. paper 50 :人脸识别简史与近期进展

    自动人脸识别的经典流程分为三个步骤:人脸检测.面部特征点定位(又称Face Alignment人脸对齐).特征提取与分类器设计.一般而言,狭义的人脸识别指的是"特征提取+分类器"两 ...

随机推荐

  1. Shallwe学长的模拟赛

    NOIP Simulated Test 这个名字一听就很高端. T1:sGCD:http://uoj.ac/problem/48 题意概述:给定一个长度为$n$的序列,求$sgcd(a_1,a_i)$ ...

  2. OpenCV——开操作、闭操作、形态学梯度、顶帽、黑帽

    ---恢复内容开始--- ---恢复内容结束---

  3. linux-如何快速替换IP

    导读 在Linux在做高可用的时候,经常会使用到虚拟IP.在windows上一个网卡可以配置两个IP,在Linux直接使用ip命令就可以添加了. 添加 ip address add 192.168.1 ...

  4. Python2.7-stat

    stat模块,用于解释 os.stat(),os.lstat(),os.fstat() 返回的结果,定义了许多表示文件或路径的各个状态的常数和测试各个状态的函数具体参考 官方文档 和 http://w ...

  5. 动态代理实现设置tomcat请求编码

    1)htmlcode: <html> <head> <title>$Title$</title> </head> <body> ...

  6. Android 将拼接好并加上边框的图片保存到内存卡中

    通过前两篇文章,问们学会了怎样拼接图片.给拼接好的图片加上边框样式,但这还不够,忙活了大半天 终于拼接好并给图片美化了,但是程序一旦推出,之前做的工作都白费了.这时我们会想,能不能把拼接好的图片保存起 ...

  7. 快速在Ubuntu安装PHP网站

    快速安装使用的是tasksel,tasksel是Debian / Ubuntu的工具,安装多个相关软件包作为一个协调的“任务”到你的系统.这个lamp-server^跟taskel这个程序有关.下面是 ...

  8. AS3.0 自定义右键菜单类

    AS3.0 自定义右键菜单类: /** * 自定义右键菜单类 * 自定义菜单项不得超过15个,每个标题必须至少包含一个可见字符. * 标题字符不能超过100个,并且开头的空白字符会被忽略. * 与任何 ...

  9. 20155223 Exp7 网络欺诈防范

    20155223 Exp7 网络欺诈防范 基础问题回答 通常在什么场景下容易受到DNS spoof攻击? 无设防或防护力特别弟弟低的公共局域网,或者是在同一个局域网下. 在日常生活工作中如何防范以上两 ...

  10. 20155320 EXP8 Web基础

    20155320 EXP8 Web基础 [基础问题回答] 什么是表单? 表单:可以收集用户的信息和反馈意见,是网站管理者与浏览者之间沟通的桥梁. 表单由文本域.复选框.单选框.菜单.文件地址域.按钮等 ...