ArcFace-paddle 环境搭建完全指南:PaddlePaddle 安装、识别与检测模块依赖配置
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
本文是 ArcFace-paddle(InsightFace 仓库中基于 PaddlePaddle 的深度人脸检测与识别实现)的官方安装教程导读与深度实践扩展。教程将带你从零完成 PaddlePaddle 2.2.0rc0 的 Docker / pip / 源码编译三种安装方式,依次打通人脸识别模块与 PaddleDetection 检测模块的运行依赖,并通过源码级证据解释每个安装步骤背后的实际用途。读完本文,你可以独立复现 ArcFace-paddle 的训练、评估、导出与推理全流程环境,并理解
requirement.txt中每个依赖、--shm-size、WITH_DISTRIBUTE等关键配置的来龙去脉。
一、安装之前:ArcFace-paddle 的模块组成与环境全景
Arcface-Paddle是 InsightFace 仓库中基于 PaddlePaddle 实现的开源深度人脸检测、识别工具,目前提供三个预训练模型:用于人脸检测的BlazeFace、用于人脸识别的ArcFace和MobileFace(见 recognition/arcface_paddle/README_cn.md)。
在动手安装前,先理解整个工具链的架构,有助于你判断"哪些依赖必须装、哪些可以跳过":
- 识别模块(本文安装教程第 2 部分):基于 PaddlePaddle 的人脸识别主干网络,依赖
recognition/arcface_paddle/requirement.txt中的 Python 包; - 检测模块(本文安装教程第 3 部分):人脸检测能力复用了 PaddleDetection 框架,相关训练代码位于 detection/blazeface_paddle/,需要额外克隆 PaddleDetection 仓库并安装其依赖;
- 部署模块:基于 PaddleInference 的 Whl 包预测部署与 Paddle Serving 预测部署,相关内容位于 recognition/arcface_paddle/deploy/pdserving/。
官方安装教程 install_cn.md 明确给出了一条"按需裁剪"的原则:如果只使用识别模块,可以跳过第 3 部分;如果只使用检测模块,可以跳过第 2 部分。这与上述模块划分一一对应,是安装阶段做减法的重要依据。
二、环境要求:版本矩阵与硬件约束
运行 ArcFace-paddle 需要PaddlePaddle 2.2.0rc0或更高版本,官方安装教程给出了如下环境要求(install_cn.md):
| 软件 | 最低版本要求 | 适用场景 |
|---|---|---|
| python | 3.x | 所有场景 |
| cuda | >= 10.1 | 使用 paddlepaddle-gpu 时 |
| cudnn | >= 7.6.4 | 使用 paddlepaddle-gpu 时 |
| nccl | >= 2.1.2 | 使用分布式训练/评估时 |
| gcc | >= 8.2 | 源码编译或部分本地算子构建时 |
同时官方教程对显卡驱动版本给出了建议:使用 cuda10.1 时,显卡驱动版本建议大于等于 418.39;使用 cuda10.2 时,建议大于等于 440.33。更多 cuda 版本与驱动版本的对应关系可参考 NVIDIA 官方兼容性文档(此处不再赘述,安装前建议先核对驱动与 CUDA 的匹配情况)。
需要特别注意的是nccl这一项:ArcFace-paddle 的训练依赖 PaddlePaddle 高性能分布式能力,官方在后续源码编译部分也强调必须打开WITH_DISTRIBUTE=ON编译选项(详见下文"源码编译"小节)。从仓库中的训练脚本可以看到,scripts/train_static.sh 与 scripts/train_dynamic.sh 均通过python -m paddle.distributed.launch --gpus=0,1,2,3,4,5,6,7启动 8 卡分布式训练,这正是 nccl 与分布式编译选项被列为硬性要求的直接原因。
三、安装 PaddlePaddle:三种方式任选其一
官方教程推荐优先使用 Docker 方式,其次为 pip 安装,最后是源码编译。三种方式安装的是同一套运行时,选择哪种取决于你的硬件环境与是否已有现成的 Python 环境。
3.1 (推荐)Docker 方式:一条命令获得完整环境
官方教程建议使用 Docker 运行 ArcFace-paddle,首次运行会自动拉取镜像,请耐心等待。切换到工作目录后,创建名为face_paddle的容器并将当前目录映射到容器内/paddle目录:
# 切换到工作目录下 cd /home/Projects # CPU 环境(使用 docker 而非 nvidia-docker) # --shm-size=8G 用于保证容器有足够共享内存支撑 Paddle 的数据读取加速,建议 8G 以上 sudo docker run --name face_paddle -v $PWD:/paddle --shm-size=8G --network=host -it paddlepaddle/paddle:2.2.0rc0 /bin/bash # GPU 环境(使用 nvidia-docker) sudo nvidia-docker run --name face_paddle -v $PWD:/paddle --shm-size=8G --network=host -it paddlepaddle/paddle:2.2.0rc0-gpu-cuda11.2-cudnn8 /bin/bash几个参数值得展开说明:
--name face_paddle:为容器命名,便于后续docker exec重新进入;-v $PWD:/paddle:将当前目录挂载到容器内/paddle,训练数据、代码、输出都放在宿主机,容器销毁不丢数据;--shm-size=8G:官方教程特别强调,创建容器时必须设置此参数以保证共享内存充足,否则 Paddle 的 DataLoader 数据读取加速可能因共享内存不足而报错或性能下降,条件允许时建议设置更大值;--network=host:容器与宿主机共享网络命名空间,便于分布式训练时的多机通信。
容器创建后,使用ctrl+P+Q可以退出容器(保持容器后台运行),之后重新进入容器使用:
sudo docker exec -it face_paddle /bin/bash官方教程还提示:如果你不使用 Docker,可以直接跳过本节,从下一节 pip 安装开始执行。关于镜像 tag 的完整列表,可前往 DockerHub 上paddlepaddle/paddle仓库的 tags 页面挑选与本地驱动匹配的版本(官方教程原文提供了该入口,安装时可自行查阅)。
3.2 pip 方式:GPU 与 CPU 版本二选一
在不使用 Docker 的场景下,通过 pip 安装最新 GPU 版本 PaddlePaddle:
pip3 install paddlepaddle-gpu==2.2.0rc0 --upgrade -i https://mirror.baidu.com/pypi/simple如果希望在 CPU 环境中使用:
pip3 install paddlepaddle==2.2.0rc0 --upgrade -i https://mirror.baidu.com/pypi/simple两个细节务必注意(官方教程原文强调):
- 如果先安装了 CPU 版本的 paddlepaddle,之后想切换到 GPU 版本,需要先卸载 CPU 版本再安装 GPU 版本,否则容易导致使用的 paddle 版本混乱;
- 安装命令使用了百度的 PyPI 镜像(
-i https://mirror.baidu.com/pypi/simple),可显著加速国内网络环境下的下载。
3.3 源码编译方式:必须打开 WITH_DISTRIBUTE=ON
官方教程允许从源码编译安装 PaddlePaddle,但给出了两条硬性约束(install_cn.md):
- 从源码编译的 PaddlePaddle 版本号显示为 0.0.0,请确保使用的是 PaddlePaddle 2.2.0rc0 及之后的源码;
- ArcFace-paddle 基于 PaddlePaddle 高性能分布式训练能力,源码编译时必须打开编译选项
WITH_DISTRIBUTE=ON,否则分布式训练功能不可用。
这也与前面环境要求中 nccl >= 2.1.2 的条件呼应:分布式训练链路(paddle.distributed.launch→ nccl 通信)从编译期到运行期都需要正确配置。
3.4 验证安装:三步确认环境就绪
安装完成后,用以下 Python 代码验证 PaddlePaddle 是否安装成功:
import paddle paddle.utils.run_check()查看 PaddlePaddle 版本:
python3 -c "import paddle; print(paddle.__version__)"run_check()会执行一次完整的自检,输出包括基本功能、计算图构建与执行等在内的检查结果,是判断安装是否可用的最直接手段。
四、识别模块环境:requirement.txt 逐个拆解
PaddlePaddle 安装完成后,接下来安装识别模块依赖。进入recognition/arcface_paddle目录执行:
pip3 install -r requirement.txtrequirement.txt(见 recognition/arcface_paddle/requirement.txt)的内容值得逐个拆解,因为它直接决定了后续训练、可视化、模型导出各环节能否跑通:
| 依赖包 | 作用 | 对应功能环节 |
|---|---|---|
visualdl | Paddle 生态的可视化工具 | 训练过程中实时查看 loss 变化(官方 README 推荐用 VisualDL 可视化) |
opencv-python==4.4.0.46 | 图像读取与预处理 | 数据集加载、人脸图像处理 |
pillow/Pillow | 图像处理库 | 图像 IO 与变换 |
numpy | 数值计算 | 特征向量、张量操作 |
easydict | 以属性方式访问字典 | 配置文件解析(见下文源码证据) |
scipy | 科学计算 | 验证集协议(如 cfp_fp 的协议计算) |
sklearn/scikit-learn==0.23.2 | 机器学习工具 | 验证集评估、特征相似度计算 |
requests | HTTP 请求 | 模型/数据下载 |
prettytable | 终端表格打印 | 验证结果、性能结果表格化输出 |
tqdm | 进度条 | 训练/数据加载进度显示 |
onnxruntime | ONNX 推理引擎 | ONNX 格式模型推理 |
onnx | ONNX 模型格式工具 | 模型导出为 ONNX |
paddle2onnx | Paddle 模型转 ONNX | 模型导出转换 |
从源码角度看,easydict是这套配置体系的基石:仓库中的配置文件如 configs/ms1mv2_mobileface.py 以from easydict import EasyDict as edict开头,将所有训练超参组织为config = edict()对象;而 configs/argparser.py 中的get_config()会先加载configs/config.py的默认配置,再用具体任务配置(如ms1mv2_mobileface.py)通过cfg.update(job_cfg)覆盖,最终合并出完整配置。这也是为什么训练脚本只需传--config_file configs/ms1mv2_mobileface.py一个路径,就能自动获得 backbone、loss、batch_size 等全部默认值。
至于onnx、onnxruntime、paddle2onnx三件套,对应的是模型导出环节的能力:官方教程第 7 部分说明模型推理支持 paddle 格式的save inference model和 onnx 两种格式,scripts/inference.sh 中分别用--export_type paddle与--export_type onnx执行两次推理,正需要这三者的支撑。
五、检测模块环境:PaddleDetection 依赖
人脸检测模块(BlazeFace)复用了 PaddleDetection 框架,因此需要额外克隆 PaddleDetection 仓库并安装其依赖:
# 克隆 PaddleDetection 仓库 cd <path/to/clone/PaddleDetection> git clone https://github.com/PaddlePaddle/PaddleDetection.git cd PaddleDetection # 安装其他依赖 pip3 install -r requirements.txt检测相关的完整说明可参考 detection/blazeface_paddle/README_cn.md。官方教程同样提醒:如果只使用识别模块,可以跳过本部分;只使用检测模块,则可跳过上一部分的识别依赖安装。
六、安装完成后的环境自检清单
结合仓库源码,安装完成后建议按以下清单逐项自检,确认环境可以支撑完整的"训练 → 评估 → 导出 → 推理"流水线:
- PaddlePaddle 自检通过:
paddle.utils.run_check()无报错,paddle.__version__输出符合预期(源码编译版为 0.0.0,属正常现象); - 识别依赖可导入:
python3 -c "import easydict, cv2, sklearn, onnx, paddle2onnx"等核心依赖导入无异常; - 分布式可用(如需要多卡训练):能正常执行
python -m paddle.distributed.launch --gpus=0,1,2,3,4,5,6,7 tools/train.py ...形式的命令——这正是 scripts/train_static.sh 与 scripts/train_dynamic.sh 的启动方式; - 检测模块可用(如需要检测+识别全流程):
tools/test_recognition.py能够加载检测与识别模型完成串联推理(对应官方教程第 9 部分的全流程推理)。
值得一提的是,从 configs/ms1mv2_mobileface.py 可以看到训练配置中还涉及config.is_bin = False(数据是否为 bin 格式)、config.num_classes = 85742(MS1M_v2 类别数,MS1M_v3 为 93431)、config.sample_ratio(Partial FC 采样率,小于 1.0 时启用 partial fc 采样,见 configs/argparser.py 中的参数注释)等关键超参。这些参数在安装阶段虽不直接涉及,但它们决定了你对"数据目录、label 文件、显存容量"的规划,建议在准备环境时一并考虑。
七、安装之后:快速进入 ArcFace-paddle 全流程
环境就绪后,官方 README_cn.md 给出了完整的后续路线,可以作为安装完成的验收路径:
- 数据准备:从 insightface 数据集页面下载 MS1M_v2(MS1M-ArcFace)或 MS1M_v3(MS1M-RetinaFace),并通过 tools/mx_recordio_2_images.py 将 MXNet 格式转换为图像目录 +
label.txt的格式; - 训练:单机单卡直接运行
python tools/train.py --config_file configs/ms1mv2_mobileface.py ...,单机 8 卡执行sh scripts/train_static.sh(静态图)或sh scripts/train_dynamic.sh(动态图);多机训练可参考paddle.distributed.launchAPI,与单机的区别在于需要设置--ips参数; - 评估:
sh scripts/validation_static.sh或sh scripts/validation_dynamic.sh,在 lfw、cfp_fp、agedb_30 等验证集上计算准确率; - 导出:
sh scripts/export_static.sh或sh scripts/export_dynamic.sh,导出 PaddleInference 可用的推理模型; - 推理:
sh scripts/inference.sh,支持 paddle 格式与 onnx 格式两种推理路径; - 全流程推理:通过
tools/test_recognition.py --det --rec串联"检测+识别",完成从图像到人脸识别结果的可视化输出。
整个流程的每一步都建立在本教程安装的环境之上——PaddlePaddle 运行时、识别依赖、PaddleDetection 检测依赖三者缺一不可。安装阶段多花十分钟核对版本与参数,就能为后续训练和部署省去大量排障时间。
【免费下载链接】insightfaceState-of-the-art 2D and 3D Face Analysis Project项目地址: https://gitcode.com/GitHub_Trending/in/insightface
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考