吳恩達深度學習筆記(93)-目標檢測之特徵點檢測

特徵點檢測(Landmark detection)

上節課,我們講了如何利用神經網絡進行對象定位,即通過輸出四個參數值b_x、b_y、b_h和b_w給出圖片中對象的邊界框。更概括地說,神經網絡可以通過輸出圖片上特徵點的(x,y)座標來實現對目標特徵的識別,我們看幾個例子。

吳恩達深度學習筆記(93)-目標檢測之特徵點檢測

假設你正在構建一個人臉識別應用,出於某種原因,你希望算法可以給出眼角的具體位置

眼角座標為(x,y),你可以讓神經網絡的最後一層多輸出兩個數字l_x和l_y,作為眼角的座標值。如果你想知道兩隻眼睛的四個眼角的具體位置,那麼從左到右,依次用四個特徵點來表示這四個眼角。對神經網絡稍做些修改,輸出第一個特徵點(l_1x,l_1y),第二個特徵點(l_2x,l_2y),依此類推,這四個臉部特徵點的位置就可以通過神經網絡輸出了。

吳恩達深度學習筆記(93)-目標檢測之特徵點檢測

(注:圖中的模特是恩達老師的夫人Carol Reiley)

也許除了這四個特徵點,你還想得到更多的特徵點輸出值,這些(圖中眼眶上的紅色特徵點)都是眼睛的特徵點,你還可以根據嘴部的關鍵點輸出值來確定嘴的形狀,從而判斷人物是在微笑還是皺眉,也可以提取鼻子周圍的關鍵特徵點。

為了便於說明,你可以設定特徵點的個數,假設臉部有64個特徵點,有些點甚至可以幫助你定義臉部輪廓或下頜輪廓。選定特徵點個數,並生成包含這些特徵點的標籤訓練集,然後利用神經網絡輸出臉部關鍵特徵點的位置。

具體做法是,準備一個卷積網絡和一些特徵集,將人臉圖片輸入卷積網絡,輸出1或0,

1表示有人臉,0表示沒有人臉,

然後輸出(l_1x,l_1y)……直到(l_64x,l_64y)。這裡我用l代表一個特徵,這裡有129個輸出單元,其中1表示圖片中有人臉,因為有64個特徵,64×2=128,所以最終輸出128+1=129個單元,由此實現對圖片的人臉檢測和定位。

這只是一個識別臉部表情的基本構造模塊,如果你玩過Snapchat或其它娛樂類應用,你應該對AR(增強現實)過濾器多少有些瞭解,Snapchat過濾器實現了在臉上畫皇冠和其他一些特殊效果。

檢測臉部特徵也是計算機圖形效果的一個關鍵構造模塊,比如實現臉部扭曲,頭戴皇冠等等。當然為了構建這樣的網絡,你需要準備一個標籤訓練集,也就是圖片x和標籤y的集合,這些點都是人為辛苦標註的。

吳恩達深度學習筆記(93)-目標檢測之特徵點檢測

最後一個例子,如果你對人體姿態檢測感興趣,你還可以定義一些關鍵特徵點,如胸部的中點,左肩,左肘,腰等等。然後通過神經網絡標註人物姿態的關鍵特徵點,再輸出這些標註過的特徵點,就相當於輸出了人物的姿態動作。當然,要實現這個功能,你需要設定這些關鍵特徵點,從胸部中心點(l_1x,l_1y)一直往下,直到(l_32x,l_32y)。

一旦瞭解如何用二維座標系定義人物姿態,操作起來就相當簡單了,批量添加輸出單元,用以輸出要識別的各個特徵點的(x,y)座標值。

要明確一點,特徵點1的特性在所有圖片中必須保持一致,就好比,特徵點1始終是右眼的外眼角,特徵點2是右眼的內眼角,特徵點3是左眼內眼角,特徵點4是左眼外眼角等等。所以標籤在所有圖片中必須保持一致,假如你僱用他人或自己標記了一個足夠大的數據集,那麼神經網絡便可以輸出上述所有特徵點,你可以利用它們實現其他有趣的效果,比如判斷人物的動作姿態,識別圖片中的人物表情等等。

以上就是特徵點檢測的內容,下節課我們將利用這些構造模塊來構建對象檢測算法。


分享到:


相關文章: