Deep-Live-Cam 实时换脸:inswapper_128 ONNX 模型加载失败 30 分钟修复完整指南
【免费下载链接】Deep-Live-Camreal time face swap and one-click video deepfake with only a single image项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam
Deep-Live-Cam 是一个实时摄像头换脸项目,inswapper_128 是它换脸管线前端的 ONNX 模型,首次运行失败基本都出在它的加载上。本文只排查加载失败及配套环境核查,不涉及换脸画质与编码参数。高频症状有三类:控制台报 CUDA 执行提供器不可用、状态栏提示模型文件缺失、显示 Loading face swapper model 后进程直接退出。
症状快判:先把报错文本对到根因上
先判断症状属于哪一类,对照下表确定排查方向,不要急着动手。
| 报错现象 | 最可能根因 | 第一步动作 |
|---|---|---|
CUDAExecutionProvider not found | onnxruntime-gpu 缺少 cuDNN 等 CUDA 运行库组件 | 先用 cpu 提供器验证 |
Model not found in .../models | models/ 下 FP16、FP32 两个文件均缺失 | ls models/检查并补下载 |
Failed to load library libcudnn.so | venv 里的 cuDNN 未被 onnxruntime 感知 | 回到python run.py启动 |
Failed to create directory ... permission | models/ 目录无写权限 | 换有权限的用户运行或给目录授权 |
Error loading face swapper model | 模型文件损坏或下载截断 | 重新下载并用 onnx.checker 校验 |
CUDA graph init failed, using standard session | CUDA 图不可用,非加载失败 | 忽略,已自动回退标准会话 |
Loading face swapper model后进程直接退出 | 会话创建失败,提供器链全部不可用 | 先用 cpu 提供器隔离,再按本表定位 |
一行命令验证模型文件:CPU 隔离环境问题
⚠️ 改动面最小的操作:不触碰项目里的任何文件。
适用现象:控制台报CUDAExecutionProvider not found。这类报错几乎都是 onnxruntime-gpu 缺少 cuDNN 等运行库组件(没装或版本不匹配),模型文件本身一般没问题。
怎么做:把执行提供器切到 CPU,验证模型能否正常加载。
python run.py --execution-provider cpu
成功后看到什么:模型在 CPU 上完整加载,状态栏出现Face swapper model loaded successfully。帧率会降,但整条管线跑通。
判断口径:cpu 能加载而 cuda 不能,问题在环境侧,不必怀疑模型文件,之后单独查 cuDNN。
30 秒确认 models 目录:补下载缺失换脸文件
适用现象:报Model not found in .../models。
怎么做:先列目录看缺了什么。
ls models/
modules/processors/frame/face_swapper.py的 pre_check 会在缺失时尝试自动下载,网络不通会静默失败,models/ 保持为空。确认为空或文件截断后,按models/instructions.txt给出的地址补下载:
inswapper_128_fp16.onnx:约 275MBinswapper_128.onnx:约 550MB
pre_start 检查只要求两者至少存在其一;两个都在时,CUDA 可用会自动选 FP16,否则回退 FP32。
成功后看到什么:重新启动后模型直接加载,不再提示 Model not found。
回到 run.py 启动:别漏掉 Linux 的 cuDNN 预加载
适用现象:Failed to load library libcudnn.so。
先确认是否用python run.py启动。该文件内置了 Linux 下 cuDNN 的预加载逻辑,直接python -m modules.core启动会绕过它,漏掉这一步。
✅ 修法 A:回到python run.py启动。
修法 B(无界面场景):在modules/globals.py把回退链固定为execution_providers = ["CUDAExecutionProvider", "CPUExecutionProvider"]。运行时按列表顺序执行,第一个提供器跑不动的算子自动落到下一个。
成功后看到什么:加载不再失败。CUDA 确实不可用时,所有子图在 CPU 执行,性能等同纯 CPU。
环境核查表:版本、文件、硬件逐维度过一遍
上面三项修法都没命中时,逐项过这张表。
| 维度 | 检查项 | 期望值 | 不满足时怎么处理 |
|---|---|---|---|
| 软件版本 | Python 版本 | 3.11–3.14,README 推荐 3.14 | 用匹配版本重建 venv |
| 软件版本 | onnxruntime-gpu 版本 | ==1.26.0(requirements.txt 锁定) | 执行pip install -r requirements.txt |
| 软件版本 | CUDA 环境 | CUDA 12.x,nvidia-smi 可见显卡 | 改用 cpu 提供器或修复驱动 |
| 软件版本 | onnxruntime 可用提供器 | 列表非空,含想用的提供器 | 重装对应 onnxruntime 变体 |
| 软件版本 | execution_providers 当前值 | 非空,且每项都在可用列表内 | 重新传--execution-provider参数 |
| 文件与目录 | models/ 目录 | 存在且可写(首次启动自动创建) | 修复目录权限或更换运行用户 |
| 文件与目录 | inswapper_128_fp16.onnx | 约 275MB 且存在 | 按models/instructions.txt下载 |
| 文件与目录 | inswapper_128.onnx | 约 550MB 且存在,二者存其一即可 | 同上 |
| 文件与目录 | GFPGANv1.4.pth | 仅启用 face_enhancer 时需要 | 按 instructions.txt 下载,不用增强器可忽略 |
| 硬件资源 | models/ 磁盘剩余空间 | ≥5GB(模型 + 临时帧) | 清理磁盘或换到空间充足的盘 |
| 硬件资源 | 显存与系统内存 | nvidia-smi / free -h 有余量 | 关闭占用 GPU 的其他进程 |
加载成功之后:三个进阶选项
- FP16/FP32 自动选择:get_face_swapper 在 torch 能感知 CUDA 且 fp16 文件存在时选 FP16,否则回退 FP32。⚠️ 16xx 系显卡 FP16 会出 NaN,注意显卡型号。
- 批处理大小:
modules/processors/frame/core.py按帧数与线程数自动推导 batch_size,没有手工参数;视频处理内存吃紧时,调低--execution-threads与--max-memory间接缩小批大小。 - 日志与完整性:
modules.globals.log_level控制 ffmpeg 日志,切 debug 后输出会变啰嗦;怀疑模型损坏时直接校验:
import onnx onnx.checker.check_model(onnx.load("models/inswapper_128_fp16.onnx"))都不命中:收集两份材料去 issues 找先例
把完整控制台输出和onnxruntime.get_available_providers()的返回值一起收集,到项目官方 issues 页搜索相同报错特征的先例。
【免费下载链接】Deep-Live-Camreal time face swap and one-click video deepfake with only a single image项目地址: https://gitcode.com/GitHub_Trending/de/Deep-Live-Cam
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考