准备训练数据

1.训练数据文件夹格式

基于EigenFaces训练人脸识别模型_数据


这里我自己的人脸训练数据集文件夹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文件。

至此,完成了训练集以及验证集的数据生成。