FasterLivePortrait: 实时为肖像注入生命力!
原始仓库:LivePortrait,感谢作者的分享
新特性:
- 使用TensorRT在RTX 3090 GPU上实现了LivePortrait的实时运行,达到30+FPS。这是渲染单帧的速度,包括前处理和后处理,而不仅仅是模型推理速度。
- 实现了LivePortrait模型到Onnx模型的转换,在RTX 3090上使用onnxruntime-gpu达到约70ms/帧(~12 FPS)的推理速度,便于跨平台部署。
- 无缝支持原生gradio应用,速度提升数倍,并支持多张人脸和动物模型的同时推理。
如果您觉得这个项目有用,请给它一个星星 ✨✨
更新日志
- 2024/08/11: 优化paste_back速度并修复一些bug。
- 使用torchgeometry + cuda优化paste_back函数,显著提升速度。示例:
python run.py --src_image assets/examples/source/s39.jpg --dri_video assets/examples/driving/d0.mp4 --cfg configs/trt_infer.yaml --paste_back --animal
- 修复了Xpose ops在某些GPU上导致错误的问题和其他bug。请使用最新的docker镜像:
docker pull shaoguo/faster_liveportrait:v3
- 使用torchgeometry + cuda优化paste_back函数,显著提升速度。示例:
- 2024/08/07: 增加动物模型和MediaPipe模型支持,不用再担心版权问题。
-
增加动物模型支持。
- 下载动物ONNX文件:
huggingface-cli download warmshao/FasterLivePortrait --local-dir ./checkpoints
,然后转换为TRT格式。 - 更新Docker镜像:
docker pull shaoguo/faster_liveportrait:v3
。使用动物模型:python run.py --src_image assets/examples/source/s39.jpg --dri_video 0 --cfg configs/trt_infer.yaml --realtime --animal
- Windows用户可以从release页面下载最新的Windows一体包,解压后即可使用。
- 简单使用教程:
- 下载动物ONNX文件:
-
使用MediaPipe模型替代InsightFace
- Web使用:
python app.py --mode trt --mp
或python app.py --mode onnx --mp
- 本地摄像头:
python run.py --src_image assets/examples/source/s12.jpg --dri_video 0 --cfg configs/trt_mp_infer.yaml
- Web使用:
-
- 2024/07/24: Windows集成包,免安装,一键运行,支持TensorRT和OnnxruntimeGPU。感谢 @zhanghongyong123456 在这个issue中的贡献。
- [可选] 如果你的Windows电脑已经安装了CUDA和cuDNN,请跳过这一步。我只验证了CUDA 12.2。如果你没有安装CUDA或遇到CUDA相关错误,需要按以下步骤操作:
- 从release页面下载免安装的Windows集成包并解压。
- 进入
FasterLivePortrait-windows
,双击all_onnx2trt.bat
转换onnx文件,需要一些时间。 - Web演示:双击
app.bat
,打开网页:http://localhost:9870/
- 实时摄像头运行,双击
camera.bat
,按q
停止。如果要更换目标图片,命令行运行:camera.bat assets/examples/source/s9.jpg
- 2024/07/18: 增加macOS支持(无需Docker,只需Python)。M1/M2芯片较快,但仍然很慢😟
- 安装ffmpeg:
brew install ffmpeg
- 设置Python 3.10虚拟环境。推荐使用miniforge:
conda create -n flip python=3.10 && conda activate flip
- 安装依赖:
pip install -r requirements_macos.txt
- 下载ONNX文件:
huggingface-cli download warmshao/FasterLivePortrait --local-dir ./checkpoints
- 测试:
python app.py --mode onnx
- 安装ffmpeg:
- 2024/07/17: 增加Docker环境支持,提供可运行镜像。
环境设置
- 选项1:Docker(推荐)。提供了一个docker镜像,无需手动安装onnxruntime-gpu和TensorRT。
- 根据您的系统安装Docker
- 下载镜像:
docker pull shaoguo/faster_liveportrait:v3
- 执行以下命令,将
$FasterLivePortrait_ROOT
替换为您下载 FasterLivePortrait 的本地目录:docker run -it --gpus=all \ --name faster_liveportrait \ -v $FasterLivePortrait_ROOT:/root/FasterLivePortrait \ --restart=always \ -p 9870:9870 \ shaoguo/faster_liveportrait:v3 \ /bin/bash
- 选项2:创建一个新的 Python 虚拟环境并手动安装必要的 Python 包。
- 首先,安装 ffmpeg
- 运行
pip install -r requirements.txt
- 然后按照下面的教程安装 onnxruntime-gpu 或 TensorRT。请注意,这仅在 Linux 系统上测试过。
Onnxruntime 推理
- 首先,下载转换后的 onnx 模型文件:
huggingface-cli download warmshao/FasterLivePortrait --local-dir ./checkpoints
。 - (Docker中可忽略)如果您想使用 onnxruntime cpu 推理,只需
pip install onnxruntime
。但是,cpu 推理极其缓慢,不推荐使用。最新的 onnxruntime-gpu 仍不支持 grid_sample cuda,但我找到了一个支持它的分支。按以下步骤从源码安装onnxruntime-gpu
:git clone https://github.com/microsoft/onnxruntime
git checkout liqun/ImageDecoder-cuda
。感谢 liqun 提供的 grid_sample cuda 实现!- 运行以下命令进行编译,根据您的机器更改
cuda_version
和CMAKE_CUDA_ARCHITECTURES
:
./build.sh --parallel \ --build_shared_lib --use_cuda \ --cuda_version 11.8 \ --cuda_home /usr/local/cuda --cudnn_home /usr/local/cuda/ \ --config Release --build_wheel --skip_tests \ --cmake_extra_defines CMAKE_CUDA_ARCHITECTURES="60;70;75;80;86" \ --cmake_extra_defines CMAKE_CUDA_COMPILER=/usr/local/cuda/bin/nvcc \ --disable_contrib_ops \ --allow_running_as_root
pip install build/Linux/Release/dist/onnxruntime_gpu-1.17.0-cp310-cp310-linux_x86_64.whl
- 使用 onnxruntime 测试管道:
python run.py \ --src_image assets/examples/source/s10.jpg \ --dri_video assets/examples/driving/d14.mp4 \ --cfg configs/onnx_infer.yaml
TensorRT 推理
- (Docker中可忽略)安装 TensorRT。记住 TensorRT 的安装路径。
- (Docker中可忽略)安装 grid_sample TensorRT 插件,因为模型使用的 grid sample 需要 5D 输入,而原生 grid_sample 运算符不支持。
git clone https://github.com/SeanWangJS/grid-sample3d-trt-plugin
- 将
CMakeLists.txt
中第30行修改为:set_target_properties(${PROJECT_NAME} PROPERTIES CUDA_ARCHITECTURES "60;70;75;80;86")
export PATH=/usr/local/cuda/bin:$PATH
mkdir build && cd build
cmake .. -DTensorRT_ROOT=$TENSORRT_HOME
,将 $TENSORRT_HOME 替换为您自己的 TensorRT 根目录。make
,记住 .so 文件的地址,将scripts/onnx2trt.py
和src/models/predictor.py
中的/opt/grid-sample3d-trt-plugin/build/libgrid_sample_3d_plugin.so
替换为您自己的 .so 文件路径
- 下载 ONNX 模型文件:
huggingface-cli download warmshao/FasterLivePortrait --local-dir ./checkpoints
。将所有 ONNX 模型转换为 TensorRT,运行sh scripts/all_onnx2trt.sh
和sh scripts/all_onnx2trt_animal.sh
- 使用 tensorrt 测试管道:
python run.py \ --src_image assets/examples/source/s10.jpg \ --dri_video assets/examples/driving/d14.mp4 \ --cfg configs/trt_infer.yaml
- 使用摄像头实时运行:
python run.py \ --src_image assets/examples/source/s10.jpg \ --dri_video 0 \ --cfg configs/trt_infer.yaml \ --realtime
Gradio 应用
- onnxruntime:
python app.py --mode onnx
- tensorrt:
python app.py --mode trt
- 默认端口为9870。打开网页:
http://localhost:9870/
关于我
关注我的视频号,持续更新我的 AIGC 内容。欢迎随时联系我洽谈合作机会。