准备训练数据
1.训练数据文件夹格式
这里我自己的人脸训练数据集文件夹dms_faceid_data_test,每人一个文件夹(例如DMS_cc_001_包鹏),文件内的图像为同一个人不同场景的人脸图像,图像要保持干净,保证类内相似度高,类间差异性大。另外需要剔除头部姿态过大的人脸图像,以防止人脸矫正算法不能很好的起到姿态矫正目的。
2.制作符合格式的训练数据集
(1)人脸图像对齐并生成lst文件
将训练数据集准备好并放置在insightface工程的datasets下,然后新建一个名为output的文件夹用来保存对齐后的人脸图片以及lst文件。(自己制作的时候因笔记系统本地硬盘不够大,因此将数据放在服务器上,即可灵活的改变数据路径)运行insightface项目下 src/align下的align_lfw.py文件
// A code block
python align_lfw.py --input-dir ../../datasets/dms_faceid_data_test --output-dir ../../datasets/output
也可直接运行脚本文件,需要更改其中的输入输出目录(自己根据命令编写sh脚本)
// A code block
sh align_lfw.sh
如果成功运行,output文件夹下会产生对齐后的人脸以及一个lst文件(将lst文件改名为 train.lst,并将其移动到dms_faceid_data_test_align文件夹下)
生成的 lst 文件内容为:
// A code block
1 /home/ljw/data/xuhongli/dms_faceid_data_test_align/DMS_cc_001_包鹏/DMS_001_包鹏_00131.png 0
1 /home/ljw/data/xuhongli/dms_faceid_data_test_align/DMS_cc_001_包鹏/VID_20100101_080704_00020.png 0
#其中1代表对齐,最后的数字0,1代表class label ,中间是地址;需要用\t表示tab键,不能用空格间隔。
(2)创建property配置文件
在dms_faceid_data_test_align下创建property,没有后缀,写入下面内容,
// A code block
8,112,112复制代码
含义:8,112,112分别代表ID数量,尺寸,尺寸
(3)生成rec&idx文件(依托于lst文件)
运行src/data face2rec2.py
// A code block
python face2rec2.py /dms_faceid_data_test_align/train
也可直接运行脚本文件,需要更改其中的输入输出目录(自己根据命令编写sh脚本)
// A code block
sh face2rec2.sh
“/dms_faceid_data_test_align/train”中dms_faceid_data_test_align为训练数据集文件名,train为lst文件名。运行成功后会出现两个文件:
// A code block
train.idx,train.rec
(4)创建pair文件
为了验证模型识别准确率需要生成验证集bin文件,bin文件生成前需要做pairs文件,就是一对一对的数据,每一行分别是
// A code block
/home/ljw/data/xuhongli/dms_faceid_data_test_align/DMS_cc_004_李广敬/VID_20100101_081127_00082.png /home/ljw/data/xuhongli/dms_faceid_data_test_align/DMS_cc_005_王松泉/VID_20100101_081711_00074.png 0
含义:图A的目录 空格 图B的目录 空格 标志0/1(代表两张图类别一致否:0代两张图像不是同一个人,1代表两张图像是一个人)。
运行在src/data下的generate_image_pairs.py用于生成pairs文件(更改其中对齐后的人脸文件夹目录,更改生成的pairs txt文件名称)
// A code block
python generate_verify_pairs.py
(5)生成验证集bin文件
利用/src/data/下的 lfw2pack.py生成bin文件,需要对原工程的lfw2pack.py脚本进行修改,具体的修改方法如下。
#修改1:图像大小修改为112,112
parser.add_argument(’–image-size’, type=str, default=‘112,112’, help=’’)
#修改2:将文件名pairs.txt修改成test.txt
lfw_pairs = lfw.read_pairs(os.path.join(lfw_dir, ‘test.txt’))
print(lfw_pairs)
#修改3:下一行进行修改成需要的格式
lfw_paths, issame_list = lfw.get_paths(lfw_dir, lfw_pairs, ‘png’)
#修改4:get_paths调用方式
lfw_paths, issame_list = lfw.get_paths(lfw_pairs,int(args.num_samepairs)+1)
#修改5:添加解析参数(这里只是方便调用 lfw.get_paths,并不影响读取test.txt文件中图像的数量)
parser.add_argument(’–num-samepairs’,default=100)
// A code block
python lfw2pack.py --data-dir /home/ljw/data/xuhongli/dms_faceid_data_test_align --output /home/ljw/data/xuhongli/dms_faceid_data_test_align/test.bin
也可直接运行脚本文件,需要更改其中的输入输出目录(自己根据命令编写sh脚本)
// A code block
sh lfw2pack.sh
成功后/home/ljw/data/xuhongli/dms_faceid_data_test_align目录下生成test.bin文件。
至此,完成了训练集以及验证集的数据生成。