人脸识别基础知识、大规模人脸识别评测

news/2024/11/29 4:05:38/

文章目录:

  • 1 人脸识别背景介绍
    • 1.1 人脸1:1比对
    • 1.2 人脸1:N搜索
    • 1.3 人脸N:N搜索
    • 1.4 人脸虚拟ID的聚类
    • 1.5 人脸识别的基本流程
  • 2 人脸识别前沿算法
    • 2.1 人脸识别算法发展
    • 2.2 人脸识别算法中的一些典型代表
  • 3 分布式人脸识别训练
  • 4 大规模的人脸评测平台
    • 4.1 LFW
    • 4.2 MegaFace
    • 4.3 Trillion Paris
    • 4.4 评测标准

  • 如何在大数据下对人脸识别训练
  • 如何对人脸识别的算法进行更加合理的评测

1 人脸识别背景介绍

1.1 人脸1:1比对

在这里插入图片描述

  • 给定两个人脸,判断是否同一人。

  • 应用场景:银行柜台、海关、手机解锁、酒店入住、网吧验证。(比如,你先要出示你的身份证,然后用你的人脸与身份证上的人脸做1v1的比对!手机解锁也是一样,需要你提前注册一张人脸图片)

  • 特点:人证比对

1.2 人脸1:N搜索

在这里插入图片描述

在实际使用的过程中一般是静态的搜索,比如一个公安民警,在监控视频中锁定目标人物,然后把他的脸框起来,提交到系统中去搜索,系统一般会返回topK(K一般是几十或100量级的数字),然后会按照相似度把这些人脸都排列处来。然后人工验证哪些是对的,当然如果top1就是对的那是最好!

  • 一张待检索图片,大小为N的人脸库(如犯罪分子库),判断库中是否有目标人物

  • 要回答得问题是:是否为库中人脸1?是否为库中人脸2?。。。。。是否为库中人脸N?是否不在库中?

  • 实际使用的特点:N次比较,人工交互,TopK(比如100),库往往可以做到比较大,待检索图像质量可能会比较差(比如监控摄像头下捕捉到的人脸比较远、角度比较大、有遮挡、分辨率低等)

在这里插入图片描述

现在的算法,在底库1000万级别的时候,top1的召回率还是挺高的,大概有百分之八九十的样子!

1.3 人脸N:N搜索

在这里插入图片描述

N:N的搜索就比较难一些!

  • 大量的摄像头(N个摄像头),都在实时抓拍,有很多待确认的抓拍人脸(N个待比对的人脸)

  • 有个比较大的库

  • 应用场景:会议签到,小区门禁,自动闸机,安防监控

举个例子:

比如在安防领域,我们有100个摄像头,每个摄像头每天抓取一万个人,总的搜索次数就有100万次,假如这一天10个犯罪嫌疑人出门了,被这些摄像头中的某一个抓拍到,然后我们要在一个10万大小的底库中去搜索,我们有一个算法,这一天总共报警了100次,然后警察每个都去确认,最后抓到了9个犯罪嫌疑人。这样结果看起来还不错,总共出现了10个犯罪抓到了9个,那么召回率就是90%

误报率:(91/100w10w 约等于1e-9)100次报警,对了9个,错了91个(误报), 总共做了100w10w次比较,约等于10亿分之一(1e-9)。这个指标在现在的人脸识别指标还算不错了,但是在公安民警来看也没有那么理想,因为他们出警100次只抓到了9个犯罪嫌疑人!他们更希望是出动10次,就抓到9个人。那么他出动10次就能抓到9个人的误报率是多少呢(1/100w*10w 约等于1e-11),这样看起来民警是少出去了1个数量级,但是你的误报率要提升两个数量级(千亿分之一),但即使有一个可以达到千亿分之一的算法也只能应对100个摄像头,因此在算法上还有很大的提升空间

1.4 人脸虚拟ID的聚类

在这里插入图片描述

  • 不知道每个人的证件信息,只有大量的摄像头的抓拍结果

  • 根据人脸、时间空间等图像和各种先验信息进行聚类,可以用来比如挖掘用户的轨迹和行为习惯

  • 人脸相册 安防监控 智能零售。比如手机的相册进行人脸聚类,但是这个库还是比较小,但是在安防和零售数据一般会比较大。如果能够做的比较好也是比较有应用价值的,比如在零售方面知道哪些顾客经常来买东西,什么时间买了什么东西,可以有针对性的推荐商品等!

1.5 人脸识别的基本流程

在这里插入图片描述

1、人脸检测

2、人脸关键点定位

一般提取5个关键点,用于后面对人脸对齐

3、人脸矫正(/ 人脸对齐)

人脸对齐:把人脸转到比较正的方向上,便于后面的模型分析,以及用CNN特征提取的时候,各个feature之间能够更高的对齐

4、人脸特征提取

最终会提取到一个人脸的描述特征,通常是一个100多维到几百维的float类型的特征表达(一般128,256,512、1024等)。然后利用不同人脸之间的特征距离(越小越好)或相似度(越大越好),然后再根据一定的阈值,判断这两个人脸是否是同一个人

2 人脸识别前沿算法

2.1 人脸识别算法发展

人脸识别的算法演变具体算法方法
一些传统思路Eigenface,LDA,LBP+Joint Bayes
CNN baselineSoftmax
CNN+各式各样的lossPairwise,Triplet,DeepFace,DeepID1,2,2+,3,FaceNet,CenterLoss等
最新进展(Normalization,Margin)Lsoftmax,Asoftmax,NormFace/coco Loss,Feature Incay,AMSoftmax/CosFace,Arcface/insightFace

1、传统方法做人脸识别方法还是挺多的,这里只列取一些

2、在CNN出来之后,一个很自然的baseline就是直接做softmax分类

3、经过两年的发张,又出现了各种各样的loss

4、到最近的一些新的进展,又回归到了softmax损失,但是大家对softmax、Normalization、Margin又有了一些更深的探索!

2.2 人脸识别算法中的一些典型代表

然后对上面人脸识别算法发展中的一些典型代表进行回顾一下:

在这里插入图片描述

其实,早在80年代末就可以用CNN做人脸识别,比如把字符输入变换成矫正后的人脸输入等

1、DeepID就是上面思路的具体实现

在这里插入图片描述

  • 它是对人脸很多关键的区域,每个区域都经过CNN网络,直接用softmax分类,然后得到隐层的特征,然后把所有的patch特征拼接在一起,再做某种意义上的降维,然后得到了最终的特征,用这个特征做特征描述。当时再LFW上是领先了其他的算法

  • 得到最后的人脸特征之后,又做了基于概率统计的降维

2、DeepID2

在这里插入图片描述

其实,从DeepID大家就觉得用隐层的特征不见得是最好的方式,DeepID2有做的更加细致一些,

希望同一个人的特征尽量近,不同人的特征尽量远,输入是两张图片,然后判断两张图片的特征的欧式距离,如果是同一个人都是距离比较小,如果不是同一个人要求他们之间的距离要大于等于m,一但小于m就要受到惩罚(从损失函数中可以看出)。去掉了大的FC层,类似与二分类。

3、DeepID2+

在这里插入图片描述

和DeepID2差不多,做了小的修改

4、DeepFace

在这里插入图片描述

DeepFace在算法上并没有本质的创新,还是softmax loss,它的主要改进是在数据预处理方面,在对齐的时候做了更加精细的调整,结果显示会有一定的提升,但是也有一些人会质疑,虽然在三维对齐在有些场景下是能够work的,也有可能会在有些场景下错的比较远!

5、DeepID3

在这里插入图片描述

2015年刚好是VGG和GoogleNet出来的那一年,作者用了比较深的网络,提升也是很自然的!

6、FaceNet

在这里插入图片描述

下一个是Google的FaceNet

前面用到的都是公开的人脸数据集,数据ID也就1万左右,Google以为有很多数据,在FaceNet上使用的数据有2.6亿,总共的ID有800W。

FaceNet使用的是Triplet loss,它有三个样本对,分别是Anchor、Negative、Postive,如果和anchor是同一个类就是Positive对,如果不是同一个类就是Negative对。可能也开始的时候,Negative对可能距离anchor的距离比较postive距离anchor的距离更近,但是期望所有的三元对训练之后,同一类的距离anchor更近,而且是明显的近,相当于是有一个margin和alpha在这里控制!

这样就可以避免大的分类的layer,如果特征512,800万ID就相当与是一个512*800w的矩阵才能做softmax。然后直接拿GooleNet做backbone网络结构设计

在这里插入图片描述

7、Center Loss

在这里插入图片描述

在这里插入图片描述

前面几个算法都是比较老的,大部分都是从softmax loss上做的改进,google FaceNet是例外。后面几个比较有效的方法基本上都是在softmax基础上延申出来的。


8、L-softmax(Large-Margin softmax)

在这里插入图片描述

希望在做分类的时候把不同的类区分开,把同一个类压缩的更紧

在这里插入图片描述
在这里插入图片描述

直观的看就是把两个类的簇进行压缩,尽量让二者之间留有一个比较大的margin,这样更容易区分不同的类!

9、A-softmax

在这里插入图片描述

A-softmax是在L-softmax基础上加了一句话,也就是考虑margin,同时添加了两个限制条件||W||=1和b=0,其他与L-softmax都是一摸一样的!

10、NormFace / CocoLoss

在这里插入图片描述

前面的L-softmax和A-softmax两篇论文是从margin的角度来讲的。后面出了两篇论文NormFace和CocoLoss是在Norm的角度改进的,加了两个限制,每个样本的特征feature要是一个const。从这里开始人脸特征的距离全部从L2转向了cos距离!

11、FeatureIncay
在这里插入图片描述

在这里插入图片描述

margin类似SVM分类,分类之间要有空隙,把两个类分的更开!

cos(theta)减去m,对它要求更高,角度更小,

12、AMSoftmax
在这里插入图片描述

13、InsightFace / ArcFace是同一篇论文
在这里插入图片描述

上面几种方式都是让cos(theta)变得更小!

在这里插入图片描述

在这里插入图片描述

3 分布式人脸识别训练

数据并行+模型并行

(要考虑通信)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

loss设计是学术界做的比较多的!模型评测指标如果不好,就可能判断不出来那个模型更好!

4 大规模的人脸评测平台

4.1 LFW

在这里插入图片描述

缺点:几乎已经饱和了,当两个算法在LFW上评测的可能都达到了99.8%+,当换一个数据集可能就会表现的比较差!

4.2 MegaFace

在这里插入图片描述

top1也已经98.998%,也快接近饱和了!

4.3 Trillion Paris

在这里插入图片描述

27w query和1.6M差不多有27w1.6M=2.7w160w约等于5000亿对

1、训练集制作的流程

在这里插入图片描述

  • 其中一部分是在公开的数据集MS-Celeb-1M-v1上做了一些清理,去掉了其中的一些名人
  • 然后又收集一个亚洲的人脸数据集,大概也有1W个ID,让后把这两个数据集合并到一起,去重,最终做成一个合并版的数据!

MS-Celeb本上就包含两种噪声:

  • 类内噪声:每个类可能不知包含一个人,但实际上应该区分开,是不同的ID
  • 类间噪声:比如同一个人在不同的电影中名字不一样,被分到不同的类中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 先对每个类做一个层次聚类,当其阈值小于某个threshold就把他们聚在一起,一开始threshold设置的比较小的,只有少量的图片聚起来

  • 如果两个簇,有两张图片,两两比较的最短距离小于某个threshold,这两个簇就会合并起来

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

测试机的制作要求更高:
在这里插入图片描述

在这里插入图片描述
检测图片也具有比较大的类内差距:

  • 比如又化妆的
  • 大角度、不同姿态
  • 不同表情
  • 戴墨镜遮挡、黑白等

4.4 评测标准

1、评测标准
在这里插入图片描述

万亿人脸对做测试:27w的图片qurey 和 160w的图片做底库,两两之间做pair,然后让模型去判断是否是同一个人!

2、万亿人脸对测试,由于数据量比较大,可能需要比较多的资源,因此大家只要提交模型的特征就可以,大概半个小时就可以看到评测结果!

在这里插入图片描述

3、跨年龄和角度的测试

在这里插入图片描述

在这里插入图片描述

我们有160w的干扰项作为底库,在这么多人中去搜索你感兴趣的目标人物

在这里插入图片描述
LFW作为底库,大概有5000,搜索次数比较多有160w次,来模拟真实安防多摄像头的场景,在安防景下大部分的抓拍可能都不是你的目标任务,可能在160w次只有几千人是你的目标人物,但是你需要把这些人识别出来,控制误报!

在这里插入图片描述

参考:https://zhuanlan.zhihu.com/p/268736001
参考:https://edu.csdn.net/course/play/8528/175587
参考:https://cloud.tencent.com/developer/article/1435298 # 大角度人脸转正
参考:https://blog.csdn.net/muhen1234/article/details/81776822
参考:https://zhuanlan.zhihu.com/p/58952484
参考:视频教程


http://www.ppmy.cn/news/382869.html

相关文章

C/C++数据结构课程设计[2023-05-31]

C/C数据结构课程设计[2023-05-31] 数据结构课程设计 实验(训)指导书 所在学院:计算机科学与工程学院 编写说明 一.实验总体目标 《数据结构》是一门实践性较强的课程,为了学好这门课程,必须在掌握理论知…

python语言培训是密封式的吗

述(最多18字 以下试题内容来源由-众课帮-公众号和小程序提供 可查询更多的试题答案新鲜尿液有氨臭味 变异性心绞痛患者首选药物是 A_______ofdependenceonGMOseedsandchemicalfertilizers,pesticides(杀虫剂),andherbicides(除草剂)isthencre…

转自 方倍工作室微信公众平台开发

LNMP的配置与优化 一、LNMP的下载 LNMP一键安装包是一个用Linux Shell编写的可以为CentOS/RadHat/Fedora、Debian/Ubuntu/Raspbian/Deepin VPS或独立主机安装LNMP(Nginx/MySQL/PHP)、LNMPA(Nginx/MySQL/PHP/Apache)、LAMP(Apache/MySQL/PHP)生产环境的Shell程序。同时提供一些实…

std::unique_lock的使用

std::unique_lock 是 C11 中的一个互斥量封装类,用于提供更灵活和安全的互斥访问。与 std::lock_guard 不同,std::unique_lock 可以随时释放互斥锁,并且支持对互斥量进行延迟加锁和递归加锁。 在使用 std::unique_lock 时,需要先…

2019-2020年华为暑期实习生及网络精英挑战赛全过程记录(更新至2019/7/30入职半个月)

华为暑期实习生全过程记录 简历投递在线测试笔试华为网络精英挑战赛——基础开发Java方向一、初赛二、复赛和决赛 后续面试一、技术面二、综合面 最后环节入职指导Step1. 网上信息填报Step2. 报到前准备Step3. 报道Step4. 部门报道 简历投递 3.31日前截至,需要记住…

2021 年度湖南省职业院校技能竞赛

2021 年度湖南省职业院校技能竞赛 中职组信息技术类网络搭建与应用赛项竞赛规程 一、赛项名称 1.赛项名称:网络搭建与应用 2.赛项组别:中职组 3.赛项归属:信息技术类 二、赛项简介 本赛项主要考察参赛选手的计算机网络拓扑和 IP 地址规划、综…

目标检测YOLO实战应用案例100讲-基于深度学习的显著性目标检测研究与应用(论文篇)

目录 基于深度学习的显著性目标检测综述 基于深度学习的显著性目标检测分类及难点分析

火山引擎 DataLeap:一个易用、高效的数据目录,是如何搭建的?

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 企业如何找到数据、了解数据以及使用数据? 这离不开数据目录的能力。数据目录有着类似于“字典”的作用,能够帮助数据生产者和使用者快速定位…