facenet专题1:windows下使用train_sotfmax.py训练人脸识别模型

1.facenet github地址:https://github.com/davidsandberg/facenet,下载该project。

git clone https://github.com/davidsandberg/facenet

2.下载CASIA-WebFace数据集,官方下载地址 http://www.cbsr.ia.ac.cn/english/CASIA-WebFace-Database.html,如果不方便可以去我的微云下载  https://share.weiyun.com/5pSMgRO-g

下载完成后可以得到一个大约4.1G的 CASIA-WebFace.zip文件,在facenet/src文件夹下新建一个data文件夹,解压到data文件夹下得到CASIA-WebFace文件夹,里面有很多文件夹:

每一个代表一个人,文件夹中对应这个人的所有人脸图片,使用MTCNN对原始图像进行人脸检测和对齐,进入facenet文件夹下,执行

python src/align/align_dataset_mtcnn.py ./src/data/CASIA-WebFace/ ./src/data/CASIA_Web_Face_mtcnnpy_182/ --image_size 182 --margin 44

执行一段时间,可以得到data文件夹下CASIA_Web_Face_mtcnnpy_182文件夹下面按相同格式保存着对齐的人脸图像。所有图像都是182*182像素,后面我们会在训练时进行随机裁剪成160*160,起到数据增强的作用。同样,将LFW数据库进行对齐,在data文件夹下生成160*160像素人脸库lfw_mtcnnpy_160,因为后续训练中使用lfw做evaluate,所以必须放在指定文件夹,与后于输入参数相对应,这里我们把它放在./data/lfw_mtcnnpy_160/文件夹下面。

使用train_sotfmax训练人脸识别模型,其执行脚本代码如下:

python train_softmax.py \
--logs_base_dir ./logs/facenet/ \ #把训练日志保存到./logs/facenet/,运行时,会在./logs/facenet/文件夹下新建一个以当前时间命名的目录。
--models_base_dir ./models/facenet/ \ #运行时同样新建一个以当前时间命名的目录,保存训练好的模型。
--data_dir ./data/CASIA_Web_Face_mtcnnpy_182 \ #训练数据的位置。
--image_size 160 \#输入网络的图片尺寸是160*160像素。
--model_def models.inception_resnet_v1 \ #比较关键的参数,指定训练的CNN结构为inception_resnet_v1,项目支持的所有CNN结构在src/models目录下。 
--lfw_dir ./data/lfw_mtcnnpy_160 \ #指定LFW数据集的位置。
--optimizer ADAM \#指定使用的优化的方法。
--learning_rate -1 \#学习率,这里指定为负数,将被忽略,后面的learning_rate_schedule_classifier_casia.txt参数规划学习率。
--max_nrof_epochs 80 \ #最多跑180个epoch
--keep_probability 0.8 \ #dropout被保持的概率。
--random_crop \ #数据增强时会进行随机裁剪。
--random_flip \ #数据增强时会进行随机翻转。
--learning_rate_schedule_file data/learning_rate_schedule_classifier_casia.txt \
#该文件内容如下:
# Learning rate schedule
#Maps an epcoh number to a learning rate
#0:0.1
#65:0.01
#77:0.001
#1000:0.0001
--weight_decay 5e-5 \#所有变量的正则化系数。
--center_loss_factor 1e-2 \ #中心损失和softmax损失的平衡参数。
--center_loss_alfa 0.9 \#中心损失的内部参数

windows下在facenet/src文件夹下创建train.bat脚本,这里需要区别一下,windows脚本的换行要使用符号^,脚本内容如下:

python train_softmax.py ^
--logs_base_dir ./logs/facenet/ ^
--models_base_dir ./models/facenet/ ^
--data_dir ./data/CASIA_Web_Face_mtcnnpy_182 ^
--image_size 160 ^
--model_def models.inception_resnet_v1 ^
--lfw_dir ./data/lfw_mtcnnpy_160/ ^
--optimizer ADAM ^
--learning_rate -1 ^
--max_nrof_epochs 80 ^
--keep_probability 0.8 ^
--random_crop ^
--random_flip ^
--learning_rate_schedule_file data/learning_rate_schedule_classifier_casia.txt ^
--weight_decay 5e-5 ^
--center_loss_factor 1e-2 ^
--center_loss_alfa 0.9

通过anaconda进入facenet/src文件夹,直接执行脚本 train.bat开始训练,屏幕会打印类似如下的消息:

Epoch[0][1/1000]表示第0个Epoch以及当前Epoch第几个训练batch,我使用的是RTX2080的显卡,大概30分钟能够训练一个epoch。

通过windows指令cmd,进入facenet/src文件夹,输入

tensorboard  --logdir ./logs/facenet/20200412-014210/

其中最后一个20200412-014210文件夹是训练开始后根据日期新建的。

浏览器打开http://localhost:6006/,可以监控训练的情况:

 

大概花费15个小时完成了80epoch的训练。下一篇我们将对源代码进行解析。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值