1. 程式人生 > >10億級人臉搜尋

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億人口庫檢索