人臉定位演算法的實際應用總結

2021-10-06 19:34:24 字數 3340 閱讀 1175

文章整理:加公尺谷大資料

人臉關鍵點定位演算法 (facial landmark detection) 是指在 2d 人臉上定位出一些具有特殊語意資訊的點,例如鼻尖、眉毛、嘴角等,如圖 1 所示。人臉關鍵點定位演算法並不是一項單一的任務,而是作為眾多高階人臉分析任務的基礎,這些高階人臉任務主要有人臉識別、3d 人臉重建、人臉表情遷移、人臉美化等。因此,人臉關鍵點定位的精度將於嚴重影響後續任務的精度。

圖 1 人臉關鍵點定位

一般來說,基於深度學習的人臉關鍵點定位又可以分為基於座標回歸的方法和基於熱圖回歸的方法。總的來說,基於座標回歸的方法速度快、計算量小,但是精度不如基於熱圖回歸的方法高;然而,基於熱圖回歸的方法更側重於結果的精度,但是模型體積較大、速度較慢。對於實際應用場景來說,按照任務要求的不同(如速度、精度以及運算效率等),選擇不同型別的方法。接下來,文章將先對人臉關鍵點定位演算法在實際使用中所面臨的問題進行簡要分析,然後按照不同型別的方法,對該領域的實踐經驗進行介紹。

一、 人臉關鍵點定位演算法所面臨的一些挑戰

1.1 輸入具有很強的特異性

在實際使用場景中,如人臉美妝、人臉識別等,模型輸入的本身具有極強的特異性,例如極端的光照環境、誇張的表情、大角度的姿態、抖動所產生的模糊等。如圖 2 所示,對這些進行精確地人臉關鍵點定位非常困難。

圖 2 一些極端姿態的人臉

1.2 訓練資料的不平衡

目前,公開的人臉關鍵點定位資料庫都存在資料不平衡這一問題,既:正臉的的總數要遠多於側臉的總數,而大角度側臉的訓練更少。使用這種資料集訓練出的人臉關鍵點定位演算法,在評測資料集上可以獲得非常高得精度,但是在實際使用中,有可能因為頭部的輕微偏轉,導致模型的精度嚴重下降。

1.3 模型執行效率

目前,人臉關鍵點定位任務在學術界和工業界所最求的目標並不完全相同。在學術界中,科研人員更加關注模型最終輸出的結果在各種評測集上是否達到了最優,其次才是模型的參數量和執行效率等問題;然而,在工業界中,工程師們在一定的誤差範圍內,追求模型更小的體積以及更快的執行效率。這一問題致使高精度的人臉關鍵點定位模型很難直接應用到實際的任務之中。

二、 人臉關鍵點定位演算法經驗總結:

我們這一篇文章,主要將集中在演算法在實際使用場景中的調優問題,將主要圍繞在壓縮模型體積的情況下,儘量減少定位精度的損失。下面將分別對基於座標回歸的方法和基於熱圖回歸的方法在實際專案中的一些經驗和總結分別進行描述和討論。

2.1 基於座標回歸的人臉關鍵點定位演算法調優

基於座標回歸的人臉關鍵點演算法速度快,但是定位精度略差於基於熱圖回歸的方法。這種方法比較適宜用於對實時性要求較高、但對定位精度要求相對不高的任務中(如人臉識別、情緒判斷、頭部姿態估計等)。基於座標回歸的演算法在我們的實際專案中,可以做到模型體積小於 200kb,速度到達 1500fps ,同時在精度上仍然可以達到要求。下面介紹常用的調優方法:

2.1.1 設計輕量化的模型

在我們實際經驗中,使用精心設計和調參的小模型在一定的情況下,精度完全可以超過使用了特徵提取能力更強的大模型;常用的輕量化特徵提取網路如 shufflenet、mobilenet 等,但是這些模型的體積對於邊緣計算裝置(智慧型手機、機械人等)仍然較大,模型的參數量和計算量如表 1 所示。此外,這種為影象分類設計的網路,直接應用到人臉關鍵點定位任務中並不是一種好的策略。為此,我們設計了一種專門用來進行人臉關鍵點定位的一種輕量化模型,表 2 是模型的基本結構。其中 convdw 代表深度可分離卷積,convdw* 表示在該層對輸入的 feature map 進行降取樣。

我們使用 mse loss 作為優化函式,在 300w 資料集上進行訓練和測試,獲得結果如表 3 所示。從表中我們可以看出,使用我們專門設計的人臉關鍵點定位模型可以在極小的模型參數量和計算量中,獲得更好地結果。

2.1.2 使用恰當的損失函式

對於基於座標回歸的人臉關鍵點定位演算法,loss 函式也是一項至關重要的優化項。在 wing-cnn 文章之前,大部分基於座標回歸的演算法都是使用 mse loss 作為損失函式,但是 mse loss 非常容易受到異常值的影響,通俗的來講,mse loss 有可能因為幾個極端的異常資料而陷入區域性極值中,導致模型收斂較差。因為人臉關鍵點定位的標註資料本身就存在一定的誤差,因此標註資料中存在異常值(或錯誤值)的可能性比目標檢測、影象分類等視覺任務更大。問了解決這一問題,wing-cnn 中提出使用 wing loss 來緩解模型對異常值的敏感程度。在表 4 中,我們對比了使用我們設計的小模型作為 backbone 分別使用 mse loss 和 wing loss 作為損失函式在 300w-fullset 上的測試結果。從表中,我們可以看出使用 wing loss 可以明顯的提公升模型的結果精度。

2.1.2 使用多階段模型去提公升人臉關鍵點定位效能

訓練多階段人臉關鍵點定位模型,首先使用乙個非常淺層的關鍵點定位模型(model-i)去進行 5 點定位,之後通過 5 點對人臉進行校正,然後再使用乙個相對較大的模型(model-ii)進行正常的人臉關鍵點定位(如 68 點、106 點等)。圖 3 表示多階段的人臉定位模型訓練的基本過程。

圖 3 多階段人臉關鍵點訓練過程

在模型訓練階段,為了節約計算量,molde-i 可以使用較小尺寸的輸入(如 64x64),使用更加激烈的資料增廣方法例如更大的旋轉角、更強的邊框擾動;在訓練 model-ii 過程中,輸入經過 model-i 處理後轉正的,此時的的輸入尺寸、增廣方式都按照正常訓練方式進行。依據我們多次相關型別專案經驗,多階段定位模型可以獲得與基於熱圖回歸方法相互匹敵的結果,並且模型的運算速度快、系統開銷少。因為 model-i 的模型非常小,而且輸入的尺寸也非常小,所以基本不會對模型速度和執行開銷產生影響。

2.2 基於熱圖回歸的人臉管家點定位演算法模型調優

2.3 訓練資料方面的調優

2.3.1 使用對抗生成網路(gan)進行資料增廣

圖 4 背景對關鍵點定位結果導致的影響

對於這一問題,我們主要是通過 gan 來替換的背景,完成訓練的大規模增廣。圖 5 是我們在 300w 資料集上進行的資料增廣實驗結果。實際專案經驗顯示,使用 gan 進行資料增廣訓練的人臉關鍵點定位模型無論是在定位精度還是在穩定性上都遠好於未使用資料增廣訓練的模型。

圖 5 使用 gan 進行資料增廣的結果

2.3.2 通過頭部姿態來進行資料增廣

對於常用的人臉關鍵點定位資料庫包括 300w、aflw、cofw 以及 wflw 等,這些資料庫中的正面人臉都遠多於側面的人臉。為了讓訓練資料中正臉和側臉數量大致相等,我們可以通過給定的人臉關鍵點座標等來計算出人臉的朝向(patch、yaw、roll),通過對人臉朝向的角度區間進行分類,然後手動複製那些姿態較少的資料,使各個區間中人臉的數量基本保持一致。與 gan 背景轉換方法相比,這種方法不需要訓練對抗生成網路,因此也更加常用。

在本篇文章中,我們首先介紹了人臉關鍵點定位模型在實際使用時所面臨的一些問題,然後分別從基於座標回歸的方法、基於熱圖回歸的方法以及資料增廣這三個角度,介紹了一些我們在專案中所總結的演算法調優的經驗和方法。希望這些方法和總結可以促進人臉關鍵點定位技術的發展和進步。

人臉演算法應用總結

人臉檢測 人臉跟蹤 人臉識別 遇到問題 早期演算法無法識別活體,如果鏡頭中有玻璃反射出的人臉以及書籍上的人臉 等無意義的人臉都會被檢測到,浪費了一定效能,當前演算法應該大部分支援活體檢測。實現原理 早期人臉跟蹤演算法是通過人臉移動軌跡來區分的個體,並不是通過人臉特徵值,非常可能是演算法效能不夠,做不...

鏈棧的實際應用(總結)

1 表示式求值在計算機中進行算術表示式的計算是通過棧來實現的。1 算術表示式的三種表示 中綴 雙目運算子出現在兩個運算元中間,例 a b 字首 雙目運算子出現在兩個運算元前面,例 ab 字尾 雙目運算子出現在兩個運算元後面,例 ab 2 三種表示式之間的轉換 按運算的優先次序全部加上括號,逐個括號寫...

深度學習應用 人臉特徵定位

cnn歸根到底也是乙個神經網路。從神經網路的角度來講,分類也好 也好,單一的網路有時正確率較低,採用級聯方式用多個神經網路綜合結果。深度學習應用當然也可以用級聯cnn。這裡就有乙個例子。博主講解了2013年cvpr的一篇利用深度學習做人臉特徵點定位的經典 deep convolutional net...