PFLD:簡單、快速、超高精度人臉特徵點檢測演算法

AI科技大本營發表於2019-03-03

640?wx_fmt=png

 

作者 | 周強(CV君)

來源 | 我愛計算機視覺(公眾號id:aicvml)

60s測試:你是否適合轉型人工智慧?

https://edu.csdn.net/topic/ai30?utm_source=cxrs_bw

 

什麼樣的演算法才是好演算法?

真正能實用的演算法才是最好的演算法!

這需要實現三個目標:精度高、速度快、模型小!

 

近期,arXiv新發布的文章《PFLD: A Practical Facial Landmark Detector》,則是實用人臉特徵點檢測演算法的典範。

 

640?wx_fmt=png

 

PFLD演算法,目前主流資料集上達到最高精度、ARM安卓機140fps,模型大小僅2.1M!

 

這篇新出的論文,必將成為人臉特徵點檢測領域的重要文獻,今天我們就一起來探究一下,PFLD演算法到底有什麼黑科技。

 

作者資訊:

640?wx_fmt=png

作者分別來自天津大學、武漢大學、騰訊AI實驗室、美國天普大學。

感謝各位大牛!

 

人臉特徵點檢測的挑戰

 

作者首先從演算法實用性角度討論了人臉特徵點檢測問題的面臨的挑戰。

 

  • Challenge #1 - Local Variation

 

人臉表情變化很大,真實環境光照複雜,而且現實中大量存在人臉區域性被遮擋的情況等。

 

  • Challenge #2 - Global Variation

 

人臉是 3D 的,位姿變化多樣,另外因拍攝裝置和環境影響,成像質量也有好有壞。

 

  • Challenge #3 - Data Imbalance

 

現有訓練樣本各個類別存在不平衡的問題。

 

  • Challenge #4 - Model Efficiency

 

在計算受限的裝置比如手機終端,必須要考慮計算速度和模型檔案大小問題。

 

演算法思想

 

作者使用的網路結構如下:

 

640?wx_fmt=png

 

其中,

黃色曲線包圍的是主網路,用於預測特徵點的位置;

綠色曲線包圍的部分為輔網路,在訓練時預測人臉姿態(有文獻表明給網路加這個輔助任務可以提高定位精度,具體參考原論文),這部分在測試時不需要。

 

作者主要用兩種方法,解決上述問題。

 

對於上述影響精度的挑戰,修改loss函式在訓練時關注那些稀有樣本,而提高計算速度和減小模型size則是使用輕量級模型。

 

  • Loss函式設計

 

Loss函式用於神經網路在每次訓練時預測的形狀和標註形狀的誤差。

 

考慮到樣本的不平衡,作者希望能對那些稀有樣本賦予更高的權重,這種加權的Loss函式被表達為:

 

640?wx_fmt=png

 

M為樣本個數,N為特徵點個數,Yn為不同的權重,|| * ||為特徵點的距離度量(L1或L2距離)。(以Y代替公式裡的希臘字母)

 

進一步細化Yn:

 

640?wx_fmt=png

 

其中

 

640?wx_fmt=png

 

即為最終的樣本權重。

 

K=3,這一項代表著人臉姿態的三個維度,即yaw, pitch, roll 角度,可見角度越高,權重越大。

 

C為不同的人臉類別數,作者將人臉分成多個類別,比如側臉、正臉、抬頭、低頭、表情、遮擋等,w為與類別對應的給定權重,如果某類別樣本少則給定權重大。

 

  • 主網路

 

作者使用輕量級的MobileNet,其引數如下:

 

640?wx_fmt=png

 

  • 輔網路

 

引數如下:

640?wx_fmt=png

 

實驗結果

 

作者在主流人臉特徵點資料集300W,AFLW上測試了精度,儘管看起來上述模型很簡單,但超過了以往文獻的最高精度!

 

下圖是在300W上的CED,完美將其他演算法的曲線壓在下面。

 

640?wx_fmt=png

 

下圖為在300W資料集上不同評價標準IPN\IOP精度比較結果,依然是最棒的。

 

640?wx_fmt=png

 

其中PFLD 1X是標準網路,PFLD 0.25X是MobileNet blocks width 引數設為0.25的壓縮網路,PFLD 1X+是在WFLW資料集上預訓練的網路。

 

值得一提的是表格中LAB演算法,是CVPR2018上出現的優秀演算法,之前一直是state-of-the-art。感興趣的朋友可以參考52CV當時的報導:重磅!清華&商湯開源CVPR2018超高精度人臉對齊演算法LAB 。

 

下圖是該演算法在AFLW資料集上與其他演算法的精度比較:

 

640?wx_fmt=png

 

同樣是達到了新高度!

 

下面來看一下演算法處理速度和模型大小,圖中C代表i7-6700K CPU,G代表080 Ti GPU,G*代表Titan X GPU,A代表移動平臺Qualcomm ARM 845處理器。

 

640?wx_fmt=png

 

PFDL同樣是異乎優秀!與精度差別很小的LAB演算法相比,CPU上的速度提高了2000倍!

 

下面是一些特徵點檢測示例,儘管很多樣本難度很大,但PFLD依然給出了可以接受的結果。

 

640?wx_fmt=png

640?wx_fmt=png

 

作者沒有開原始碼,但給出了Android應用 APK 和Android工程(演算法封裝在bin檔案裡)。

 

這個演算法實在是太吸引人了,你是不是也想試一下呢?

論文作者給的網址:

https://sites.google.com/view/xjguo/fld

 

可惜國內不能下載,不過不用擔心,(本文作者)已經把它搬到百度雲了

 

連結:

https://pan.baidu.com/s/16HjDy9TyotCVwDdd55oWVQ 

提取碼:glwr

 

作者也下載了APK試用,表示好像沒看到效果,不知是不是手機相容性有問題。提醒一下,論文作者宣告,該工程僅可用於研究比較,如需商業使用需要聯絡作者獲得授權。

 

論文地址:

https://arxiv.org/pdf/1902.10859.pdf

 

PFLD演算法看起來簡單,但精度卻很高,這無疑來自作者設計的Loss函式很好的處理了樣本類別不平衡的問題,你覺得還有更好的處理方法嗎?歡迎留言。

 

 

(本文為AI科技大本營轉載文章,轉載請聯絡作者)

 

人工智慧的現狀及今後發展趨勢如何? 

https://edu.csdn.net/topic/ai30?utm_source=csdn_bw

 

群招募

 

掃碼新增小助手微信,回覆:公司+研究方向(學校+研究方向),邀你加入技術交流群。技術群稽核較嚴,敬請諒解。

640?wx_fmt=jpeg

推薦閱讀:

 

                         640?wx_fmt=png

❤點選“閱讀原文”,檢視歷史精彩文章。

相關文章