10億級人臉搜尋
阿新 • • 發佈:2018-11-01
人臉檢索
給定一張照片,與指定人臉庫中的N個人臉進行比對,找出最相似的一張臉或多張人臉。 根據待識別人臉與現有人臉庫中的人臉匹配程度,返回使用者資訊和匹配度,即1:N人臉檢索。可用於使用者身份識別、身份驗證相關場景。
人臉檢索技術難點:
- 單機由於記憶體和CPU效能限制,能夠支援的人臉檢索數始終都有上限,所以必須進行叢集設計來提高容量。
- 10億級別的人臉庫儲存是一個問題,按每張圖片50K的大小都會是TB級別了。
- 10億級別人臉庫建模需要很長時間。
- 10億級別人臉庫檢索響應時間能否做到秒級。
- 10億級別人臉庫檢索TPS能到多少。
我們針對以上問題設計開發了10億級別的人臉檢索系統,並針對業務場景開發了分散式圖片儲存系統和特徵管理系統。
分散式人臉檢索系統框圖
系統由3個部分組成:
- 配置管理服務。
- 人臉檢索服務。
- Master排程服務。
系統主要提供功能:
- 建立人臉庫。
- 刪除人臉庫。
- 新增人臉。
- 刪除人臉。
- 單庫檢索。
- 多庫檢索。
邏輯庫
單機處理能力有上限(如單機只能處理5000W人臉的檢索),人臉庫單庫非常大時(比如需要進行1.5億人臉檢索),單機必然無法處理,所以系統將待檢索的人臉庫抽象為邏輯庫,邏輯庫中人臉分散儲存在不同機器上,通過一定策略進行管理,這樣可以實現人臉庫人臉容量無上限。
邏輯庫處理邏輯:
- 實現超大庫檢索
- 需要等待所有分割槽返回
- 需要合併所有分割槽結果
消費分割槽
消費分割槽的設計思路很像kafka的消費者分配分割槽,其主要目的也是提高併發和容錯。
單分割槽單引擎:
- 併發低
- 無法實現容錯
單分割槽多引擎:
- 識別進行負載均衡
- 併發高
- 能夠實現容錯
消費分割槽負載均衡策略:
人臉搜尋典型應用
20億人口庫檢索