insightface训练数据制作详细说明以及部分训练参数设置

官方有详细的训练部分的内容,参考insightface官方github的Deep Face Recognition部分内容。但关于训练数据准备、测试数据准备没有详细说明,本文主要阐述数据准备部分以及小部分训练参数设置问题。

一、训练数据制作

数据集

按id分类

人脸检测与校正

代码:./src/align_lfw.py

parser.add_argument('--input-dir', type=str, help='Directory with unaligned images.')
parser.add_argument('--output-dir', type=str, help='Directory with aligned face thumbnails.')
parser.add_argument('--image-size', type=str, help='Image size (height, width) in pixels.', default='112,112')

生成的图片按id分类,并对齐和resize成了image-size参数大小的统一图片(人脸识别输入通常是112×112)。output-dir下会生成一个lst文件,格式如下:

是否对齐 图片路径 重新生成的id
1 /insightface_data/align_img/0_6753546/1.jpg 0
1 /insightface_data/align_img/0_6753547/7.jpg 1

训练数据.rec的制作

MXNet训练时的标准输入文件是.rec形式的,就类似于tensorflow中的.tfrecord形式,所以需要做一个.rec文件.
在生成rec前需要touch一个property文件,内容为:id,image-size(height),image-size(width).
源码中在./src/data/face2rec.py里。需要注意的参数:

def parse_args():
    parser = argparse.ArgumentParser(
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
        description='Create an image list or make a record database by reading from an image list')
    parser.add_argument('prefix', help='prefix of input/output lst and rec files.')
    # prefix是制作训练集的output-dir.(前面对齐已生成lst文件,需要命名为.lst)

    # cgroup是制作lst的选项,但是源代码中将root folder已经注释掉了,所以不太清楚这段代码还是否能生成lst.详细见源码.
    cgroup = parser.add_argument_group('Options for creating image lists')
   
    # rgroup是生成数据集的选项.详细见源码.
    rgroup = parser.add_argument_group('Options for creating database')
   
    args = parser.parse_args()
    args.prefix = os.path.abspath(args.prefix)
    return args

运行时:

python face2rec2.py  prefix
# .lst中有image的位置和id,只需要写prefix的地址就行,但是lst要放在prefix文件夹下.

二、验证数据制作

待续,以后如果需要使用自标或者其他数据集再制作.
目前官方已提供了很多验证集:agedb_30.bin,calfw.bin,cfp_ff.bin,cfp_fp.bin,cplfw.bin,vgg2_fp.bin.

三、一些训练细节和参数

config.py

位置在./recognition/config.py,需要关注的设置:

# dataset settings
dataset = edict()

dataset.emore = edict()
dataset.emore.dataset = 'emore'
dataset.emore.dataset_path = '../datasets/faces_emore'
dataset.emore.num_classes = 85742
dataset.emore.image_shape = (112,112,3)
dataset.emore.val_targets = ['lfw', 'cfp_fp', 'agedb_30']

# pretrained model setting
default.pretrained = '/home/insightface/recognition/model-r100-ii/model'
default.pretrained_epoch = 1

# default dataset
default.dataset = 'emore'
default.loss = 'arcface'

# _cb = mx.callback.Speedometer(args.batch_size, args.frequent) 每隔多少个batch显示一次结果.
default.frequent = 20 

# verbose为验证和保存模型的间隔batch.
default.verbose = 2000 

default.kvstore = 'device'
default.end_epoch = 10000

# 要根据数据集大小调整,小数据需要调小.
default.lr = 0.1 

default.wd = 0.0005
default.mom = 0.9

# 根据显卡内存调整.
default.per_batch_size = 128 

# 'checkpoint saving option. 0: discard saving. 1: save when necessary. 2: always save. 3:最优结果覆盖模型'.
default.ckpt = 3 

default.lr_steps = '100000,160000,220000'
default.models_root = './models'

run.sh

位置在./recognition/run.sh,内容结合官方给的训练过程:

#!/usr/bin/env bash
export MXNET_CPU_WORKER_NTHREADS=24
export MXNET_ENGINE_TYPE=ThreadedEnginePerDevice
CUDA_VISIBLE_DEVICES='2,3,4,5,6,7' python -u train.py --network r50 --loss arcface --dataset emore

四、测试

代码位置:./recognition/eval/verification.py

parser = argparse.ArgumentParser(description='do verification')
# general
parser.add_argument('--data-dir', default='', help='')
parser.add_argument('--model', default='../model/softmax,50', help='path to load model.')
parser.add_argument('--target', default='lfw,cfp_ff,cfp_fp,agedb_30', help='test targets.')
parser.add_argument('--gpu', default=0, type=int, help='gpu id')
parser.add_argument('--batch-size', default=32, type=int, help='')
parser.add_argument('--max', default='', type=str, help='')
parser.add_argument('--mode', default=0, type=int, help='')
parser.add_argument('--nfolds', default=10, type=int, help='')
args = parser.parse_args()

你可能感兴趣的:(人脸识别,人脸识别,mxnet)