facenet实现人脸识别_人脸识别之新进展人脸特征&大规模检索

人脸识别通过深度学习方法如Facenet、DeepID和三元损失函数等取得显著进步。文章探讨了人脸识别流程、模式、数据集,并介绍了基于边界损失函数的最新进展,以及大规模人脸检索中的暴力检索和近似检索技术。
摘要由CSDN通过智能技术生成

aa25d28386362f05d4a2748b5642a792.png

cdc05cf06d1636b866fa48ad63a746e5.png

人脸识别是一个历史悠久的模式识别问题,大量研究人员付出了巨大努力,提出了各种方法来不断推动其前进。

本文提纲挈领的介绍了一些经典和最近的方法,希望起到抛砖引玉的作用。未来人脸识别在准确度速度提升、模型轻量化、大规模数据集等方面仍需要更深入的研究。

da693255720c242cf8de23e7199f3912.gif

0febe8b704000d8d620e07178be3869b.png adae48161112449b98cfc5d98935d601.png

  问题及背景 

01

人脸识别流程

人脸识别主要是指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。从算法角度讲目前主流方法包括:人脸检测,特征点检测,人脸对齐,特征提取,特征检索/比对等步骤。

人脸检测是指找出各人脸在图像中的空间位置,然后需要对检测出的人脸进行对齐等归一化的预处理操作。之后需要提取人脸的特征,来进行人脸比对和海量人脸搜索。

人脸特征的鲁棒性对结果的准确率有很大的影响,学术界和工业界在这个领域已经进行了多年的研究,本文主要从特征提取这个核心任务方面介绍人脸识别的最新进展

e517ef6e440607df63dc91910182b68a.gif

02

人脸识别的模式及评价方法

人脸识别主要分为1:1验证 (face verification)模式和1:N检索 (face identification)模式。

1:1验证模式是给定2张人脸图片,算法进行比较并判断是否为同一人脸的过程,其主要应用有“刷脸”登录、支付等。

1e330d36008b2bc6361f7d288275fbc8.png

图1 人脸1:1验证

1:N检索则是在海量的人像数据库中找出当前用户的人脸数据并进行匹配,主要应用场景有安防等。

da268502d9d93e9d6e7a15f90c76cd94.png

图2人脸1:N检索

在1:1场景中误接受即将两个不同的人判断为同一人是一种严重的错误,所以需要将误接受率FAR(False Accept Rate)控制在一定程度如十万分之一或者百万分之一以下。

人脸识别受年龄、化妆、角度、光照、姿势、模糊、非同源照片等各种内部外部因素的影响,以及如何在识别亿级人脸,都是很有挑战性的工作,所以如何学习泛化特征,如何提高准确率,也是各科研人员几十年来不断追求的目标

075b2470de4659566b02bb1fa77aa54e.gif

03

人脸识别的数据

得益于学术研究的开放性,目前有很多人脸识别的数据集,如LFW(Labeled Face in the Wild)等,而且近几年规模也是逐渐扩大,比如微软亚洲研究院收集整理的MS-Celeb-1M数据集有10万个名人的人脸,每人有约100张照片。一些常用的数据集及其规模如下图所示:

24e1ea9474fbf8545fe02085756a1ab5.png图3人脸公开数据集

e819d771688f67bd9b50c20db5a0a57f.png

 人脸识别方法

01

传统方法

经典的人脸识别方法主要有基于Eigenface或者LBP(Local Binary Pattern)等人工特征加分类器的方法。基于人工的特征对识别有所帮助,但是在实际应用中效果仍然有待提升。进入深度学习时代之后,人脸识别也有了飞速的发展。

02

基于深度学习的方法

3fe86432f546506fa7b28cc56fdead50.gif

1.DeepID系列方法

在DeepID[1,2]中两张图片分别通过深度卷积神经网络学习特征向量,然后拼接的特征向量通过一个分类器来判断是否属于同一人脸。其流程如图4所示:

3e763a3419b463df1c25b8d8286ed4aa.png

图4 DeepID人脸识别算法流程

该方法主要有两个损失函数:一个是分类损失,一个是验证损失。

分类损失是人脸属于某个分类的交叉熵损失:

4dc8890ffd94a3a8e5679a2267c92f31.png

*pi 为真实标签,c6b094431462579802beedb9acb9bd0c.png为网络分类的后验概率。77594f46d8b6840a6612cdd1263b2c19.png

验证损失是特征向量A跟特征向量B之间距离的损失,其表示形式为:

08a9ba6c16308dd90c2bbf7a556a05ca.png

*其中fi为人脸特征向量,m为一个可调的距离参数,控制向量之间距离。

在实际训练中,DeepID也用了比前人工作大很多的数据集,CelebFaces+有10177人,202599张图片。

8700人训练DeepID,1477人训练Joint Bayesian分类器。同时也使用了多尺度多区块的方法,将人脸分成不同大小的区域训练不同的网络,多个网络的融合取得了当时最好的效果。

8fc3fdab72212b44b0a3cc53cbeb3a07.png

图5多区域多尺度人脸

2. 三元损失函数

在这之后谷歌公司的研究人员将验证损失进行了扩展,在FaceNet[3]的论文里面提出了三元损失函数(Triplet Loss),其数学形式如下:

d6cac7ab2d6c2c9af53ccdff8c372610.png

三元损失函数主要通过选取一个参考样本2bf551d3f3534a488d2faaabbace8d7a.png,以及跟参考样本同一分类的正样本342a9bcc161f67bb6440df470a221ba2.png,不同分类的负样本017d4161f85bb3ed3691fc635786116e.png这样一个三元组来求得损失。

以此来确保参考样本和正样本之间的距离加上一个边距3e5a100ee21748a91f0838e628808cb2.png之后仍要小于参考样本和负样本之间的距离。

其示意图如图6所示:

9fed32ffad9a5b10de1fd90d977d8f5d.png

图6三元组之间的距离

3. 基于边界损失函数

近年来基于边界损失函数的方法取得了很大的进展,比如将Megaface赛事的准确率一度提高到了98%。基于边界的损失函数是对通常的交叉熵损失函数的改进,通常的交叉熵损失函数为:

2e367fa227323182b1f546bcd41dd398.png

此时类与类之间的决策平面由两个参数W和b决定,如论文[4]所示:如果我们增加约束,使得42429fb4853b6401f60388d8fe00f1ec.png ,可得修改过的损失函数为:

bdf071f78295c351bdbe525f781488fa.png

如果我们在4d06a5fc8e09821ebca6c66f2e469d77.png上面乘以一个大于1的系数m,变成:

352494783897300ba01b4a9144262b5f.png

如图7(b)所示不仅可以放大类间距离,还使得类内的距离变小。通常的交叉熵损失函数只解决了分类问题,但人脸识别不是一个单纯的分类,而是需要学习人脸特征使得--类间距离越大类内距离越小越好

edba6fdccbd7ab601ea67993838c70cd.gif

经过修改的损失函数直接优化特征的距离决策平面,使得效果超越了普通的方法。Cosface、Arcface[5] 也在论文里面对损失函数进行了改进,使得识别效果各有提升。各方法在经典数据集LFW上的结果如表1所示。

ac12020ef2c2e968a95fa5f19b48735b.png图7不同损失函数的决策边界

1dbad55588ab38f3d7e2f4e03eda3f4b.png

表1各方法在LFW的准确率

e1f1173e2303ff66f8396f792908b42a.png

大规模人脸检索方法

01

暴力检索

人脸检索用到的主要技术是向量之间求距离。假设人脸特征向量的维度是D,用普通的方法计算其跟某人脸库中所有向量的余弦距离(假设特征向量已经归一化)的公式为:

a7f7a92aa0c5f292b3bd713bdf86ea74.png

测试集矩阵P的大小为1*D,人脸库矩阵C的大小为N*D, 时间复杂度为O(N*D)。如果N的数量非常大,几百万或者上亿,这个过程会变得非常慢,所以如何在海量特征向量中找到最接近的,就需要用到近似检索。

02 近似检索

近似检索主要由法国学者Herve Jegou在Product Quantization for Nearest Neighbor Search[4]中提出,主要分为两步。第一步为粗量化,第二步为乘积量化。

乘积量化是指将原始向量分为m个子向量,如果选择593c54f1016499d3f05fcdc7a1aa321f.png这样的参数,相当于用a34146949cc32ed75666ca158e0f659f.png来表示原始向量,这样就大大降低了存储空间

乘积量化如图9所示:

9c3b0c579d5c71c0fbefa9345277d9c7.png

图9乘积量化示意图

粗量化是指在原始的向量空间中,基于kmeans聚类出96f905a21464595c30232c9a4105773c.png个簇。

论文建议,836c5206c439fb0b5899e2c72d024794.png用簇的中心来代表该向量。

聚类之后查找准确率必然会下降,为了提高准确率减少信息损失,论文中先计算了每个数据与其量化中心残差,然后对残差做乘积量化达到效率和准确的提升。

此时检索的时间复杂度为f690f06fc14eaa8b69b538141112ba60.png,近似检索的一个c++/python实现参见。

来源:

https://github.com/facebookresearch/faiss

参考文献:

[1] Deep learning face representation from predicting 10,000 classes CVPR2014

[2] Deep learning face representation by joint identification-verification NIPS 2014

[3] FaceNet: A Unified Embedding for Face Recognition and Clustering CVPR2015

[4] SphereFace: Deep Hypersphere Embedding for Face Recognition CVPR 2017

[5] ArcFace: Additive Angular Margin Loss for Deep Face Recognition CVPR 2019

[6] Product Quantization for Nearest Neighbor Search, PAMI 2011

投稿 | 内容标签团队

编辑 | sea

排版 | sea

往期精彩资讯

大数据时代,列式优化或许能给我们新的思考

Hive转MR过程--初窥&优化探索

Hive迁移Presto--在OPPO的实践

f7c4cb163d38ee1595adc7775f54752e.gif

59357ad43b5a2de84ddd6bf2cab51e79.png

bd7901a836a6351dbbd85f2d55a8dd42.gif

”在看“点一下 大家都知道 7b9a9fd9eaa7eb972582023f9a5b1722.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值