NO IMAGE

 

前言:本文作者@jasmine,是我們“AI產品經理大本營”成員,下面是她分享的第4篇文章,歡迎更多有興趣“主動輸出”的朋友們一起加入、共同進步:)

 

0?wx_fmt=jpeg

 

最近整理了CV方向的一些產品基礎知識,我上一篇文章《看AI產品經理如何介紹“計算機視覺”(基於實戰經驗和案例)》算是這個系列的第一篇;本文是本系列下的第二篇,主要針對人臉識別進行梳理。後續還會有多目標跟蹤、OCR等方向的內容。希望大家能從這個系列收穫到更多的CV乾貨:)

 

人臉識別(Face Recognition):對影象中的人臉進行檢測、識別和跟蹤。

 

1

 

技術流程詳解

技術流程:

0?wx_fmt=png

1、人臉採集

人臉採集主要關注以下因素——

1)影象大小人臉影象過小會影響識別效果,人臉影象過大會影響識別速度。非專業人臉識別攝像頭常見規定的最小識別人臉畫素為60*60100*100以上。在規定的影象大小內,演算法更容易提升準確率和召回率。影象大小反映在實際應用場景就是人臉離攝像頭的距離

 

2)影象解析度:越低的影象解析度越難識別。影象大小綜合影象解析度,直接影響攝像頭識別距離。現4K攝像頭看清人臉的最遠距離是10米,7K攝像頭是20米

 

3)光照環境:過曝或過暗的光照環境都會影響人臉識別效果。可以從攝像頭自帶的功能補光或濾光平衡光照影響,也可以利用演算法模型優化影象光線。

 

0?wx_fmt=jpeg

 

4)模糊程度:實際場景主要著力解決運動模糊,人臉相對於攝像頭的移動經常會產生運動模糊。部分攝像頭有抗模糊的功能,而在成本有限的情況下,考慮通過演算法模型優化此問題。

 

0?wx_fmt=png

 

5)遮擋程度:五官無遮擋、臉部邊緣清晰的影象為最佳。而在實際場景中,很多人臉都會被帽子、眼鏡、口罩等遮擋物遮擋,這部分資料需要根據演算法要求決定是否留用訓練。

 

6)採集角度:人臉相對於攝像頭角度為正臉最佳。但實際場景中往往很難抓拍正臉。因此演算法模型需訓練包含左右側人臉、上下側人臉的資料。工業施工上攝像頭安置的角度,需滿足人臉與攝像頭構成的角度在演算法識別範圍內的要求。

 

2、人臉檢測(Face Detection)

1)人臉位置檢測

 

0?wx_fmt=png

目的是在影象中準確標定出人臉的位置和大小

 

2)人臉關鍵點檢測(人臉對齊)

0?wx_fmt=png

目的是自動估計人臉圖片上臉部特徵點的座標

 

一般可以使用Openface中的Dlib模型實現人臉檢測,利用OpenCV庫對資料進行處理。最近人臉檢測演算法模型的流派包括三類及其之間的組合:viola-jones框架(效能一般速度尚可,適合移動端、嵌入式上使用),dpm(速度較慢),cnn(效能不錯)

 

人臉檢測關注以下指標:

  • 檢測率:識別正確的人臉/圖中所有的人臉。檢測率越高,代表檢測模型效果越好。

  • 誤檢率:識別錯誤的人臉/識別出來的人臉。誤檢率越低,代表檢測模型效果越好。

  • 漏檢率:未識別出來的人臉/圖中所有的人臉。漏檢率越低,代表檢測模型效果越好。

  • 速度:從採集影象完成到人臉檢測完成的時間。時間約短,檢測模型效果越好。

 

舉一個實際例子說明:

 

在攝像頭某張抓拍影象中,一共有7張人臉,演算法檢測出4張人臉,其中3張是真實人臉,1張是把路標誤識為人臉。

 

在這個實際案例中:檢測率=3/7  誤檢率=1/4  漏檢率=(7-3)/7

 

3、影象預處理

影象預處理的目的是消除影象中無關的資訊,儘可能去除或者減少光照、成像系統、外部環境等對影象的干擾,使它具有的特徵能夠在影象中明顯地表現出來。主要過程包括人臉影象的光線補償、灰度變換、直方圖均衡化、歸一化、幾何校正、濾波以及銳化等

 

1)灰度化:將彩色影象轉化為灰色影象的過程。

0?wx_fmt=png

 

2)直方圖均衡化:直方圖描述了一副影象的灰度級內容。直方圖均衡化主要目的是為了提高對比度和灰度色調的變化,使影象更加清晰。

0?wx_fmt=png

 

3)歸一化:通過一系列變換,將待處理的原始影象轉換成相應的唯一標準形式(該標準形式影象對平移、旋轉、縮放等仿射變換具有不變特性),使得影象可以抵抗幾何變化的攻擊。例如用放大縮小影象、減少圖片由於光照不均勻造成的干擾等。

 

4)中值濾波:將圖片進行平滑操作以消除噪聲

0?wx_fmt=png

 

預處理的效果直接影響到人臉識別率。可以通過不同方法,相同演算法、相同訓練模式評估模型效果,選擇最佳的預處理方式。

 

4、人臉特徵提取

傳統的人臉識別模型一般都是在SVM等分類器分類後,通過CNN提取特徵。

但隨著深度學習的發展,人臉識別有更多端到端的框架選擇。這裡簡單介紹一下三種近兩年基於深度學習人臉識別的方法:Deep face、Deep ID、FaceNet

 

1)Deep face

a.Deep face 與其他方法最大的不同在於,DeepFace在訓練神經網路前,使用了基於3D模型人臉對齊的方法。

 

0?wx_fmt=jpeg

b.使用深度神經網路學習特徵

 

0?wx_fmt=jpeg

c.該模型在LFW資料集上取得了0.9735準確率

 

2)DeepID

DeepID有三代:DeepID、DeepID2、DeepID2 。

 

其中DeepID2 對遮擋有很好的魯棒性。有兩種方式對人臉進行多種尺度的遮擋,第一種是從下往上進行遮擋,從10%-70%。第二種是不同大小的黑塊隨機放,黑塊的大小從10×10到70×70。

 

0?wx_fmt=jpeg

結論是:遮擋在20%以內,塊大小在30*30以下,Deep2 的輸出向量的驗證正確率幾乎不變。

 

3)FaceNet

直接將人臉影象對映到歐幾里得空間,空間的距離代表了人臉影象的相似性。該方法基於深度卷積神經網路。FaceNet得到人臉最終表示後不用像DeepID那樣需要再訓練模型進行分類,直接計算距離,效率很高。

 

它在LFW資料集上使用了兩種模式:

a.直接取LFW圖片的中間部分進行訓練,

b.使用額外的人臉對齊工具,準確率為0.9963,超過DeepID。

 

當然基於深度學習的人臉識別方法還有很多種,比如baidu的方法等等。對這塊有興趣的朋友可以看看這篇文章《基於深度學習的人臉識別技術綜述》http://t.cn/RJeczWj

 

5、人臉匹配與識別

將提取的人臉特徵資料與資料庫中儲存的特徵模板進行搜尋匹配,設定一個最佳的相似度閾值,當相似度超過該閾值,則輸出匹配後的結果。

 

最佳相似度閾值的決定需要考慮到輸出結果的正確率和數量。假設1000張樣本圖片裡,共600張正樣本。相似度為0.9的圖片一共100張,其中正樣本為99張。雖然0.9閾值的正確率很高,為99/100;但是0.9閾值正確輸出的數量確很少,只有99/600。這樣很容易發生漏識的情況。

 

有的同學可能很快就通過這個場景聯想到精確率召回率的概念,是的,這也是需要應用精確率和召回率的實際評估場景之一。這裡再解釋一下精確率和召回率:

1)精確率(precision):識別為正確的樣本數/識別出來的樣本數=99/100

2)召回率(recall):識別為正確的樣本數/所有樣本中正確的數=99/600

0?wx_fmt=png

(圖片[email protected] )

 

只有當選擇的閾值實現:a.閾值以上結果的精確率極高;b.閾值以上結果的召回率極高。這個閾值才是在該演算法模型下最佳閾值。

 

除精確率和召回率值得關注外,誤報率(False Alarm)也是非常重要的指標。家用家用機器人/攝像頭,可能會常開人臉檢測,誤報會非常影響使用者體驗(比如,沒有異常情況但頻繁報警提示)。因此誤報率會是這類場景的重要指標。

 

另外在這一個識別的步驟中,產品還需要確定具體輸出的需求點是人臉認證還是人臉識別——

 

1)人臉認證一對一的匹配過程,解決“這是否為某人”的問題。系統需先找出已儲存的物件資訊,再將待認證的資訊與前者對比核對,從而判定接受或拒絕待認證的身份。

 

常見的應用場景:例如移動支付認證、安全性身份核對等。

 

產品在系統設計的邏輯上,需要先考慮調取已儲存物件資訊的先驗條件。通過介面/語音的提示,使得待認證者預先知道自己正處於被核對的過程中,且已預先了解擬核對物件的身份。

 

0?wx_fmt=png

 

2)人臉比對一對多的匹配過程,解決“這是誰”的問題。系統將待識別人臉影象的特徵值與資料庫中儲存的所有已知身份的物件的特徵值進行比較,來確定待識別者的身份。

 

常見的應用場景:人臉開門、人臉檢索等。

 

產品在本需求的設計上,需要考慮系統的實時性架構方案的不同對產品邏輯的影響。例如人臉開門常見架構是跨網際網路和區域網的,人臉檢索常見架構是在某一個區域網(網際網路)下的。

 

a.人臉開門等跨網方案需要關注的因素

  • 遠端演算法更新:遠端演算法更新必然會造成本地區域網功能暫時性無法使用。因此遠端演算法更新的頻率、時間、更新效果都需要產品在更新前精確評估。

  • 增刪改人臉資料與本地資料的同步:本地區域網和網際網路是無法直接互動的,因此使用者在網際網路一旦對人臉資料庫進行增刪改的操作,下發程式的穩定性和及時性都需要重點關注。

  • 硬體環境:本地儲存空間的大小和GPU直接影響到本地識別的速度。伺服器的穩定性影響到功能地正常使用。

  • 守護程式:斷電等外接情況意外情況發生又被處理完善後,程式能自動恢復正常。

 

b.人臉檢索等某一區域網(網際網路)方案需要關注的因素

 

0?wx_fmt=png

 

  • 速度:除了演算法識別需要消耗一定時間外,該區域網下的網速會影響到識別結果輸出的速度。

  • 資料庫架構:通過檢索結果關聯結構化資料。

  • 閾值的可配置性:在介面設定閾值功能,從產品層面輸入閾值後,改變相對應的結果輸出。

  • 輸出結果排序:根據相似度排序或結構化資料排序內容地抉擇

  • 雲服務的穩定性

 

 

2

 

與人臉識別相關的其他CV內容

1、人臉表情識別(Face expression recognition 簡稱FER)

 

0?wx_fmt=png

 

人臉表情識別的一般步驟:圖片獲取、影象預處理(主要有圖片歸一化、人臉檢測與定位)、特徵提取及表情分類

 

現普遍認為人類主要有六種基本情感:憤怒(anger)、高興(happiness)、悲傷(sadness)、驚訝(surprise)、厭惡(disgust)、恐懼(fear)。而大多數表情識別是基於這六種情感及其拓展情緒實現的,目前主要困難點是:

a.表情的精細化程度劃分:每種情緒最微弱的表現是否需要被分類。分類的界限需要產品給出評估規則。

 

b.表情類別的多樣化:是否還需要補充其他類別的情緒,六種情緒在一些場景下遠不能變現人類的真實情緒。因此除了基本表情識別外,還有精細表情識別、混合表情識別、非基本表情識別等細緻領域的研究。

 

c.缺少魯棒性

 

2、人臉性別識別

性別分類是一個典型的二類問題,人臉性別分類問題需要解決的兩個關鍵問題是人臉特徵提取和分類器的選擇

 

人臉性別識別其實僅能識別到人臉外貌更偏向於女性還是男性,很難對女生男相、男生女相進行正確判斷。產品需制定合理的性別劃分規則。

 

3、人臉年齡識別

0?wx_fmt=png

年齡識別的難度在於單人的不同年齡段識別和多人的不同年齡段識別,人臉年齡識別常和人臉識別進行組合識別,能更正確的判斷在一定年限內“是否是一個人”的問題

 

識別年齡無變化的人臉用分類即可,而對年齡變化的人臉識別方法是通過年齡模擬,將測試影象和查詢庫中的影象變換到某一共同的年年齡,從而去除年齡不同的影響,使識別在年齡相同的人臉影象進行。

 

除了以上內容,還有是否戴眼鏡、頭髮長度、膚色等等方向,產品可根據需求對演算法提出不同的組合類別。值得強調的是,隨著行業的深入,我們會發現單純的人臉識別並不能滿足實際應用場景的需求,比如在安防行業或者金融領域,活體技術(如何驗證目前的人是真人而不是照片或視訊)和防欺詐技術才是戳中使用者痛點的、更本質的關鍵。人臉識別技術和多個技術相互結合,是現在場景中運用得比較廣泛的方案。

 

3

 

補充說明

1、測試環境說明

例如:

  • CPU:Intel(R) Core(TM) i7-4790 CPU @ 3.60 GHz

  • 記憶體:8GB

  • 系統:Ubuntu 14.04 x86_64/Windows 7 SP1 64bit

  • GCC版本:4.8.2

注:以上測試環境是PC(也可選手機上的測試環境)。

 

2、需要說明測試集是什麼,或者圖片要求(比如“圖片包含人臉大小應超過96*96畫素)

a.經典人臉身份識別測試集LFW(LFW benchmark http://vis-www.cs.umass.edu/lfw/ )共包含13233 張圖片 5749 種不同身份;世界記錄99.7%。

 

b.CK 一個是人臉表情資料集(CK ,Extended Cohn-Kanade Dataset, http://www.pitt.edu/~emotion/ck-spread.htm ),包含固定表情和自發表情,包含123個人的593個表情序列。每個序列的目標表情被FACS編碼,同時新增了已驗證的情感標籤(生氣、厭惡、害怕、快樂、悲傷、驚訝)。

 

3、需要說明“有效距離,左右角度,上下角度,速度”等引數值(範圍)

注:這和“部署的靈活性”相關——由於不同客戶不同場景的需求不同,所以技術方的人臉檢測模組,一般可以通過調整引數得到N種亞型,以適應不同應用場景(光照、角度、有效距離、速度) 下對運算量和有效檢測距離的需求。

 

4、需要知道的是,很多公司刷榜的資料,更多是PR效果

UCLA的@朱鬆純 教授 在文章《淺談人工智慧:現狀、任務、構架與統一 | 正本清源》裡就提到:

 

咱們刷榜比打乒乓球還厲害,刷榜變成咱們AI研究的“國球”。所謂刷榜,一般是下載了人家的程式碼,改進、調整、搭建更大模組,這樣速度快。我曾經訪問一家技術很牛的中國公司(不是搞視覺的),那個公司的研發主管非常驕傲,說他們刷榜總是贏,美國一流大學都不在話下。我聽得不耐煩了,我說人家就是兩個學生在那裡弄,你們這麼大個團隊在這裡刷,你程式碼裡面基本沒有演算法是你自己的。如果人家之前不公佈程式碼,你們根本沒法玩。很多公司就拿這種刷榜的結果宣傳自己超過了世界一流水平

 

4

 

人臉識別的現狀

1、實驗室效果和現實效果對比

1)實驗室訓練資料和實際抓拍資料

0?wx_fmt=png

 

大多數情況下,實際抓拍影象質量遠低於訓練影象質量。由於訓練資料普遍是由使用者經過手機app/web採集上來的圖片,所以光照、角度、模糊程度都可以由產品控制,但是實際抓拍圖片質量是和實際場景中的光線、攝像頭解析度等等因素相關,照片質量比較難把握。

 

在上圖的情況下,即使演算法模型可以達到很高的精確度,但由於抓怕圖片質量不好的原因,實際效果會大打折扣甚至不可用。

 

這種情況的解決辦法是:

  • 對攝像頭進行補光/濾光

  • 將攝像頭固定在角度合適的位置

  • 演算法在識別前進行影象預處理

 

2)訓練時的標準和實際應用的標準

大多數情況下,實際應用的標準會遠高於訓練標準。例如,人臉識別實驗室的標準是通過正臉資料訓練出模型,能識別正確人臉就可以。而實際情況可能沒有正臉資料,對訓練提出了更高的要求。

 

3)訓練效果和現實效果

大多數情況下,實際效果會遠低於訓練效果。現在市面上CV公司都是說自己的訓練效果在99%以上(無限接近於100%),但這不等於實際應用的效果就是99%。工業上場景複雜的人臉應用(類似識別黑名單這種1:N的人臉比對)正確率在90%以上就已經是表現得很好的演算法模型。

 

2、演算法漏洞常被利用破解人臉識別系統

人臉識別常常被質疑是否安全性不夠高,很多人臉識別的產品都能被破解。比如長得比較像的人可能會被誤認為同一人;用錄入人員的照片或者視訊也能通過人臉系統。

 

0?wx_fmt=png

 

而現在安全效能比較高的系統一般是人臉識別技術和其他生物識別技術相結合,例如人臉識別 指紋識別;人臉識別 虹膜識別等等。