ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

InsightFace arcface_torch 训练数据准备实战:WebFace42M 数据集下载、洗牌与 rec 格式转换全指南

2026/9/10 22:03:35 拓冰建站 浏览量
InsightFace arcface_torch 训练数据准备实战:WebFace42M 数据集下载、洗牌与 rec 格式转换全指南 InsightFace arcface_torch 训练数据准备实战WebFace42M 数据集下载、洗牌与 rec 格式转换全指南【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface本文是 InsightFace 仓库中 arcface_torch 训练框架 的数据准备指南以官方文档 prepare_webface42m.md 为核心骨架完整讲解 WebFace42M 数据集的获取、目录组织、环境依赖以及如何通过 MXNet 的 im2rec 工具生成可供 DALI 与 PyTorch 训练链路直接消费的 shuffled.rec/.idx文件。读完本文你将掌握把 WebFace42M 从原始图片转换为train.lst、train.rec、train.idx三件套的完整流程并能正确理解 arcface_torch 中wf42m_*系列配置如何与该数据格式对接为大规模人脸识别训练奠定数据基础。1. WebFace42M 是什么数据集构成与规模WebFace42M 是当前开源社区规模最大的人脸识别训练数据集之一官方描述其由约200 万个身份ID、4250 万张图片构成。arcface_torch 的配置文件中给出了精确的数字作为训练时的硬约束config.num_classes 2059906身份/类别数config.num_image 42474557图片总数以上数值见 wf42m_pfc02_r100.py 等所有wf42m_*系列配置文件也印证了 README 中 2M IDs, 42.5M images 的概括见 arcface_torch README。从组织方式上看WebFace42M 并非单一整体而是由两个子数据集拼接而成WebFace4M包含 1 个目录编号0WebFace12M包含 3 个目录编号0、1、2。因此解压后的原始数据会呈现10 个目录编号 09的结构这 10 个目录共同构成完整的 WebFace42M。下载渠道数据集由 face-benchmark 官方发布页面提供。下载完成后你需要将全部压缩包解压并合并到同一个根目录中该根目录即下文所称的WebFace42M_Root。2. 原始数据目录结构理解 im2rec 的输入约定无论图片来自哪个子集解压后的目录组织方式是一致的每个子目录代表一个身份子目录内的每张 jpg 文件即为该身份的一张人脸样本。官方文档给出的示例结构如下/WebFace42M_Root ├── 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 │ ...这种每身份一个文件夹的布局与mxnet.tools.im2rec的--recursive模式天然匹配im2rec 会递归遍历根目录将每个文件夹视为一个类别label文件夹下的每张图片视为一条样本并按遍历顺序自动分配类别编号。这正是下一步生成train.lst的基础。3. 环境依赖安装在生成 rec 文件前需要先确保 Python 环境具备图像解码能力并补齐系统级图像处理库。官方文档给出了如下依赖清单pip install opencv-python apt-get update apt-get install ffmpeg libsm6 libxext6 -y说明opencv-python供 im2rec 读取 jpg 图片并做编码/解码ffmpeg、libsm6、libxext6是 OpenCV 在无头headless服务器环境下运行所需的系统动态库缺失时 im2rec 可能因找不到共享库而直接报错若你的运行环境是 Docker 或纯净容器apt-get update是必要的先行步骤。此外生成 rec 依赖 MXNet 工具链需要环境中已安装mxnetarcface_torch 的 dataset.py 同样依赖mxnet的recordio模块来读取 rec 文件因此 mxnet 是训练链路中的必备依赖。4. 核心步骤生成 Shuffled Rec 文件DALI 专用格式4.1 为什么必须是Shuffled rec官方文档特别强调了两个关键事实Shuffled 的.rec文件对 NVIDIA DALI 至关重要未做洗牌的 rec 会导致训练性能下降DALI 依赖 rec 内部的样本顺序做流式随机采样未洗牌时数据分布的随机性差InsightFace 风格生成的原始 rec 文件与 NVIDIA DALI 不兼容必须使用mxnet.tools.im2rec重新生成。这与 arcface_torch 的数据加载设计相呼应在 dataset.py 的get_dataloader中框架支持两种路径——要么通过MXFaceDataset基于mxnet.recordio逐条读取要么在config.dali True时走dali_data_iter基于 NVIDIA DALI 的fn.readers.mxnet读取同一份 rec/idx 文件见 dataset.py。两种方式都指向根目录下的train.rec与train.idx因此这份洗牌后的标准 rec是整个训练链路的数据基石。此外arcface_torch README 还提供了另一种洗牌途径内置脚本 scripts/shuffle_rec.py用法为python scripts/shuffle_rec.py 数据集目录它会生成一个shuffled_目录名的新目录其中train.rec内的样本顺序已被打乱见 README。两种方式二选一即可im2rec 路线适合从原始图片开始完整重建shuffle_rec.py 适合对已有的 InsightFace 风格 rec 做二次洗牌。4.2 第一步生成 train.lst 清单文件在WebFace42M_Root的父目录中执行以下命令python -m mxnet.tools.im2rec --list --recursive train WebFace42M_Root参数解析参数作用--list仅生成清单list文件不打包图片输出train.lst--recursive递归遍历根目录下的所有子目录每个子目录作为一个类别train输出清单文件的前缀名生成train.lstWebFace42M_Root原始图片根目录路径生成的train.lst每行格式为图片索引 类别ID 相对路径它是下一步打包 rec 的索引依据。对 WebFace42M 这种 4247 万张图片的规模此步骤会持续一段时间属于正常现象。4.3 第二步生成 train.rec 与 train.idx清单生成后执行打包命令python -m mxnet.tools.im2rec --num-thread 16 --quality 100 train WebFace42M_Root参数解析参数作用--num-thread 16使用 16 个线程并行编码图片可显著缩短打包耗时线程数可按机器 CPU 核数调整--quality 100JPEG 编码质量0100设为 100 表示无损级质量避免人脸细节在 rec 打包阶段被二次压缩损失train前缀名与上一步一致WebFace42M_Root原始图片根目录路径4.4 产物清单与校验流程结束后你将获得三个文件文件用途train.lst清单文件记录索引、类别与路径的映射训练时不再直接使用可保留备查train.rec打包后的 RecordIO 二进制数据文件含全部图片与标签train.idx索引文件供随机访问 rec 中的任意样本其中train.idx与train.rec是训练直接使用的两个文件。它们必须放在同一个目录下通常命名为WebFace42M且该目录路径需与训练配置中的config.rec完全一致详见下一节。5. 与 arcface_torch 训练链路对接5.1 目录规划与 RAM 优化建议WebFace42M 数据量极大官方在多个配置文件中给出了一条性能优化建议将数据挂载到 tmpfs 内存盘以规避磁盘 I/O 瓶颈。配置注释中的典型做法见 wf42m_pfc02_r100.pymount -t tmpfs -o size140G tmpfs /train_tmp即把/train_tmp挂载为 140GB 的 tmpfs官方机器 RAM 为 256G再将 rec 数据解压/拷贝到/train_tmp/WebFace42M。这样 DALI 或 DataLoader 读取 rec 时走内存而非磁盘训练吞吐量可大幅提升。5.2 配置文件中的关键参数以 wf42m_pfc02_r100.py 为例与数据准备直接相关的配置项如下config.rec /train_tmp/WebFace42M # rec/idx 所在目录必须与实际目录一致 config.num_classes 2059906 # 类别数身份数与数据集一致 config.num_image 42474557 # 图片总数用于学习率调度等计算 config.dali False # 是否启用 NVIDIA DALI 读取 config.dali_aug False # 是否启用 DALI 内联数据增强需要特别注意的是config.rec指向的是包含train.rec与train.idx的目录而不是 rec 文件本身。在 dataset.py 的get_dataloader中框架会自行拼接rec os.path.join(root_dir, train.rec) idx os.path.join(root_dir, train.idx)随后优先检测该目录下是否存在train.rec与train.idx存在则走MXFaceDatasetmxnet.recordio 读取否则回退到ImageFolder直接读原始图片目录见 dataset.py。5.3 DALI 模式base.py 中的开关DALI 相关开关定义在公共配置 configs/base.py# For Large Sacle Dataset, such as WebFace42M config.dali False config.dali_aug Falseconfig.dali True时训练将走dali_data_iter见 dataset.py由 NVIDIA DALI 直接读取 mxnet rec 格式支持initial_fill32768的洗牌缓冲、多 shard 切分num_shardsworld_size、shard_idrank等分布式特性config.dali_aug True时额外启用 DALI GPU 内联的随机缩放、高斯模糊、HSV 抖动、灰度化、随机水平翻转等增强算子见 dataset.py增强过程在 GPU 上完成不占用 CPU 与 PyTorch DataLoader 开销。这也再次解释了本文第 4.1 节反复强调洗牌的原因DALI 的fn.readers.mxnet依赖random_shuffle在initial_fill缓冲区内做随机采样若 rec 内部样本本身高度有序洗牌缓冲的随机性会被稀释最终表现为训练精度或收敛速度下降。5.4 启动大规模分布式训练数据就绪后即可参照 README 中的分布式训练命令启动。以双机 16 卡训练 r100 为例见 READMENode 0torchrun --nproc_per_node8 --nnodes2 --node_rank0 \ --master_addrip1 --master_port12581 \ train_v2.py configs/wf42m_pfc02_16gpus_r100Node 1torchrun --nproc_per_node8 --nnodes2 --node_rank1 \ --master_addrip1 --master_port12581 \ train_v2.py configs/wf42m_pfc02_16gpus_r100在训练启动时train_v2.py通过get_dataloader(cfg.rec, ...)加载上一步生成的 rec 数据见 train_v2.py配合 PartialFC 稀疏采样sample_rate与混合精度fp16完成 200 万类别量级的人脸识别训练。6. 常见问题与注意事项rec 与 idx 必须成对且同目录训练链路会同时拼接train.rec与train.idx缺一不可否则MXFaceDataset判定失败并回退到ImageFolder逐张读图训练速度会急剧下降--quality建议保持 100人脸识别对图像细节敏感打包阶段的 JPEG 二次压缩会引入额外噪声保持无损级质量是官方推荐做法--num-thread按机器调整16 线程是官方示例CPU 核数较少的机器可适当降低避免线程竞争反而拖慢打包DALI 与洗牌的强绑定关系若计划启用config.dali True务必保证 rec 是 shuffled 格式若走默认的MXFaceDataset路径洗牌由DistributedSamplershuffleTrue完成但对大规模数据仍建议保留 shuffled rec 以获得最佳 I/O 模式磁盘与内存规划完整 WebFace42M 的 rec 体量在百 GB 量级需预留充足磁盘空间使用 tmpfs 时注意内存容量约束官方 256G RAM 挂 140G tmpfs避免内存溢出导致机器不稳定配置文件逐一对应仓库提供了多档 WebFace42M 训练配置如 wf42m_pfc02_r100_32gpus.py、wf42m_pfc02_16gpus_mbf_bs8k.py、wf42m_pfc0008_32gpu_r100.py 等它们的rec、num_classes、num_image均指向同一份数据按 GPU 数量与 backbone 选择即可。7. 总结WebFace42M 数据准备的核心链路可概括为下载解压10 个目录→ 安装依赖 → im2rec 生成train.lst→ im2rec 并行打包生成 shuffledtrain.rec/train.idx→ 将目录挂载到高速存储推荐 tmpfs→ 在wf42m_*配置中设置rec/num_classes/num_image并启动分布式训练。其中洗牌是衔接 NVIDIA DALI 与大规模人脸识别训练的关键一环也是本指南区别于普通数据打包教程的核心要点。按照上述步骤操作即可让 WebFace42M 无缝接入 arcface_torch 的高效训练管线为 200 万身份、4250 万图片规模的人脸识别模型训练铺平数据道路。【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考