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人脸识别训练心得相关推荐

  1. Combined Margin loss人脸识别训练笔记

    利用caffe第三方实现的combined margin_layer进行训练(https://github.com/gehaocool/CombinedMargin-caffe),数据集采用VGGFa ...

  2. 基于FaceNet的实时人脸识别训练

    FaceNet人脸特征提取 FaceNet是一种用于提取人脸图像特征的深度神经网络.它由谷歌研究人员 Schroff 等人提出. 论文地址:https://arxiv.org/abs/1503.038 ...

  3. 阿里云人脸识别接口--心得分享

    一:对接阿里云人脸识别接口的工具类 注意:如果你的图片已经转换为base64的编码以后参数是content_1,后面要加type请求参数,我这里是通过图片的url对比的 public class Fa ...

  4. python构建cnn图片匹配_tensorflow搭建cnn人脸识别训练+识别代码(python)

    #-*- coding: utf-8 -*- from skimage importio,transformimportglobimportosimporttensorflow as tfimport ...

  5. mxnet制作人脸识别训练集

    目录 调用数据集 生成train.lst 生成train.rec train.idx h5py还是比较方便的,推荐使用: https://blog.csdn.net/jacke121/article/ ...

  6. 训练人脸识别常见问题

    人脸识别训练难点:数据量大(类别通常都是上十万,上百万) 训练当中常见注意要点: 1.尽管训练样本量大,但是任然需要使用预训练模型,目的是加速模型收敛: 2.加载预训练模型时,最好加载在cpu上,加载 ...

  7. 京东开源人脸识别项目faceX-zoo

    简介: FaceX-Zoo是一个专为人脸识别而生的开源库,是目前准确率最高的开源人脸识别项目.FaceX-Zoo是基于PyTorch实现的.它提供了一个训练模块,其中有各种supervisory he ...

  8. 格灵深瞳:人脸识别最新进展以及工业级大规模人脸识别实践探讨 | 公开课笔记...

    作者 | 张德兵 编辑 | 阿司匹林 出品 | 人工智能头条(公众号ID:AI_Thinker) 人脸识别已经成为成为计算机视觉领域最热门的应用之一,很多刚入门的 AI 新手都或多或少接触过人脸识别的 ...

  9. 『深度应用』人脸识别最新进展及发展方向

    人脸识别最新进展及发展方向 ▌一.人脸识别背景介绍 简单来讲,人脸识别这个问题,就是给定两个人脸,然后判定他们是不是同一个人,这是它最原始的定义.它有很多应用场景,比如银行柜台.海关.手机解锁.酒店入 ...

最新文章

  1. 别再折腾开发环境了,一劳永逸的搭建方法
  2. 用 Python 在朋友圈中游遍全球
  3. 数据结构---Kruskal最小生成树
  4. 正整数 n 所有可能的和式的组合
  5. 2021年商业地产趋势洞察白皮书
  6. HDFS的读写限流方案
  7. spark 存入hbase_Spark DataFrame写入HBase的常用方式
  8. eclipse中汉字对齐错误
  9. css字体居中(css字体居中对齐)
  10. 训练loss不下降原因总结
  11. 第二代蜂窝移动通信系统概述
  12. 基于C# winform实现随机点名小工具(支持csv导入)
  13. python123货币转换器_python货币转换
  14. 从校园人到职业人的转变
  15. C#秘密武器之多线程——参数与返回值
  16. 菜鸟温习python爬虫
  17. 微信小程序之左右布局
  18. clock constrain
  19. php试卷系统制作_php题库系统与试卷生成系统
  20. linux安装nginx详细步骤和make编译报错问题(保姆级)

热门文章

  1. 计算机蓝屏显示的英文是什么,电脑蓝屏时会出现一堆英文,你知道是什么意思吗?...
  2. 荔枝微课如何引流?荔枝微课如何操作?荔枝微课怎么增加人气?
  3. 使用C# 创建PDF
  4. 集智科学家张江解析:为什么复杂性需要深度学习?
  5. 制作.ico透明图标
  6. iec104协议测试软件弓口虫,IEC104测试工具
  7. 天地图vec_w 和vec_c区别
  8. 通过Excel对人力资源考勤评估
  9. 安全设计--防止人为刷票
  10. 苹果上的Http Live Stream(HLS)技术初探