1. 程式人生 > >VGG人臉識別訓練心得

VGG人臉識別訓練心得

  20170929進行更新:將程式碼傳至github上。網址:https://github.com/KaiJin1995/MTCNN-VGG-face。

該網路可以直接進行人臉檢測、識別以及陌生人報警。構成安全防盜系統。

----------------------------------------------------------------------

在使用VGG進行人臉訓練過程中,我是用log日誌記錄了訓練過程中的資料。訓練過程中的引數對於訓練而言,有著較大的影響,引數設定不當,(1)容易出現訓練結束,但未收斂到最佳狀態。(2)早就收斂,迭代次數過多,浪費時間。

        本篇部落格主要講述我在使用VGG訓練人臉的過程中,迭代次數對於訓練效果的影響。以及,對LFW測試集準確率的影響。

        首先,採取VGG11訓練網路,將VGG11訓練網路後得到的caffemodel送至VGG16進行fintune。

        訓練結束後,我們提取VGG的fc7的值作為特徵向量。通過比較特徵向量之間的距離,我們可以衡量兩個不同人臉之間的差距。

一、VGG11網路訓練。

VGG11初始值為高斯。訓練採用VGG11,

                                表1.1 VGG迭代10萬次訓練情況

Learning rate iteration       Loss Accuracy
0.025 2W 9->6 0.08
0.0025 2W 6->3 0.447625
0.00025 2W 3->2 0.554812
0.000025 2W 不變 0.57
0.0000025 2W 不變 0.575625
上表1.1在訓練時,得到的驗證準確率並不高,這是由於訓練不充分導致的。而0.025不能迭代次數過多,不然發散。在10W次的caffemodel上進行finetune,lr=0.0025上迭代,如表1.2

                           表1.2 VGG finetune表格

Learning rate iteration  Loss Accuracy
0.025 2W 1.97348 0.604312
0.0025 5W 1.76364 0.709125
0.0025 5W 1.79849 0.73
0.00025 5W 1.52852 0.804875
0.000025 5W 1.52191 0.8115

在lr=0.0025迭代2W仍有上升空間,故再迭代5W+5W時,發現準確率不再上升,故將準確率再下降訓練。

再用lr=0.00025迭代5W次,到0.80,穩定下來。再用0.000025迭代5W次,發現僅僅只有很少的提升,到81%

故用此caffemodel在LFW資料集上進行測試。當採用L2Norm+euclidean時,準確率0.903+-0.013。當採用L2Norm+cosine時,90.5+-0.012。當非L2Norm+cos時:90.5+-0.012。 非L2Norm+euclidean:0.5(因為不歸一化,數字太大,均超過閾值)。

底部是我的readme寫的

(第一次初始值設為0.025時,迭代兩萬次,降到0.0025,迭代10W次。得到caffemodel,發現準確率偏低,發現由於0.025時準確率還在上升時,lr便降了一個數量級
故使用10W次的caffemodel進行finetune,使用lr=0.025進行finetune。迭代了2W次,發現在0.0025仍有上升空間,於是,又在此基礎上迭代了5萬次,發現準確率還有上升空間。
於是又用5W次的caffemodel再迭代5W次,發現準確率不再上升。
故降低準確率,0.00025,迭代5萬次,準確率穩定在80%不再上升。再根據此降低準確率。準確率降低十倍,發現穩定在81%難以提升。
選擇此model測試,使用L2+euclidean,得到0.903+-0.013。L2+cos:90.5+-0.012   非L2+cos:90.5+-0.012   非L2+euclidean:0.5(因為不歸一化,數字太大,均超過閾值)。


注:cos距離不需要歸一化,因為僅僅時兩個向量之間的夾角

由於fc7的4096維向量過多,於是我們採用PCA 進行降維,降至500維,測試得到準確率92%+-0.013。

另外,當使用fc6測試時,得到準確率92.2%+-0.012。但並非說用fc6一定好,當用vgg16時,發現有一個百分點的下降。

當我用VGGFace官方團隊給的caffemodel進行測試時,得到的準確率是96.4+-0.009(cos距離),而歐式距離與cos距離相近,不會有0.2個百分點以上的提升。


二、VGG16網路finetune

 vgg16其餘層使用高斯

Learning rate iteration       Loss Accuracy
0.025 2W5 2.78113 0.527562
0.0025 5W 1.96276 0.67425
0.00025 2W5 1.38997 0.7915
0.00025 1W5 1.38345 0.798813
2.5e-05 1W7 1.38007 0.800625
Readme所寫:

首先採用5000次0.025的lr進行學習,在到25000次下降十倍,發現Acc仍然還具備上升空間,故在25000次使用caffemodel重新訓練,訓練5W次0.0025,發現收斂,得到100000次的caffemodel 0.00025短暫看來也沒提升,僅固定在80%動不了。為了進一步觀測,再用0.00025訓練幾萬次,觀測收斂情況,
發現未收斂到最優,則陷入區域性的極小值,得到6W的caffemodel
為了擺脫區域性極小值,採用0.025訓練6W次的資料,觀測情況,Loss越來越高,直至發散
故再嘗試0.0025,發現跟之前相似,均收斂到70%不下降
故再降低準確率0.00025,再次測試,再次在80%處停止住。準確率不易上升。降低至0.000025,穩定在80%+,接近於81%的位置。
最終再降低。
用LFW測試,得到92.0%+-0.009。

三、center loss的訓練

由於對此效果不滿意,故選用center loss在原有基礎上訓練。

使用0.0025訓練,同時centerloss的學習率與之對應。lose_weight=0.008,但是在0.00025時便恆定在73%。vgg_10575_train.log_1。得到/home/free/caffe-face/face_example/vgg_CenterLoss/vgg_10575_iter_50000_1.caffemodel
故增大centerloss的學習率,lr_mult為2000.在之前caffemodel的基礎上繼續訓練。發現centerloss相比於之前,增加了一些,到達76%。故降低學習率,lr_mult為200,再繼續訓練。學習率從0.00025開始,發現並沒太大的變化。放棄。
從0.0025開始,lose_weight=0.003,繼續觀測。發現收斂到80%附近,訓練完成達到82%的準確率。

而0.0025仍有上升空間,故選用此lr繼續訓練,並不斷下降準確率,最終得到84%的準確率。

對此,可以列表格如下:

Learning Rate iteration loss accuracy loss_weight center lr_mult
0.0025 36000 3.5 74%左右 0.008 1
0.00025 44000 3 76% 0.008 2000
0.0025(期間有下降到0.00025) 41000 2附近 82.4% 0.003 200
0.0025 6000 2.5附近 80% 0.003 200
0.00025 30000 1.2 83% 0.003 200
0.000025 10000 1.2 84% 0.003 200

小結:對於訓練而言,要掌握好訓練的技巧。不要設定的迭代次數過多,也不要過少。過多浪費時間,過少,可能驗證準確率少一個百分點。

由於資料量過少,只有50W張人臉圖,跟VGGFACE官方團隊的200萬相比,還是過少。而50萬張的小資料集對於VGGface團隊也只是做到92%,沒差。