【人臉關鍵點檢測】

人臉關鍵點通常是基層的CNN然後連接FCN進行迴歸,這裏計劃將FCN改爲全局加權平均池化來處理,意思說是卷積核的尺寸與輸入map的尺寸相同,即K=H=W,則輸出map爲C∗1∗1即長度爲CC的向量,此時稱之爲Global Depthwise Convolution(GDC),見MobileFaceNet,可以看成是全局加權池化,與 Global Average Pooling(GAP) 的不同之處在於,GDC 給每個位置賦予了可學習的權重(對於已對齊的圖像這很有效,比如人臉,中心位置和邊界位置的權重自然應該不同),而GAP每個位置的權重相同,全局取個平均,如圖:

https://www.pianshen.com/article/76591199542/

替代FCN的好處:

全連接層的缺點
全連接層有一個非常致命的弱點就是參數量過大,特別是與最後一個卷積層相連的全連接層。一方面增加了Training以及testing的計算量,降低了速度;另外一方面參數量過大容易過擬合。雖然使用了類似dropout等手段去處理,但是畢竟dropout是hyper-parameter, 不夠優美也不好實踐。

GAP(Global Average Pooling)可以取代全連接層

我們要明確以下,全連接層將卷積層展開成向量之後不還是要針對每個feature map進行分類嗎,GAP的思路就是將上述兩個過程合二爲一,一起做了。如圖所示:

 

上面操作不禁讓我想到採用深度可分離卷積來進行處理, 這篇文章居然已經用了該思路!https://blog.csdn.net/u011995719/article/details/79435615

大致在回想下深度可分離卷積原理:用單層卷積核分別和通道特徵圖分別卷積,如果卷積核尺寸和特徵圖尺寸相同,則每個通道生成一個值,這個值作爲關鍵點的一個座標即可;

下圖是常規CNN和深度可分類CNN示意圖:https://blog.csdn.net/tintinetmilou/article/details/81607721

本次採用keras框架進行處理,我們看下keras的深度可分離卷積DepthwiseConv2D:

https://blog.csdn.net/c_chuxin/article/details/88581411

keras.layers.DepthwiseConv2D(kernel_size, strides=(1, 1), padding='valid', depth_multiplier=1, data_format=None, activation=None, use_bias=True, depthwise_initializer='glorot_uniform', bias_initializer='zeros', depthwise_regularizer=None, bias_regularizer=None, activity_regularizer=None, depthwise_constraint=None, bias_constraint=None)

理論思考完畢;實踐馬上到來:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章