DeepID1,DeepID2
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的更多相关文章
- 基于Caffe的DeepID2实现(下)
小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...
- 基于Caffe的DeepID2实现(中)
小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...
- 基于Caffe的DeepID2实现(上)
小喵的唠叨话:小喵最近在做人脸识别的工作,打算将汤晓鸥前辈的DeepID,DeepID2等算法进行实验和复现.DeepID的方法最简单,而DeepID2的实现却略微复杂,并且互联网上也没有比较好的资源 ...
- (转载)经典计算机视觉论文笔记——DeepFace\DeepID\DeepID2\DeepID3\FaceNet\VGGFace汇总
1. DeepFace:Closing the Gap to Human-Level Performance in Face Verification 最早将深度学习用于人脸验证的开创性工作.Face ...
- 基于Caffe的Large Margin Softmax Loss的实现(上)
小喵的唠叨话:在写完上一次的博客之后,已经过去了2个月的时间,小喵在此期间,做了大量的实验工作,最终在使用的DeepID2的方法之后,取得了很不错的结果.这次呢,主要讲述一个比较新的论文中的方法,L- ...
- 【《zw版·Halcon与delphi系列原创教程》 zw_halcon人脸识别
[<zw版·Halcon与delphi系列原创教程>zw_halcon人脸识别 经常有用户问,halcon人脸识别方面的问题. 可能是cv在人脸识别.车牌识别方面的投入太多了. 其实,人脸 ...
- [OpenCV] Face Detection
即将进入涉及大量数学知识的阶段,先读下“别人家”的博文放松一下. 读罢该文,基本能了解面部识别领域的整体状况. 后生可畏. 结尾的Google Facenet中的2亿数据集,仿佛隐约听到:“你们都玩儿 ...
- paper 53 :深度学习(转载)
转载来源:http://blog.csdn.net/fengbingchun/article/details/50087005 这篇文章主要是为了对深度学习(DeepLearning)有个初步了解,算 ...
- paper 50 :人脸识别简史与近期进展
自动人脸识别的经典流程分为三个步骤:人脸检测.面部特征点定位(又称Face Alignment人脸对齐).特征提取与分类器设计.一般而言,狭义的人脸识别指的是"特征提取+分类器"两 ...
随机推荐
- pstools工具使用
该工具的目的:批量远程操作windows服务器, 个人实验的方法步骤: 1.在被远程的电脑上开通139,445端口 2.建立ipc$链接, 格式:Net use \\目标ip\ipc$ 密码 /use ...
- Odoo Model内容详解
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9390688.html 一:Odoo模型属性 1:_name 模型的唯一标识:如果没有继承其他模型 ...
- vue之常用指令
事件缩写 v-on:click= 简写方式 @click= 事件对象$event <!DOCTYPE html> <html lang="en"> < ...
- python 通过shutil实现文件后缀名判断及复制
In [18]: for file in os.listdir('.'): ...: if os.path.splitext(file)[1] == '.html': ...: print(file) ...
- testNG参数化
听说testNG比junit更好用,记录下 环境:springboot2.0+testNG6.8+maven+myeclipse 一 安装 (1)m'yeclipse安装testNg包,下载testN ...
- C 语言的关键字static 和C++ 的关键字static 有什么区别
C 中static 用来修饰局部静态变量和外部静态变量.函数. C++中除了上述功能外,还用来定义类的成员变量和函数.即静态成员和静态成员函数. 注意:编程时 static的记忆性,和全局性的特点可以 ...
- Sign in with the app-specific password you generated. If you forgot the app-specific password or need to create a new one, go to appleid.apple.com
iOS打包报错信息如下:Sign in with the app-specific password you generated. If you forgot the app-specific pas ...
- 利用Cydia Substrate进行Android HOOK
Cydia Substrate是一个代码修改平台.它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的.而Xposed只支持HOOK app_process中的java ...
- Javascript 地图库收集
ArcGis leafletjs openlayers jvectormap
- LoRa---射频信号接收框架简图介绍
LoRa整体框架图如下: 内容下次再填! 内容补上: 射频信号的接收流程(小博并非专业,错了emmmmm轻喷):射频--->中频--->基带,下面按照图中标的序号开始介绍: 1.天线接受射 ...