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人脸识别训练心得相关推荐
- Combined Margin loss人脸识别训练笔记
利用caffe第三方实现的combined margin_layer进行训练(https://github.com/gehaocool/CombinedMargin-caffe),数据集采用VGGFa ...
- 基于FaceNet的实时人脸识别训练
FaceNet人脸特征提取 FaceNet是一种用于提取人脸图像特征的深度神经网络.它由谷歌研究人员 Schroff 等人提出. 论文地址:https://arxiv.org/abs/1503.038 ...
- 阿里云人脸识别接口--心得分享
一:对接阿里云人脸识别接口的工具类 注意:如果你的图片已经转换为base64的编码以后参数是content_1,后面要加type请求参数,我这里是通过图片的url对比的 public class Fa ...
- python构建cnn图片匹配_tensorflow搭建cnn人脸识别训练+识别代码(python)
#-*- coding: utf-8 -*- from skimage importio,transformimportglobimportosimporttensorflow as tfimport ...
- mxnet制作人脸识别训练集
目录 调用数据集 生成train.lst 生成train.rec train.idx h5py还是比较方便的,推荐使用: https://blog.csdn.net/jacke121/article/ ...
- 训练人脸识别常见问题
人脸识别训练难点:数据量大(类别通常都是上十万,上百万) 训练当中常见注意要点: 1.尽管训练样本量大,但是任然需要使用预训练模型,目的是加速模型收敛: 2.加载预训练模型时,最好加载在cpu上,加载 ...
- 京东开源人脸识别项目faceX-zoo
简介: FaceX-Zoo是一个专为人脸识别而生的开源库,是目前准确率最高的开源人脸识别项目.FaceX-Zoo是基于PyTorch实现的.它提供了一个训练模块,其中有各种supervisory he ...
- 格灵深瞳:人脸识别最新进展以及工业级大规模人脸识别实践探讨 | 公开课笔记...
作者 | 张德兵 编辑 | 阿司匹林 出品 | 人工智能头条(公众号ID:AI_Thinker) 人脸识别已经成为成为计算机视觉领域最热门的应用之一,很多刚入门的 AI 新手都或多或少接触过人脸识别的 ...
- 『深度应用』人脸识别最新进展及发展方向
人脸识别最新进展及发展方向 ▌一.人脸识别背景介绍 简单来讲,人脸识别这个问题,就是给定两个人脸,然后判定他们是不是同一个人,这是它最原始的定义.它有很多应用场景,比如银行柜台.海关.手机解锁.酒店入 ...
最新文章
- 别再折腾开发环境了,一劳永逸的搭建方法
- 用 Python 在朋友圈中游遍全球
- 数据结构---Kruskal最小生成树
- 正整数 n 所有可能的和式的组合
- 2021年商业地产趋势洞察白皮书
- HDFS的读写限流方案
- spark 存入hbase_Spark DataFrame写入HBase的常用方式
- eclipse中汉字对齐错误
- css字体居中(css字体居中对齐)
- 训练loss不下降原因总结
- 第二代蜂窝移动通信系统概述
- 基于C# winform实现随机点名小工具(支持csv导入)
- python123货币转换器_python货币转换
- 从校园人到职业人的转变
- C#秘密武器之多线程——参数与返回值
- 菜鸟温习python爬虫
- 微信小程序之左右布局
- clock constrain
- php试卷系统制作_php题库系统与试卷生成系统
- linux安装nginx详细步骤和make编译报错问题(保姆级)