A Discriminative Feature Learning Approach for Deep Face Recognition github: https://github.com/ydwen/caffe-face

A Discriminative Feature Learning Approach for Deep Face Recognition

github: https://github.com/ydwen/caffe-face

配置 caffe-face,并训练数据。


1. 配置 caffe-face

下载源代码并在服务器上直接进行 caffe-face 编译:

make: *** [.build_release/src/caffe/layer_factory.o] 错误 1

make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] 错误 1

解决方案:

拷贝服务器上能够编译成功的 caffe 的 Makefile,Makefile.config 和 Makefile.config.example 三个文件。可在百度云盘下载:

链接: https://pan.baidu.com/s/1pNtAO0z 密码: s296

配置方法:

make all -j

make test -j

配置Python接口:

make pycaffe

2. 准备数据并训练模型  [ http://blog.csdn.net/qq_14845119/article/details/53308996 ]

a. 数据预处理

该训练最重要的其实还是数据集的准备,也就是先期数据的预处理,所有的图片都要crop为112*96的大小,因为这里是使用的caffe自带的train进行训练的。

如果是使用自己的数据,请按照 caffe-face 官网给出的指导,使用 MTCNN 进行处理。


训练集和测试集的数据格式整理:

# 下载 CASIA-WebFace 数据
ls WebFace/ > allfile.list
# allfile.list 形式如下:(注意:打开 allfile.txt 文件,手动删除不是序列号的行)
#0000045
#0000099
#0000100
#0000102

while read -r line; do ls -R /home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/$line/*.jpg >> webface.list; done < allfile.list
# webface.list 形式如下:
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/001.jpg
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/002.jpg
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/003.jpg

awk '$0=NR-1"\t"$0' allfile.list | awk '{print $2" "$1}' > allfile_xuhao.list 
# allfile_addxuhao.list 形式如下:
#0000045 0
#0000099 1
#0000100 2
#0000102 3

awk -F '/' '{print $0,$10}' webface.list > webface_addsample.list
# webface_addsample.list 形式如下:
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/001.jpg 0000045
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/002.jpg 0000045
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/003.jpg 0000045

awk 'NR==FNR{a[$1]=$2;next}{print $0,a[$2]}' allfile_xuhao.list webface_addsample.list | awk '{print $1" "$3}'> webface_all.list
# webface_all.list 形式如下:
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/001.jpg 0
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/002.jpg 0
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/003.jpg 0
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/004.jpg 0
#/home/work/Edward/centerloss/caffe-face-caffe-face/face_example/data/WebFace/0000045/005.jpg 0

sort --random-sort webface_all.list > webface_random.list # 使用sort 命令将文件随机排序
# webface_random.list 形式如下:

head -n 5000 webface_random.list > webface_test.list # 选择前 5000 作为测试集
tail -n +5001 webface_random.list > webface_train.list # 选择除了前 5000 行的数据作为训练集


# 修改 face_train_test.prototxt 中的相关参数:
18行:source的位置,训练的图片,格式为路径/图片名 类别 # 注意:是1个空格,(从0开始)# batch_size 为128,或256
39行:source的位置,测试的图片,格式为路径/图片名 类别
1146行:num_output,输出的个数,CASIA有10575个
1175行:num_output,输出的个数,CASIA有10575个
1180行:loss_weight,这里作者程序中给的是0.008,论文中验证的是0.003最佳,可以结合自己的数据集实际测试,本人测试效果差距不大,该参数为center_loss的乘积参数

cd $CAFFE-FACE_ROOT
nohup ./build/tools/caffe train --solver=face_example/face_solver.prototxt --gpu 3 >>log.txt &

b. 修改训练文件参数

修改 face_train_test.prototxt 中的相关参数:

18行:source的位置,训练的图片,格式为路径/图片名 类别 # 注意:是1个空格,(从0开始)

39行:source的位置,测试的图片,格式为路径/图片名 类别

1146行:num_output,输出的个数,CASIA有10575个,但是有3个和LFW一样,所以这里作者用了10572个

1175行:num_output,输出的个数,CASIA有10575个,但是有3个和LFW一样,所以这里作者用了10572个

1180行:loss_weight,这里作者程序中给的是0.008,论文中验证的是0.003最佳,可以结合自己的数据集实际测试,本人测试效果差距不大,该参数为center_loss的乘积参数

然后下面的脚本开始训练:

cd $CAFFE-FACE_ROOT

./build/tools/caffe train -solver face_example/face_solver.prototxt -gpu 3


参考:

http://blog.csdn.net/qq_14845119/article/details/53308996 (重点)

https://pangyupo.github.io/2016/10/16/mxnet-center-loss/

http://blog.csdn.net/hlx371240/article/details/51388022 (vgg-face)


发布了39 篇原创文章 · 获赞 12 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/wdh315172/article/details/79264435