10亿级人脸搜索

人脸检索

      给定一张照片,与指定人脸库中的N个人脸进行比对,找出最相似的一张脸或多张人脸。 根据待识别人脸与现有人脸库中的人脸匹配程度,返回用户信息和匹配度,即1:N人脸检索。可用于用户身份识别、身份验证相关场景。

人脸检索技术难点:

  1. 单机由于内存和CPU性能限制,能够支持的人脸检索数始终都有上限,所以必须进行集群设计来提高容量。
  2. 10亿级别的人脸库存储是一个问题,按每张图片50K的大小都会是TB级别了。
  3. 10亿级别人脸库建模需要很长时间。
  4. 10亿级别人脸库检索响应时间能否做到秒级。
  5. 10亿级别人脸库检索TPS能到多少。

我们针对以上问题设计开发了10亿级别的人脸检索系统,并针对业务场景开发了分布式图片存储系统和特征管理系统。

分布式人脸检索系统框图

系统由3个部分组成:

  1. 配置管理服务。
  2. 人脸检索服务。
  3. Master调度服务。

系统主要提供功能:

  1. 创建人脸库。
  2. 删除人脸库。
  3. 添加人脸。
  4. 删除人脸。
  5. 单库检索。
  6. 多库检索。

逻辑库

      单机处理能力有上限(如单机只能处理5000W人脸的检索),人脸库单库非常大时(比如需要进行1.5亿人脸检索),单机必然无法处理,所以系统将待检索的人脸库抽象为逻辑库,逻辑库中人脸分散保存在不同机器上,通过一定策略进行管理,这样可以实现人脸库人脸容量无上限。

逻辑库处理逻辑:

  1. 实现超大库检索
  2. 需要等待所有分区返回
  3. 需要合并所有分区结果

消费分区

      消费分区的设计思路很像kafka的消费者分配分区,其主要目的也是提高并发和容错。

单分区单引擎:

  1. 并发低
  2. 无法实现容错 

单分区多引擎:

  1. 识别进行负载均衡
  2. 并发高
  3. 能够实现容错

消费分区负载均衡策略:

人脸搜索典型应用

20亿人口库检索

猜你喜欢

转载自blog.csdn.net/yimin_tank/article/details/82703121