在实现人脸检测mtcnn和人脸识别facenet时,遇到很多坑,记录解决方法,给其他人一点启发。
一、人脸检测mtcnn和人脸识别facenet的具体介绍
参考博客https://www.cnblogs.com/zyly/p/9703614.html
二、facenet具体实现
1.创建环境
在anaconda prompt上输入
conda create -n tf18 Python=3.6
2.激活环境
conda activate tf18
3.装依赖包
tensorflow == 1.7
numpy == 1.16.2
scipy == 1.2.1
scikit-learn
opencv-python
h5py
matplotlib
Pillow
requests
psutil
其中,tensorflow,numpy和scipy需要指定版本,不然会出错。
4.先去GitHub下载facenet源码:https://github.com/davidsandberg/facenet,解压后得到facenet文件夹,将其移至新建环境tf的包库中,在我的电脑路径如下:D:\program\Anaconda\envs\tf18\Lib\site-packages\facenet
接着删除facenet文件夹里除src和data以外的文件夹,防止引用出错。
另外,需要把facenet\src\路径下的align文件夹复制到D:\program\Anaconda\envs\tf18\Lib\site-packages\路径下,不然会报错。
5.在lfw验证集验证模型的性能
5.1下载lfw验证集
数据集下载网站为:http://vis-www.cs.umass.edu/lfw/lfw.tgz,在site-packages文件夹下建立datasets文件夹,将数据集解压放在datasets文件夹下,在我的电脑路径如下:D:\program\Anaconda\envs\tf18\Lib\site-packages\datasets\
raw里面含5749个人的照片。
5.2对齐人脸对齐人脸使用的是脚本align_dataset_mtcnn.py。需要修改文件align_dataset_mtcnn.py,将import facenet改为下图所示:
使用anaconda prompt,来到facenet路径下,运行如下代码:
python facenet/src/align/align_dataset_mtcnn.py datasets/lfw/raw datasets/lfw/lfw_mtcnnpy_160 --image_size 160 --margin 32 --random_order
脚本会对raw的人脸进行识别,裁剪为160*160大小的图片,放在datasets/lfw/lfw_mtcnnpy_160路径下。
5.3下载模型
facenet的原作者提供了两个预训练的模型,分别是基于CASIA-WebFace和VGGFace2人脸库训练的,下载地址:https://github.com/davidsandberg/facenet
将其下载解压到facenet/models文件夹下
models下有两个模型
5.4验证
在anaconda prompt下,输入
conda activate tf18
d:
cd program\Anaconda\envs\tf18\Lib\site-packages\facenet
来到facenet路径下,运行
python src/validate_on_lfw.py ../datasets/lfw/lfw_mtcnnpy_160 models/20180408-102900
最终得到验证集结果
6.在新的训练集下微调模型
6.1 新的训练集获取
因为原作者的模型是在外国人的数据集上进行训练的,我们想将其应用于亚洲人脸的识别中,一个好的方法是用原模型在亚洲数据集的基础上进行微调,以达到适应亚洲人脸识别的目的。
亚洲人脸数据集的获取方式之一是通过爬取获得。
爬取了5000个亚洲明星的数据,并进行清洗。数据集通过百度网盘获取(7条消息) 亚洲人脸数据集百度网盘链接.txt-深度学习文档类资源-CSDN下载,由于超过4G,只能分开压缩了
爬虫代码参考博客 : (5条消息) 人脸数据集——亚洲人脸数据集_Alvin_FZW的博客-CSDN博客_亚洲人脸数据集
6.2 照lfw数据对齐方式进行对齐
python src/align/align_dataset_mtcnn.py D:/file/spyder/BingImage3344 D:/file/spyder/BingImage180 --image_size 180 --margin 44 --random_order
在这,先将训练集放在D:/file/spyder/BingImage3344路径下,运行代码后会将对齐后的180*180的人脸放在D:/file/spyder/BingImage180路径下。
6.3 微调
python src/train_softmax.py --logs_base_dir ./logs --models_base_dir ./models --data_dir D:/file/spyder/BingImage180 --model_def models.inception_resnet_v1 --image_size 160 --pretrained_model ./models/20210706-135836 --lfw_dir ../datasets/lfw/lfw_mtcnnpy_160 --optimizer RMSPROP --learning_rate 0.01 --max_nrof_epochs 30 --batch_size 64 --keep_probability 0.8 --random_crop --random_rotate --random_flip --weight_decay 5e-5 --center_loss_factor 1e-2 --center_loss_alfa 0.9
参数解释:
python src/train_softmax.py
--logs_base_dir ./logs #训练日志保存路径
--models_base_dir ./models #模型保存路径
--data_dir D:/file/spyder/BingImage180 #训练集路径
--model_def models.inception_resnet_v1 #指定了训练所使用的卷积网络是inception_resnet_v1网络
--image_size 160 --pretrained_model ./models/20210706-135836 #指定预训练模型
--lfw_dir ../datasets/lfw/lfw_mtcnnpy_160 #验证集lfw路径
--optimizer RMSPROP #优化方式
--learning_rate 0.01 #学习率
--max_nrof_epochs 30 #epoch次数
--batch_size 64 #batch大小
--keep_probability 0.8 #dropout
--random_crop #表明在数据增强时使用随机裁切
--random_rotate #表明在数据增强时使用随机随机翻转
--random_flip #表明在数据增强时使用随机旋转
--weight_decay 5e-5 #正则化系数
--center_loss_factor 1e-2 #中心损失和Softmax损失的平衡系数
--center_loss_alfa 0.9 #中心损失的内部参数
训练好的模型会保存在models路径下
版权声明:本文为CSDN博主「大白原」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42742522/article/details/118711256
暂无评论