乙個實用價值很大的人臉關鍵點檢測演算法PFLD

2021-10-06 23:49:03 字數 2260 閱讀 3248

人臉關鍵點檢測作為人臉相關應用中的乙個基礎任務面臨了很多挑戰,包括檢測精度,處理速度,模型大小這些因素都要考慮到,並且在現實場景中很難獲取到質量非常高的人臉,所以人臉關鍵點檢測主要面臨下面幾個挑戰:

總的來說,本文設計的pfld在複雜情況下也可以保持高精度。針對全域性變化,pfld採用輔助網路來估計人臉樣本的集合資訊。針對資料不平衡,設計新的損失函式,加大對難樣本的懲罰力度。使用multi-scale fc層擴充套件感受野精確定位人臉的特徵點。使用mobilenet block構建網路的backbone提公升模型的推理速度及減少模型的計算量。

pfld的網路結構如下圖所示:

其中黃色虛線圈起來的部分表示主分支網路,用於**關鍵的位置。綠色虛線圈起來的是head pose輔助網路。這樣在訓練關鍵點回歸的同時**人臉姿態,從而修改損失函式,使得模型更加關注那些稀有以及姿態角度過大的樣本,從而提高**的精度。

可以看到在主分支網路中,pfld並沒有採用vgg16,resnet50等大模型。但為了增強模型的表達能力,對mobilenetv2的輸出特徵進行了結構上的修改,如figure2中主分支網路的右邊所示。pfld融合了3個尺度的特徵來增加模型的表達能力。

我們知道一般的回歸損失是mse或者smooth l1 loss,但它們都難以應對資料不均衡的情況,以mse loss為例,損失函式可以寫成:

其中m

mm表示人臉樣本的數量,n

nn表示每張人臉預設的需要檢測的特徵點數目,∣∣.

∣∣||.||

∣∣.∣

∣在本文表示l2距離,γ

n\gamma_n

γn​表示不同型別樣本的不同權重。

而retinanet中提出的focal loss可以較好的應對二分類中的資料不均衡情況,受到這一啟發,作者設計了下面的損失函式來緩解資料不均衡的情況:

pfld在訓練過程中引入了乙個輔助網路用以監督pfld網路模型的訓練,如figure2中綠色虛線裡的部分。該子網路僅在訓練的階段起作用,在推理階段不起作用。

該子網路對每乙個輸入的人臉樣本進行三維尤拉角估計,它的ground truth由訓練資料中的關鍵點資訊進行估計,雖然估計不太精確,但是作為區分資料分布的依據已經足夠了,因為這個輔助網路的目的是監督和輔助關鍵點檢測主分支。另外需要注意的一點是,這個輔助網路的輸入不是訓練資料,而是pfld主分支網路的中間輸出(第4個block)。

主分支網路和輔助網路的詳細配置表如下:

下面的figure3展示了在300w資料集上pfld和其它一些經典演算法的ced曲線對比:

下面的table3展示了pfld在各個平台上的效能表現:

下面的table4展示了不同的評價標準和不同的資料子集的評價指標:

table5還展示了fpld在aflw資料集上的表現:

最後figure4還展示了一些在具有挑戰性的樣本上的表現:

總的來說fpld是乙個idea非常好並且實用價值比較大的人臉關鍵點檢測演算法,無論是人臉姿態估計子網路的引入還是針對資料不平衡重新設計損失函式都是值得借鑑的。

歡迎關注giantpandacv, 在這裡你將看到獨家的深度學習分享,堅持原創,每天分享我們學習到的新鮮知識。( • ̀ω•́ )✧

乙個OpenCV實現的人臉檢測的原始碼

直接在qt pro檔案裡面加上 config release,debug release config debug,debug release 我這麼寫是因為我的計算機是64位的。實驗原始碼如下 include mainwindow.h include include include include...

php使用face 實現乙個簡單的人臉識別系統

檔案目錄 乙個簡單的目錄遞迴函式 第一種實現辦法 用dir返回物件 function tree directory 開始執行 echo n tree d ar 第二種實現辦法 用readdir 函式 function listdir dir,names,img urls else closedir ...

我是乙個內向的人,也是乙個不善交際的人

有讀者讀了我的文章以後說 劉老師,你在生活中肯定是個風趣幽默的人,要不然寫不出這些有趣的技術故事。很遺憾,我並不是乙個這樣的人,相反,在生活中我是內向的人,也是個嚴肅的人。可是就是由於生活中比較嚴肅,所以文章反而變成了乙個宣洩口,讓我可以把枯燥無味的技術世界變得有趣一些。作為內向的人,我也不太喜歡交...