前面几篇博客介绍了目前基于深度学习比较常用的神经网络,并且在准确度方面都已经超越了人眼的效果。本篇博客就主要从表面介绍一下他们之间的区别。之所以是表面主要是因为目前只是从理论的层面来比较他们之间的差异。随着后续的使用可能再对差异进行补充。
一、模型:
DeepFace:在实现时需要使用3D对齐技术,然后将对齐的结果送入一个9层网络进行处理。整个训练过程前两个卷积层采用了共享卷积核,后三个卷积采用不共享卷积核,倒数第二层采用全连接层提取出对应的人脸特征。最后一层是一个softmax层分类。
DeepID:DeepID网络有一代和二代两种,两种网络的区别主要在于损失函数的定义。以DeepID二代为例,其网络结构是8层网络结构。4个卷积层,3个池化层,1个全连接层,全连接得到的是160特征向量。然后在根据160维向量svm或者softmax分类。在第一阶段处理完之后还根据生成的结果训练了用于鉴定图片是不是一类的贝叶斯分类器。并用该分类器对特征向量进行筛选并且可以泛化的。除此之外,该网络的最后一层分别和倒数前两层相连接(为了视野的互补)。
FaceNet:FaceNet是谷歌提出的网络结构,其网络结构灵活性较大可以使22层的Zelier&Fergus的网络,也可以使用现在在物体识别里面效果比较好的inception网络。其主要特点采用三元对之间的距离构建损失函数。
二、损失函数
DeepFace在训练过程中采用的是一般的交叉熵损失函数,并且采用一般的softmax对训练的数据进行分类,只不过从特征向量产生到用来分类的过程中使用了一些内积,卡方距离或者siamese的度量方式来计算相似度,用相似度来进行训练产生分类器。
DeepID2在训练过程中除了采用softmax训练构建分类器时产生的交叉熵函数之外,还添加了关于两张图片是不是一个人的损失函数,两个损失函数按权重组合,最终生成了对应的总损失函数用来进行训练。
FaceNet网络在使用的过程中通过三元对来构造损失函数,直接根据学习到的特征向量,计算在一类的图片距离和不在一类的图片距离,训练的结果是一类之间的距离尽量小,不一类之间的距离尽量大。
三、数据处理
DeepFace在使用前需要对数据进行3D对齐处理。
DeepID在训练的时候并没有进行对齐(但是对齐肯定会提高准确度)而是采用了通过对图片进行翻转,切片等处理方式得到许多不同的patch(400个),通过向前向后算法选出最适合的25个,并计算出对应的特征向量,生成的特征向量拼接成高维向量并采用PCA再次进行降维。同时在剩余的图片里面再选25个再进行计算,最终选出7组进行组合生成贝叶斯分类器。
FaceNet:处理时不要求对数据进行对齐(但是对齐后准确度会提高),直接输入需要识别的图片,并将图片放入网络进行计算。只不过在训练的过程中计算损失函数时需要对模型进行分批处理。即加入semi-hard约束条件选择最合适的边界向量。
三、模型参数(M表示million,B表示billion)
DeepFace网络的参数为:120M个参数
DeepID网络的参数为:未知
FaceNet网络的参数为:Zeiler&&Fergus网络140M个参数,1.6B次浮点计算(每张图片)
Inception网络为7.5M个参数,1.6B次浮点计算(NN2)
NNS1网络为26M个参数,220M次浮点计算(比标准的小)
NNS2网络为4.3M个参数,20M次浮点运算(更小)
NN4网络为285M次浮点运算(输入尺寸不一样96X96)
四、结果维度、准确度及速度:(基于对齐后人脸的准确度,按最好情况来算)
模型 维度 准确度 (LFW数据) 准确度(YTF视频) 速度
DeepFace 4096 97.35% 92.5% 0.18s+0.05s(对 齐)
DeepID 160 99.15% 无 35ms(GPU)
FaceNet(NN3) 512 99.65% 95.12% 无,但是NNS2 移动端是30ms
六、模型使用
DeepFace:模型在使用时需要先对齐,提取出对应的特征,但是存在一个弊端,模型训练特征的过程是使用分类器的结果构造损失函数的。也就是说当模型使用的时候特征和分类器是绑定的,而这种分类器分出来的类大小又和输入数据类的大小绑定。针对不同的输入数据需要不同的训练以保证准确度。
DeepID: 模型在使用过程中同样面临和上述模型一样的问题。但是该模型在最后训练了贝叶斯分类器,该分类器在一定程度上解决了泛化的问题。使用时通过贝叶斯分类器进行鉴定。
FaceNet:直接通过模型计算距离,并通过距离进行分类和预测。
共同学习,写下你的评论
评论加载中...
作者其他优质文章