ArcFace/InsightFace使用自己数据训练/验证过程

ArcFace/InsightFace使用自己数据训练/验证过程(1)

(一) 人脸数据集对齐

(二) 生成lst文件

(一) 人脸数据集对齐
首先下载insightface源码,点击github链接下载,本文代码需在python2.7环境下运行,文章中所需的脚本文件点击下载。

在进行训练之前。首先要准备好自己的数据,数据的存放形式如下图所示,每个文件夹代表一个人,文件夹下放置属于这个人的多张照片。

然后,需要对所有的照片中的人脸进行对齐处理,并把每张图片缩放到112x112。人脸对齐使用MTCNN,insightface中自带的就有MTCNN和其模型文件,拷贝face_alignment_by_mtcnn.py到deploy文件夹下,修改原始人脸数据文件夹和对齐后要保存的文件夹位置,如下图所示,然后直接运行该程序。

(二) 生成lst文件
lst文件中主要包含图片的路径、标签、序号等信息,为后面制作数据文件做准备,lst文件中的信息如下图所示,第一列时打乱的序号,第二列时图片的地址,第三列是该图片所对应的的标签。

开始制作。首先复制face2rec2_m.py文件到scr/data文件夹下,然后命令行窗口中输入以下命令:

python -u face2rec2_m.py --list True --prefix F:\datasets\20_faces_datasets\ --root F:\datasets\20_faces_clip\ --train-ratio 0.8 --test-ratio 0.2 --recursive True
参数解释:

--list:是否生成lst文件
--prefix:lst文件保存位置
--root:对齐后人脸数据存放位置
--train-ratio/--test-ratio:训练集和测试集的比例
 

ArcFace/InsightFace使用自己数据训练/验证过程2


(三) 生成rec文件
制作proprety
生成rec文件
(四) 生成bin文件
制作pairs.txt
生成bin文件
(五)文件制作结果
接上一篇ArcFace/InsightFace使用自己数据训练/验证过程(1)
文章中所需的脚本文件点击下载。

(三) 生成rec文件
制作proprety
创建文件proprety,注意没有后缀,以文本形式打开,写上以下内容,如下图所示,第一个数字代表类别总数,第二个和第三个数字代表人脸的尺寸。


生成rec文件
进入到face2rec2_m.py所在的目录,然后命令行窗口中输入以下命令:

python -u face2rec2_m.py --prefix F:\datasets\20_faces_datasets\ --root F:\datasets\20_faces_clip\ --train-ratio 0.8 --test-ratio 0.2 --recursive True
1
参数解释:

--prefix:lst文件保存位置
--root:对齐后的人脸数据存放位置
--train-ratio/--test-ratio:训练集和测试集的比例
1
2
3
然后会在指定目录生成idx和rec文件,idx文件是辅助生成rec的,rec是MXNet训练所需的数据格式。

(四) 生成bin文件
制作pairs.txt
bin文件用于验证和测试,其内容是两两图片的结合,然后给出这两张图片的真实标签,1代表是同一个人,0代表不是同一个人,以此达到验证和测试的目的。
首先我们需要把所有的人脸数据两两结合起来,如下图所示,每一行是一个测试样本,其中前两个是两张图片的地址,最后一个数字代表这两张图片是不是同一个人,运行附件中write_pairs.py,程序中修改人脸数据目录和生成的文件要保存的目录,制作pairs.txt。


生成bin文件
复制附件中的flw_m.py到src/eval文件夹下,复制附件中的lfw2pack_m.py到src/data文件夹下 (修复图片过多时在制作bin文件时可能出现MemoryError的BUG,使用该链接下的lfw2pack_m.py和flw_m.py,链接地址: https://pan.baidu.com/s/1LBNYaSFEJ3WSVBkU5VdFDA 提取码: mgsd),进入src/data目录下,运行以下命令:

python -u lfw2pack_m.py --txt-dir F:\datasets\20_faces_datasets --output F:\datasets\20_faces_datasets\20_faces.bin
1
命令行参数解释:

txt-dir:上一步中生成的pairs.txt所在的目录
Output:bin文件所要保存的目录
1
2
(五)文件制作结果
至此,所有训练和验证中所需的文件都已经制作完成,把所有制作后的文件放到一个目录下,如下图所示。

下个文章介绍最后的训练和验证的过程。
 

ArcFace/InsightFace使用自己数据训练/验证过程(3)
接上一章内容ArcFace/InsightFace使用自己数据训练/验证过程(2)
文章所需脚本文件下载地址

(六) 训练
进入src目录,linux命令行输入以下:

export MXNET_CPU_WORKER_NTHREADS=24
export MXNET_CUDNN_AUTOTUNE_DEFAULT=0
export MXNET_ENGINE_TYPE=ThreadedEnginePerDevice

DATA_DIR=/root/cc/faces_vgg_112x112    #数据存放目录
NETWORK=r50    #网络 默认resnet50 r100代表resnet100
JOB=softmax1e3    #
LOSS=0    #0代表使用softmax,4代表arcface等等,可以看源码
MODELDIR="/root/cc/model/model-$NETWORK-$JOB"    #模型保存位置
mkdir -p "$MODELDIR"
PREFIX="$MODELDIR/model"
CUDA_VISIBLE_DEVICES='0' python -u train_softmax.py --data-dir $DATA_DIR --network "$NETWORK" --loss-type $LOSS --prefix "$PREFIX" --per-batch-size 64
1
2
3
4
5
6
7
8
9
10
11
12
【20200505新增】建议把上面最后的命令可以修改成下面的,因为默认学习率为1,可能影响训练效果,另外上面的命令没有加载预训练模型,可能导致训练过慢,使用下面的命令,设置学习率为0.005,加载预训练模型。预训练模型下载地址链接:https://pan.baidu.com/s/1wFezqPIzrmycx9a8qNY13w 提取码:sscf

CUDA_VISIBLE_DEVICES='0' python -u train_softmax.py --data-dir /mnt/sda2/faces_vgg_112x112 --network m1 --loss-type 0 --lr 0.005 --pretrained ./models/m1-softmax-emore,1 --prefix ../models --per-batch-size 64
1
以上参数在1080Ti上训练可以通过,注意per-batch-size和网络的设置,数目太大可能会报错。

(七) 验证
第一种验证方式
直接测试准确率等数值,进入sce/eval目录,linux命令行输入以下:

python -u verification.py --gpu 0 --data-dir /root/cc/20_faces_datasets --model '/root/insightface-master0/models/model,0' --target 20_faces --batch-size 128
1
命令行参数说明:

data-dir:就是之前各种文件保存的目录
model:就是训练好的模型位置,注意地址后面有个",0"代表使用哪一次的训练结果
target:就是你测试验证的数据集的标签
batch-size:每次测试的样本数量
1
2
3
4
第二种验证方式
在验证的代码中,还有一种能够直观展示测试数据结果的方式,展示结果如下图所示,程序会自动的选择表现最优的阈值,同时把在该阈值下的False_Positive和False_Negative的人脸给一一画出来,能够直观的分析识别出错的原因。


进入sce/eval目录,在verification.py中390行左右修改图像保存地址,

linux命令行输入以下:

python -u verification.py --gpu 0 --data-dir /root/cc/20_faces_datasets --model '/root/insigh
 

Insightface制作rec和idx的训练集


Insightface制作rec和idx的训练集
####要求

制作成rec和idx的数据集需要先对齐,使用作者的 $INSIGHTFACE/src/align 的对齐代码可以对齐并生成lst
需要用到property和lst,使用face2rec2.py会在指定目录下寻找lst结尾的文件,因此可把lst更名为example.lst,运行face2rec2.py会在指定目录下生成example.rec、example.idx。
property中就定义数据集的格式,整体内容如下:1000,112,112 ,其中1000代表人脸的类别数目,图片格式为112x112。
cd $INSIGHTFACE\src\data
python face2rec2.py --encoding=.png $INSIGHTFACE/datasets/facescrubs_aligned 
1
过程中我将lst中的相对路径改为了绝对路径,发现相对路径会出现一些小问题


如果使用自己制作的lst,需要注意一下格式,据个栗子。
1 path/Adam_Brody/Adam_Brody_277.png 25

第一个参数“1”代表已对齐的图片,第二个参数代表图片的路径,第三个参数代表图片的标签编号

中间不能用空格隔开,必须用/t(TAB)隔开,用空格会报错。
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI周红伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值