1. 概述
人脸识别技术在最近几年得到了长足进步,目前在人脸识别领域业界领先的厂家识别准确率均达到了 99% 以上,因此大量人脸相关的应用场景开始逐步落地,例如人脸支付、人员布控、寻找失踪人口等,此外,结合人脸的追踪技术,也开始出现了分析人流走向、分析景点旅客行走规律、人员行为偏好分析等。这些应用虽然表现形式多样,但最终都是基于人脸特征检索这一技术实现的。
首先介绍一下人脸特征是什么。目前图像识别算法能够在一张照片中发现人脸,并能够对人脸中的轮廓进行识别和标记,算法使用这些标记点构造出表示该张人脸的特征的矩阵,这个过程称为人脸特征提取,得到的矩阵称为人脸特征矩阵,在工程上,特征矩阵一般以一维矩阵表示,以二进制数组的方式进行存储。
当需要确认两张人脸照片是否同一个人时,可以通过上述公式计算这两张人脸的特征矩阵之间的相似度,以此作为两个人脸的相似度,当相似度超过一定阈值时,就认为是同一个人,该阈值是经验值,不同厂家的特征提取算法不同,得到的经验值也会不同。提高阈值,会提高准确率(认为是同一个人的情况下判断正确的占比),但会降低查全率(能匹配到的人脸在人脸库中全部匹配人脸的占比)。因此在不同的应用场景下,由于准确率和查全率的权重不同,导致了阈值也会不同。如在寻找失踪人口的场景,是宁可找错也不应放过的,阈值就会相应调低,让更多相似的人脸能被看到;在人脸支付场景,准确率是最重要的,那么阈值相应就会较高,当然也会导致匹配失败的次数增多。
把大量人脸特征集中存储可形成特征库,若要判断一个人在不在这个特征库中,只需要拿这个人的人脸照片对应的人脸特征,跟特征库里每个特征计算相似度,把相似度超过阈值的特征对应的照片找出即可。通过一个特征来比对一个特征库的场景,往往称为人脸 1:N 比对,与之对应的两个特征库之间的比对,往往称为人脸 M:N 比对。
算法场景通常会提供如下的 M:N 比对接口:
接口实现两个特征库之间的比对,如上图中 4 个特征的库和 3 个特征的库的比对,可得到 12 个相似度。当要实现 1:N 时,只需让其中一个特征库只包含一个特征即可。此前基于 E5-2640V3 CPU(16 物理核)实测 1:N,每秒可实现 1.5 亿对特征比对。
2. 性能指标要求
在今年某地市的项目中,系统从一万多人脸摄像机中采集人脸抓拍图片进行特征提取后形成特征库,业务层需要实现人脸检索功能。其中数据规模为:每天约 2000 万张人脸抓拍图,图片平均约 30KB,人脸特征约 600 字节,即每月 6 亿个特征,每月特征库单副本约占用 350GB 空间,数据需要存储 1 年,人脸检索要求 1:1 亿在 3 秒内响应,需要支持 10 个并发,需要支持根据时间、摄像机编号、相似度阈值来过滤人脸。
当然这是在最近才提出的性能指标要求,两年前,在人脸相关项目还没有大面积落地时,对人脸检索的性能指标要求还在千万级以下的人脸比对,而且只需支持 1 - 3 个并发,但也由于当时没有可参考的案例,业务场景处于摸索阶段,因此在人脸检索上需要支持更丰富的检索条件,如除了时间和摄像机编号外,还需要支持根据性别、年龄段、是否戴帽子、是否戴眼镜等条件过滤数据。
下面将从最简单的方案讲起,逐步推进到支持千万级、亿级人脸比对的方案,让大家对方案的演进有个整体的了解。
3. 解决方案演进
3.1 人脸动态库方案
在内部验证阶段,使用单机存储固定特征个数(可能是一千万个)的特征库,每个特征对应记录 ID、时间戳、摄像机编号等信息。每天新增的特征形成一个单独的小特征库,每天定时把小特征库合并到大特征库,并把大特征库中最旧的同量特征删除,保持特征库的大小。在检索时先对全库进行 1:N,根据阈值过滤出部分记录后,再抽取对应记录的额外信息,与页面检索条件进行匹配,返回结果。
优点:由于是单机系统,方案实现和维护都比较简单
缺点:单机支持的特征数量有限,无法横向扩展,检索并发度低,过滤条件无法灵活变化
3.2 ES 分布式人脸检索方案
3.3 基于 RocksDB 的分布式特征索引方案
3.4 基于小特征加速比对的检索方案
3.5 基于 GPU 优化的检索方案
0
0
0
0
0
0
0
0
0