pytorch实现人脸识别_face_benchmark 高效人脸识别训练框架

前言

目前市面上常用的人脸识别训练框架是insightface,虽然作为刷榜神器的insightface很不错,但是静态图调试起来太累(动态图养成的病)。

https://github.com/deepinsight/insightface​github.com

我曾经也想过用mxnet的gluon接口把insightface封装起来,但是gluon的多卡训练速度实在让人不敢恭维,现存占用也是超级多。大家可以测试下gluon的接口,虽然现在改良很多,但是依然不是很理想。

dmlc/gluon-cv​github.com
005921efbc513ae2fd970e15b9c71e76.png

本着对pytorch忠实fans的原则,在github上搜索了一款pytorch的人脸训练框架。使用下来,使用下来发现这个开源工具速度也是不利索。

ZhaoJ9014/face.evoLVe.PyTorch​github.com

后来发现原因是在多卡训练时候使用的是DP模块,拆分超大FC使用的就是普通module模块。具体分析如下:

1、DP模块在训练时候需要不停的把梯度同步到0卡上,造成0卡的显存占用过大,整体batch上不去(DP模块的拆分做负载均衡可以解决)。

2、梯度同步没用使用nccl这个工具,使得GPU的利用率不够高(历史的教训告诉我使用硬件厂商提供的工具永远是最快的!!!!)。

Face_benchmark

https://github.com/p517332051/face_benchmark​github.com

使用过pytroch的DDP模块的同学都知道,在多卡环境下那个GPU利用真是杠杠的,让GPU时刻处于百米竞速状态(不过很烧电,如果你是阿里云那你应该会变相省下一点钱)。常见的检测框架maskrcnn_benchmark、Detectron2、mmdetection,这三个框架就是DDP模块的标杆,我觉得目前训练速度最快的就是这个三个深度学习工具包了。

所以我的目标也很明显就是将face.evoLVe.Pytorch中的DP模块换成DDP模块。难点主要是怎把超大规模的FC层中的权重拆分并把它封装在DDP模块上,具体怎么实现可以看我的源代码是怎么写的。

数据训练准备

举个例子,比如msra这个文件夹内有数据,存储方式是

your_path/data/msra/xiaoming/*.jpg

your_path/data/msra/xiaogang/*.jpg

……..

your_path/data/msra/laowang/*.jpg

然后使用your_path/face_benchmark/tools/data_process.py 将下面变量设置为

data_root=r'your_path/data/msra'
file_list = r'your_path/data/msra/msra_face_112*112.txt'

最后在your_path/data/msra这个目录下生成一个msra_face_112*112.txt的txt文件,用来记录msra每个ID的label。

然后在your_path/maskrcnn_benchmark/config/paths_catalog.py这个代码添加路径。数据路径添加和maskrcnn_benchmark一样。

"msra_face": {
    "img_dir": r"you_path/data/msra",#msra数据集
    "ann_file": r"you_path/data/msra/msra_face_112*112.txt",#存储msra每个ID的label
    "im_info": [112, 112]  #你对齐后的图片大小
},

训练启动脚本

python tools/Muti_GPUS_Train.py --ngpus_per_node=8 --npgpu_per_proc=1 tools/train_face_netDivFC.py --skip-test --config-file configs/face_reg/face_net_msra_celeb.yaml DATALOADER.NUM_WORKERS 16 OUTPUT_DIR

--ngpus_per_node=8 表示的机器有8个GPU。

--npgpu_per_proc=1 表示你使用1个DDP,使用8个GPU拆分FC层进行训练。

例子:

—ngpus_per_node=4 表示的机器有8个GPU。

—npgpu_per_proc=2 表示你使用2个DDP,8个GPU分成两份,分别给DDP在4个GPU下拆分FC。

在20个epochs下:

8cbaea9005aeeb26a7d34ef9ea7eb527.png

//==============2020年3月16日 美联储基准利率降到0==================//

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用pytorch实现retinaface arcface人脸识别项目可以分为以下几个步骤。 首先,我们需要安装pytorch和相关的依赖库,例如numpy、opencv等。 其次,我们需要获取训练所需的数据集。可以使用已有的人脸数据库,如LFW或MS-Celeb-1M。如果需要自己采集数据集,可以使用摄像头获取人脸图像。同时,还需要标注数据集,即为每张人脸图像添加标签,用于后续的训练。 接着,我们需要训练retinaface模型。retinaface是一种使用单阶段多任务级联网络实现的人脸检测模型,它可以同时检测人脸的位置和关键点。我们可以使用已有的retinaface模型进行微调,或者从头开始训练一个retinaface模型。 然后,我们需要训练arcface模型。arcface是一种使用全连接网络实现人脸识别模型,它可以将人脸图像映射到一个高维特征空间,并计算人脸之间的相似度。我们可以使用已有的arcface模型进行微调,或者从头开始训练一个arcface模型。 最后,我们可以使用训练好的retinaface和arcface模型进行人脸识别。首先,使用retinaface模型检测人脸并提取关键点。然后,使用arcface模型将提取的人脸特征与已有的标签进行比对,得到相似度结果。最后,根据相似度结果进行人脸识别。 需要注意的是,在实现retinaface arcface人脸识别项目时,我们还需要进行数据预处理、数据增强、模型评估等工作,并进行超参数的选择和调优,以提高识别的准确性和性能。 总结来说,利用pytorch实现retinaface arcface人脸识别项目需要进行数据集获取和标注、训练retinaface模型、训练arcface模型以及人脸识别实现等多个步骤,通过这个过程可以实现准确性较高的人脸识别系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值