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%,没差。

你可能感兴趣的:(深度学习,人脸识别,VGG)