1. 程式人生 > >第一篇:基於深度學習的人臉特徵點檢測 - 背景(轉載)

第一篇:基於深度學習的人臉特徵點檢測 - 背景(轉載)

轉載自:https://yinguobing.com/facial-landmark-localization-by-deep-learning-background/

人臉檢測與識別一直是機器學習領域的一大熱點。人臉檢測是指從影象中檢測出人臉區域。人臉識別則是判斷特定的臉部影象是否與某個人對應。現實生活中人臉檢測與識別有著多種應用場合,例如iPhone X所搭載的FaceID功能,使用者只需瞄一眼手機,即可自動解鎖。

face_id_mapping_fallback_medium

有眾多方法可以實現人臉檢測,例如大名鼎鼎的Viola Jones演算法以及近幾年大熱的深度學習。如果你感興趣可以檢視這兩種方法在OpenCV中的開源實現[1]

[2]

由於在實際情況中捕捉人臉的正面圖像是比較困難的,因此在人臉檢測後通常會附加一個步驟叫做“人臉對齊”。在該過程中需要針對人臉影象中的特徵點進行檢測,標記出一些特定區域例如眉毛、眼角、嘴角等。這種特徵點檢測行為被稱為“Facial landmark localization”。人臉特徵點檢測也有眾多的開源演算法,這裡我推薦兩個。一個是Dlib[3],一個開源的C++程式碼庫。另一個是OpenFace[4],來自CMU的Tadas Baltrusaitis。

當特徵點檢測完成,我們就可以在影象中標記出人臉的具體位置,甚至可以估算出人臉的朝向姿態。下圖是我用Dlib與OpenCV的實現。完整的視訊請參考

YouTube視訊,國內請參考這裡

 

人臉姿態估算

正如你所看到的,人臉姿態的估計並不完善,在一些角度上可以看到大幅度的抖動。對原始碼進行分析後發現抖動主要是由於面部特徵點的抖動造成,尤其是位於下頜的特徵點。使用卡爾曼濾波可以在某種程度上消除抖動,但是如果要用在視訊中的話,過於強調穩定的卡爾曼濾波會使得標記點無法及時跟上移動中的面部,效果反而變得更差。

這個也很好理解,當前的方法採用了逐幀檢測的方式,每一幀在演算法看起來都是“新的”,且移動過程中的人臉影象存在微小的變化,這些變化最終體現在了特徵點位置的擾動上。要想消除擾動,一種思路是利用視訊幀與幀之間物體空間位置上的連續性,另一種思路則是提高特徵點檢測的穩健性。

所以,究竟應該採用哪一種方法呢?