目前CV領域最廣泛應用,同時帶來商業價值的算法莫過于人臉相關算法,主要包括人臉檢測、關鍵點定位和人臉識别。
一、人臉檢測
人臉檢測算法和通用物體檢測算法類似,不同之處包括:1、物體類别數量不同,人臉檢測就2個類别,而通用物體檢測類别較多;2、人臉框aspect ratio單一,而通用物體檢測aspect ratio多變,一般對通用物體檢測算法進行适當修改可用于人臉檢測。
目前開源的人臉檢測算法較多,其中LibfaceDet和ULFD(ultra-light face detection mode)在算法優化和可部署層面都做的不錯,ULFD精度更高,另外這兩個算法都基于anchor-based的SSD目标檢測算法。
二、關鍵點定位
人臉關鍵點定位指的是定位人臉語義點,如鼻尖、眼角等,這些點包含有人臉姿态和表情等資訊。關鍵點定位是人臉領域一個研究多年的問題,目前在業界已基本成熟,支撐起各種娛樂應用,研究的核心是提升模型在各種條件下的魯棒性,如不同姿态、表情、光照、遮擋和模糊等。
Wing Loss for Robust Facial Landmark Localization with Convolutional Neural[1]:
這個工作對關鍵點定位中的loss function選擇和不同姿态資料均衡進行了研究,同時提出了兩階段的關鍵點定位模型。
關鍵點定位同回歸任務一樣,常用的loss function包含l2損失,l1損失和smoothl1損失,下圖反映了不同損失函數的累計誤差分布,曲線越接近左上角越好,可以看到當NME較大時,不同損失函數的表現類似,而當NME較小時,L1的表現好于smooth_l1,好于l2;l1和smooth_l1的的不足在于當損失小于1時,梯度為常值1,而關鍵點定位一般會同時回歸多個點(AFLW對應68個關鍵點),此時當某個點的誤差較大時候,将主導模型訓練,由此作者提出WingLoss解決這一問題。
WingLoss表達式如下,可以看到當誤差較小時,使用了In(x),對應梯度為1/x,随着NME的減小,梯度增大;當誤差較大時,類似于l1損失,因為l2損失對離群點敏感。
一個好的關鍵點定位模型應該對不同姿态人臉魯邦,模型對大姿态人臉效果差的一個原因在于訓練樣本不均衡,作者提出PBD(pose-based data balancing)政策在訓練中擴增大姿态樣本。
作者提出兩階段的cascade回歸模型,使用第一階段的輸出矯正輸入圖像,然後輸入第二階段模型,降低了第二階段模型的學習難度。
關鍵點應用中的一個核心問題是抖動,因為訓練資料标注中存在噪聲&訓練資料不足。
Supervision-by-Registration: An Unsupervised Approach to Improve the Precision of Facial Landmark Detectors[2]:
這個工作使用無監督的方法緩解關鍵點抖動問題,如下圖所示,在訓練中引入unlabeled videos,基于第k幀的關鍵點結果使用LK跟蹤算法預測第(k+1)幀的結果,然後和網絡輸出的第(k+1)幀結果做loss,監督訓練。這個方法的優勢在于:1、不需要額外的視訊标注資料;2、相比各種後處理平滑算法,定位結果更穩定。
人臉檢測&關鍵點定位系統一般來說人臉檢測複雜度遠高于關鍵點定位,是以實際應用中考慮到效率問題,會将兩者整合為一個系統,減小檢測算法調用,降低系統計算複雜度,具體來說:
設定每間隔T幀(如10幀)執行檢測算法,将目前幀每一個檢測到的人臉送入關鍵點模型,輸出關鍵點結果,然後pad關鍵點結果預測人臉下一幀位置,繼續調用關鍵點模型。這裡相當于簡化了人臉框跟蹤流程,直接使用關鍵點結果進行了預測,需要注意以下問題:
- 預測框不準:當人臉快速移動時,使用關鍵點預測的人臉框存在偏差,是以一般會在關鍵點定位模型上多添加一個分支,判斷預測的人臉框是否準确,當置信度低于設定門檻值時,重新調用檢測算法。
三、人臉識别
人臉識别系統目前在業界有廣泛應用,一般來說包含兩個主要部分:
- 離線建庫:提取待識别人臉特征,注冊進目标資料庫
- 線上搜尋:對于給定待識别人臉圖檔,提取其中人臉特征,和庫中特征計算相似性(cosine距離),若大于設定門檻值,則識别成功,否則使用下幀圖像繼續識别。這裡如何設定門檻值是一個重要問題,需要根據特定應用場景,權衡準确率和召回率,門檻值設定的低,召回率高但準确率低,門檻值設定的高,召回率低但準确率高。
可以看到核心是提取人臉特征,包含以下步驟:
- 人臉檢測:考慮到人臉對齊需要5個五官關鍵點,一般使用MTCNN人臉檢測算法
- 品質評估:一般包括分辨率、清晰度、姿态和亮度,因為人臉識别對準确率有極高要求,即即使識别不出來,也不能識别錯誤,是以對輸入特征抽取網絡的人臉圖檔品質需要使用上面四個名額把關
- 人臉對齊:使用相似性變換,将1中檢測得到的關鍵點對齊到目标點,降低識别網絡學習難度
- 特征抽取:人臉識别核心子產品,提取人臉特征向量
下面介紹下可部署于移動端的MobileFaceNet,用來提取對齊後人臉特征。
MobileFaceNets: Efficient CNNs for Accurate RealTime Face Verification on Mobile Devices[3]
這個工作修改通用分類模型(MobileNetV2),用于人臉識别。
分類模型輸入分辨率一般
,下采樣32倍,最終輸出
大小的特征圖,然後連接配接global average pooling提取全局特征用于分類,本文進行了如下改進:
- 對7x7大小的特征圖,其中每一個cell對最終可靠識别的重要性不同,一般情況下中間的cell相比邊緣處cell更為重要,對對齊輸入的人臉更是如此,是以直接采用global average/max pooling是不合适的,每個cell的重要性應該是可學習的,由此作者提出使用global depthwise卷積學習每一個cell的重要性,卷積核的大小和輸入特征圖分辨率相同,采用depthwise卷積是為了降低計算複雜度。
- 損失函數采用經典的arcface損失。
人臉識别模型訓練中的一個核心問題是設計好的損失函數,盡可能最小化類内距離,最大化類間距離。下面介紹從分類softmax損失到arcface損失的演進。
softmax損失:常用于分類模型,本質是使用softmax函數将網絡最後一層輸出轉化為機率分布,然後輸入cross-entropy損失函數用于訓練。需要注意softmax函數作用到網絡原始輸出可能導緻溢出,是以一般會将網絡輸出每一個元素減去向量中的maximum,然後再輸入到softmax函數。
ArcFace損失:softmax損失的不足在于未顯式限制同類距離近,異類距離遠,arcface對softmax損失改進實作了這一點。
四、參考文獻:
[1]. Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural
[2]. Supervision-by-Registration: An Unsupervised Approach to Improve the Precision of Facial Landmark Detectors
[3]. MobileFaceNets: Efficient CNNs for Accurate RealTime Face Verification on Mobile Devices