搭建 CUDA 环境跑 roop 换脸模型

发现一个有意思的 CV 项目: roop

You only need one image of the desired face. No dataset, no training.

单图片换脸,尝试在本地 WSL 子系统部署。

电脑配置&环境

  • i7-5500U, 16G, NVIDIA GeForce GTX 950M 2G
  • Windows 10 教育版 22H2, WSL Ubuntu 20.04.6 LTS

    安装 CUDA

在 roop 项目的 requirements 里发现了 tensorflow,不过目前好像 pip 安装 tensorflow 并不支持 CUDA 12,(实测确实不支持,除非是 docker 部署), 所以 apt 安装 CUDA 时需要指定版本为 CUDA 11

1
sudo apt-get install cuda-11-6

其余的安装过程是按照 Nvidia 的 guide

安装完成后检查环境

1
2
nvidia-smi
nvcc -V

创建 conda 环境

新建一个 conda 环境,为了稳定使用的 Python 版本为 3.9:

1
conda create -n dl python==3.9

然后按照如下 requirements 安装需要的包:

requirements

absl-py==1.4.0
albumentations==1.3.1
astunparse==1.6.3
beautifulsoup4==4.12.2
cachetools==5.3.1
certifi==2023.5.7
charset-normalizer==3.1.0
cmake==3.26.4
coloredlogs==15.0.1
contourpy==1.1.0
customtkinter==5.2.0
cycler==0.11.0
Cython==0.29.35
darkdetect==0.8.0
easydict==1.10
filelock==3.12.2
flatbuffers==23.5.26
fonttools==4.40.0
gast==0.4.0
gdown==4.7.1
google-auth==2.20.0
google-auth-oauthlib==1.0.0
google-pasta==0.2.0
grpcio==1.54.2
h5py==3.9.0
humanfriendly==10.0
idna==3.4
imageio==2.31.1
importlib-metadata==6.7.0
importlib-resources==5.12.0
insightface==0.7.3
jax==0.4.12
Jinja2==3.1.2
joblib==1.2.0
keras==2.13.1rc0
keras-nightly==2.14.0
kiwisolver==1.4.4
lazy_loader==0.2
libclang==16.0.0
lit==16.0.6
Markdown==3.4.3
MarkupSafe==2.1.3
matplotlib==3.7.1
ml-dtypes==0.2.0
mpmath==1.3.0
networkx==3.1
numpy==1.23.5
nvidia-cublas-cu11==11.10.3.66
nvidia-cublas-cu12==12.1.3.1
nvidia-cuda-cupti-cu11==11.7.101
nvidia-cuda-nvrtc-cu11==11.7.99
nvidia-cuda-runtime-cu11==11.7.99
nvidia-cuda-runtime-cu12==12.1.105
nvidia-cudnn-cu11==8.5.0.96
nvidia-cudnn-cu12==8.9.2.26
nvidia-cufft-cu11==10.9.0.58
nvidia-curand-cu11==10.2.10.91
nvidia-cusolver-cu11==11.4.0.1
nvidia-cusparse-cu11==11.7.4.91
nvidia-nccl-cu11==2.14.3
nvidia-nvtx-cu11==11.7.91
nvidia-tensorrt==99.0.0
oauthlib==3.2.2
onnx==1.14.0
onnxruntime-gpu==1.13.1
opencv-contrib-python==4.7.0.72
opencv-python==4.7.0.72
opennsfw2==0.10.2
opt-einsum==3.3.0
packaging==23.1
Pillow==9.5.0
prettytable==3.8.0
protobuf==4.23.3
psutil==5.9.5
pyasn1==0.5.0
pyasn1-modules==0.3.0
pyparsing==3.1.0
PySocks==1.7.1
python-dateutil==2.8.2
PyWavelets==1.4.1
PyYAML==6.0
qudida==0.0.4
requests==2.31.0
requests-oauthlib==1.3.1
rsa==4.9
scikit-image==0.21.0
scikit-learn==1.2.2
scipy==1.10.1
six==1.16.0
soupsieve==2.4.1
sympy==1.12
tb-nightly==2.14.0a20230621
tensorboard==2.13.0
tensorboard-data-server==0.7.1
tensorflow==2.13.0rc1
tensorflow-estimator==2.13.0rc0
tensorflow-io-gcs-filesystem==0.32.0
tensorrt==8.6.1
tensorrt-bindings==8.6.1
tensorrt-libs==8.6.1
termcolor==2.3.0
tf-estimator-nightly==2.14.0.dev2023062108
tf-nightly==2.14.0.dev20230621
threadpoolctl==3.1.0
tifffile==2023.4.12
torch==2.0.1
torchaudio==2.0.2
torchvision==0.15.2
tqdm==4.65.0
triton==2.0.0
typing_extensions==4.5.0
urllib3==1.26.16
wcwidth==0.2.6
Werkzeug==2.3.6
wrapt==1.14.1
zipp==3.15.0

下载模型,运行

1
git clone https://github.com/s0md3v/roop.git

然后再上面创建好的 conda 环境里运行 run.py:

1
python run.py --execution-provider cuda -s input_image -t input_video -o onput_video --execution-threads 4

实测用 4 个线程就能把显卡的 2 个 G 显存吃满,再增加线程数会报错