热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

insightfacepytorch答疑指南

之前写过一篇人脸识别从原理到实践详细介绍了人脸识别相关的算法、模型和Loss等,里面也提到insightface成为当前工业事实上的基准。但是它各种牛逼,

之前写过一篇人脸识别从原理到实践 详细介绍了人脸识别相关的算法、模型和Loss等,里面也提到insightface成为当前工业事实上的基准。但是它各种牛逼,唯一不足的点就是开始时选了mxnet框架开发,奈何现在基本没什么人用了,所以在22年3月官方悄悄的把主线版本特别是PartialFC的实现换成了pytorch,而且更早之前经历过一次大的文件结构调整,加入了paddle、oneflow等很多框架的实现,但是也导致很多之前教程给的路径都找不到了,还有一些文件直接就删除了,这对于新入手造成了很大的困扰。我是非常反对这种开发中途变更,对于新出的算法新开个仓库就是了,估计为了涨star。作者过佳曾在 InsightFace大规模人脸识别 进行过讲解。

刚开始相信大家一定和我一样有数不清的疑惑,首先是怎么安装和运行,虽然主线版本切了pytorch,但是数据集制作用的还是mxnet,而mxnet又疏于维护,存在非常多的坑,特别是对于30x0系列的新显卡,装上后各种问题。目前我用的CUDA版本为11.3,用Anaconda装的python3.8,mxnet1.7之前的默认是不需要nccl(用于显卡并行通信的库)的,1.8之后需要另外安装nccl库,版本为2.8.4

conda install cudatoolkit=11.3 cudnn --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
pip install mxnet-cu112==1.8.0.post
pip install paddlepaddle-gpu==2.2.2.post110 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

装好后就可以体验下人脸识别系统的效果啦基于insightface实现的人脸识别和人脸注册

pip install Cython insightface==0.6.2
pip install onnxruntime-gpu -i https://mirror.baidu.com/pypi/simple

也可以参考insight-face-paddle ,对应的视频教程

看到效果这么好,是不是想自己训一个模型,那怎么训练呢?

其实人脸识别真正的入口在arcface_torch 数据集下载链接,具体每个数据集的统计指标如下


人脸识别常用数据集对比

下载后数据后配置RAM,也就是把数据放到内存里,这里训练主机有256G内存,切出140G用于存放数据(为什么140呢?因为glint360k占的空间是那么大),这里以MS1MV2为例

sudo mkdir /train_tmp
sudo mount -t tmpfs -o size=140G tmpfs /train_tmp
sudo cp data/faces_emore /train_tmp/ -r

 用下面的代码就可以愉快的开始训练了,单机器8卡V100需要约8个小时,训练速度是10000张/秒,也就是每天能训8.64亿张图,非常恐怖的数字,所以如果你的数据达不到1000张每秒每卡的话可能就需要检查下配置是不是出了什么问题了.

cd recognition/arcface_torch
python -m torch.distributed.launch --nproc_per_node=1 --nnodes=1 --node_rank=0 --master_addr="127.0.0.1" --master_port=12581 train.py configs/ms1mv2_mbf.py

训练过程中每个2000个iter会在测试集上评估当前的精度,如日志ms1mv2_mbf/training.log

Training: 2022-04-10 23:14:04,187-rank_id: 0
Training: 2022-04-10 23:14:18,205-: margin_list [1.0, 0.5, 0.0]
Training: 2022-04-10 23:14:18,205-: network mbf
Training: 2022-04-10 23:14:18,205-: resume False
Training: 2022-04-10 23:14:18,205-: output work_dirs/ms1mv2_mbf
Training: 2022-04-10 23:14:18,205-: embedding_size 512
Training: 2022-04-10 23:14:18,205-: sample_rate 1.0
Training: 2022-04-10 23:14:18,205-: interclass_filtering_threshold0
Training: 2022-04-10 23:14:18,205-: fp16 True
Training: 2022-04-10 23:14:18,205-: batch_size 128
Training: 2022-04-10 23:14:18,206-: optimizer sgd
Training: 2022-04-10 23:14:18,206-: lr 0.1
Training: 2022-04-10 23:14:18,206-: momentum 0.9
Training: 2022-04-10 23:14:18,206-: weight_decay 0.0001
Training: 2022-04-10 23:14:18,206-: verbose 2000
Training: 2022-04-10 23:14:18,208-: frequent 10
Training: 2022-04-10 23:14:18,208-: dali False
Training: 2022-04-10 23:14:18,208-: rec /train_tmp/faces_emore
Training: 2022-04-10 23:14:18,208-: num_classes 85742
Training: 2022-04-10 23:14:18,208-: num_image 5822653
Training: 2022-04-10 23:14:18,208-: num_epoch 40
Training: 2022-04-10 23:14:18,208-: warmup_epoch 0
Training: 2022-04-10 23:14:18,208-: val_targets ['lfw', 'cfp_fp', 'agedb_30']
Training: 2022-04-10 23:14:18,210-: total_batch_size 1024
Training: 2022-04-10 23:14:18,210-: warmup_step 0
Training: 2022-04-10 23:14:18,210-: total_step 227440
...
Training: 2022-04-10 23:18:56,638-[lfw][2000]XNorm: 20.481429
Training: 2022-04-10 23:18:56,638-[lfw][2000]Accuracy-Flip: 0.96000+-0.00853
Training: 2022-04-10 23:18:56,641-[lfw][2000]Accuracy-Highest: 0.96000
Training: 2022-04-10 23:19:21,795-[cfp_fp][2000]XNorm: 18.461583
Training: 2022-04-10 23:19:21,795-[cfp_fp][2000]Accuracy-Flip: 0.75300+-0.02095
Training: 2022-04-10 23:19:21,796-[cfp_fp][2000]Accuracy-Highest: 0.75300
Training: 2022-04-10 23:19:43,475-[agedb_30][2000]XNorm: 19.645099
Training: 2022-04-10 23:19:43,476-[agedb_30][2000]Accuracy-Flip: 0.81717+-0.02153
Training: 2022-04-10 23:19:43,476-[agedb_30][2000]Accuracy-Highest: 0.81717
......
Training: 2022-04-11 07:17:07,878-[lfw][226000]XNorm: 7.635595
Training: 2022-04-11 07:17:07,878-[lfw][226000]Accuracy-Flip: 0.99717+-0.00289
Training: 2022-04-11 07:17:07,879-[lfw][226000]Accuracy-Highest: 0.99750
Training: 2022-04-11 07:17:32,307-[cfp_fp][226000]XNorm: 6.540276
Training: 2022-04-11 07:17:32,308-[cfp_fp][226000]Accuracy-Flip: 0.95586+-0.01115
Training: 2022-04-11 07:17:32,308-[cfp_fp][226000]Accuracy-Highest: 0.95943
Training: 2022-04-11 07:17:53,429-[agedb_30][226000]XNorm: 7.491025
Training: 2022-04-11 07:17:53,429-[agedb_30][226000]Accuracy-Flip: 0.97050+-0.00730
Training: 2022-04-11 07:17:53,430-[agedb_30][226000]Accuracy-Highest: 0.97183

用官方提供的数据集训的都挺不错的,可是一旦放到实际中使用,就会出现各种各样的问题,这时就需要自己搜集数据了,具体可参见人脸识别之insightface开源代码使用:训练、验证、测试(2)​​​​​​​但是其用的都是旧代码,新代码直接用mxnet的im2rec就可以了,具体可参见prepare_webface42m 请注意这里存的都是检测后并且对齐的人脸图,大小为112x112

├── 0_0_0000000
│   ├── 0_0.jpg
│   ├── 0_1.jpg
│   ├── 0_2.jpg
│   ├── 0_3.jpg
│   └── 0_4.jpg
├── 0_0_0000001
│   ├── 0_5.jpg
│   ├── 0_6.jpg
│   ├── 0_7.jpg
│   ├── 0_8.jpg
│   └── 0_9.jpg
├── 0_0_0000002
│   ├── 0_10.jpg
│   ├── 0_11.jpg
│   ├── 0_12.jpg
│   ├── 0_13.jpg
│   ├── 0_14.jpg
│   ├── 0_15.jpg
│   ├── 0_16.jpg
│   └── 0_17.jpg
├── 0_0_0000003
│   ├── 0_18.jpg
│   ├── 0_19.jpg
│   └── 0_20.jpg
├── 0_0_0000004

# 1) create train.lst using follow command
python -m mxnet.tools.im2rec --list --recursive train WebFace42M_Root# 2) create train.rec and train.idx using train.lst using following command
python -m mxnet.tools.im2rec --num-thread 16 --quality 100 train WebFace42M_Root

验证在训练过程中就已经评估了,具体做了哪些工作可参见人脸识别之insightface开源代码使用:训练、验证、测试(3)

最后就是部署使用了人脸识别之insightface开源代码使用:训练、验证、测试(4)

如果去找工作,肯定免不了被人问arcloss是怎么实现的,这块可参考insightface源码中arcface代码段理解 


推荐阅读
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
    本文提供了一个完整的教程,介绍了如何通过Anaconda安装tensorflow,并安装运行spyder编译器。文章详细介绍了安装Anaconda、创建tensorflow环境、安装GPU版本tensorflow、安装和运行Spyder编译器以及安装OpenCV等步骤。该教程适用于Windows 8操作系统,并提供了相关的网址供参考。通过本教程,读者可以轻松地安装和配置tensorflow环境,以及运行spyder编译器进行开发。 ... [详细]
  • PatchODAX8: ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • 本文介绍了网页播放视频的三种实现方式,分别是使用html5的video标签、使用flash来播放以及使用object标签。其中,推荐使用html5的video标签来简单播放视频,但有些老的浏览器不支持html5。另外,还可以使用flash来播放视频,需要使用object标签。 ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • Ubuntu 用户安装 Linux Kernel 3.15 RC1
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 寻求更强大的身份和访问管理(IAM)平台的企业正在转向云,并接受身份即服务(IDaaS)的灵活性。要为IAM选择正确的场外解决方案,业务管理人员和IT专业人员必须在实施之前评估安全 ... [详细]
author-avatar
mobiledu2502857673
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有