政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作

news2024/11/18 7:27:10

目录

项目论文介绍 

论文中实际开展的工作

非扩散性的肖像动画

基于扩散的肖像动画

方法论

基于Ubuntu的部署实践开始

1. 克隆代码并准备环境

2. 下载预训练权重

3. 推理

快速上手

驱动视频自动裁剪

运动模板制作

4. Gradio 界面

5. 推理速度评估

社区资源


政安晨的个人主页:政安晨

欢迎 👍点赞✍评论⭐收藏

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

本文目标:在Ubuntu系统上部署使用LivePortrait ,感谢快手团队对开源世界的贡献。

项目地址:https://github.com/KwaiVGI/LivePortrait

论文地址:https://arxiv.org/pdf/2407.03168


项目论文介绍 

上图表达:该项目的模型产生了定性肖像动画。只要输入一张静态的肖像图像,我们的模型就能将其制作成生动的动画、确保无缝拼接,并能精确控制眼睛和嘴唇的动作。

肖像动画旨在从单个源图像中合成逼真的视频,使用它作为外观参考,并利用来自驱动视频、音频、文本或生成的运动(即面部表情和头部姿态)。

该项目不按照主流的基于扩散的方法进行探索和扩展,而是探索和扩展了基于隐式关键点的框架的潜力,该框架能够有效地平衡计算效率和可控性。在此基础上,该项目开发了一个名为LivePortrait的视频驱动肖像动画框架,重点关注更好的泛化性、可控性和效率,以便实际应用。为了提高生成质量和泛化能力,我们将训练数据扩大到约6900万帧高质量图像,采用混合图像-视频训练策略,升级网络架构,并设计更好的运动转换和优化目标。此外,我们发现紧凑的隐式关键点可以有效地表示一种混合形状,并精心提出了一个拼接和两个重新定位模块,利用小型MLP几乎没有计算开销,以增强可控性。实验结果表明,即使与基于扩散的方法相比,我们的框架也显著有效。在配备PyTorch的RTX 4090 GPU上,生成速度达到了12.8毫秒。

现如今,人们经常使用智能手机或其他录像设备来捕捉静态肖像,记录他们宝贵的时刻。iPhone上的实况照片功能可以通过录制拍摄前后1.5秒的时刻将静态肖像变得生动起来,可能是通过一种形式的视频录制实现的。然而,基于最近的进展,如生成对抗网络(GANs)和扩散,各种肖像动画方法使得将静态肖像转化为动态肖像成为可能,而不依赖于特定的录像设备。

在这篇论文中,我们的目标是给静态肖像图像添加动画,使其更具真实感和表现力,并同时追求高推理效率和精确可控性。尽管基于扩散的肖像动画方法在质量方面取得了令人印象深刻的结果,但它们通常计算成本高昂,并且缺乏精确的可控性,例如缝合控制。相反,我们广泛探索了基于隐式关键点的视频驱动框架,并扩展了它们的潜力,以有效平衡通用能力、计算效率和可控性。

论文中实际开展的工作

最近的基于视频的肖像动画方法可以分为非扩散和扩散两种方法,如表所总结。

视频驱动的肖像动画方法摘要

非扩散性的肖像动画

对于非扩散模型,基于隐式关键点的方法使用隐式关键点作为中间运动表示,并通过光流将源肖像图与驱动图像扭曲。FOMM  在每个关键点附近执行一阶Taylor展开,并使用局部仿射变换近似每个关键点附近的运动。MRAA 利用基于PCA的运动估计表示了关节动作。Face vid2vid  通过引入3D隐式关键点表示扩展了FOMM,并实现了自由视角的肖像动画。IWA  基于跨模态注意力改进了扭曲机制,可以扩展到使用多个源图像。为了更灵活地估计光流并更好地处理大尺度运动,TPSM 使用非线性薄板样条变换表示更复杂的运动。同时,DaGAN 利用密集深度图来估计捕捉关键驱动运动的隐式关键点。MCNet 设计了一个以身份表示为条件的记忆补偿网络,以解决复杂驱动运动引起的生成模糊问题。

该项目在工作中使用了预定义的动作表示,如3DMM blendshapes。另一些工作提出了从头学习潜在表达表示的方法。MegaPortrait利用高分辨率图像升级动画分辨率到百万像素。EMOPortraits使用一个富含表情的训练视频数据集和表情增强的损失来表达强烈的动作。

基于扩散的肖像动画

扩散模型通过迭代地去除噪音,从高斯噪声中合成所需的数据样本。之后,提出了潜在扩散模型(LDMs),并将训练和推理过程转移到压缩的潜在空间中以进行高效计算。LDMs已广泛应用于全身舞蹈生成、音频驱动的肖像动画和视频驱动的肖像动画等许多并发工作中。

FADM 是第一个基于扩散的肖像动画方法。它通过预训练的隐式关键点模型获得粗略的动画结果,然后在3DMMs的指导下使用扩散模型得到最终的动画效果。Face Adapter 使用身份适配器来增强源肖像的身份保持,并使用空间条件生成器来生成明确的空间条件,即关键点和前景遮罩,作为中间的动作表示。

一些作品使用了相互自注意力和类似于AnimateAnyone 的时间注意力架构,以实现更好的图像质量和外观保持。AniPortrait 使用明确的空间条件,即关键点,作为中间运动表示方法。X-Portrait 提出直接使用原始驱动视频来为肖像画提供动画效果,而不是使用中间的运动表示方法。它使用了基于隐式关键点的方法进行跨身份训练。MegActor 也使用原始驱动视频来为源肖像画提供动画效果。它使用现有的人脸交换和风格化框架来获取跨身份训练对,并对背景外观进行编码以提高动画的稳定性。

方法论

该项目首先简要回顾了基于视频的人像动画框架face vid2vid ,并介绍了项目的重要改进,旨在增强动画的泛化能力和表现力。然后,论文介绍了精心设计的拼接和重新定位模块(感兴趣的小伙伴可以看原始论文,我们这里是为大家基于ubuntu系统部署项目并应用,所以,论文部分仅是简要介绍,小伙伴们多包涵,嘻嘻 —— 政安晨注),这些模块提供了所需的可控性,且计算开销极小。最后,论文详细介绍了推理流程。

关键效果对比:


咱们接下来即将部署的这个名为 LivePortrait 的 repo 包,含有论文 LivePortrait 的官方 PyTorch 实现: 具有拼接和重定向控制功能的高效肖像动画的 PyTorch 官方实现。 项目团队也正在积极更新和改进此软件源。


基于Ubuntu的部署实践开始

1. 克隆代码并准备环境

git clone https://github.com/KwaiVGI/LivePortrait
cd LivePortrait

# create env using conda
conda create -n LivePortrait python=3.9
conda activate LivePortrait

# install dependencies with pip
# for Linux and Windows users
pip install -r requirements.txt
# for macOS with Apple Silicon users
pip install -r requirements_macOS.txt

过程演绎如下:

下载项目

 

建立环境

安装依赖

注意:确保您的系统已安装 FFmpeg,包括 ffmpeg 和 ffprobe! - 项目团队说明
 —— 在咱们这篇实验中,政安晨的电脑已经安装。

2. 下载预训练权重

下载预训练权重的最简单方法是从 HuggingFace 下载:

# first, ensure git-lfs is installed, see: https://docs.github.com/en/repositories/working-with-files/managing-large-files/installing-git-large-file-storage
git lfs install
# clone and move the weights
git clone https://huggingface.co/KwaiVGI/LivePortrait temp_pretrained_weights
mv temp_pretrained_weights/* pretrained_weights/
rm -rf temp_pretrained_weights

确保目录结构如下或包含以下内容:

pretrained_weights
├── insightface
│   └── models
│       └── buffalo_l
│           ├── 2d106det.onnx
│           └── det_10g.onnx
└── liveportrait
    ├── base_models
    │   ├── appearance_feature_extractor.pth
    │   ├── motion_extractor.pth
    │   ├── spade_generator.pth
    │   └── warping_module.pth
    ├── landmark.onnx
    └── retargeting_models
        └── stitching_retargeting_module.pth

3. 推理

快速上手

# For Linux and Windows
python inference.py

# For macOS with Apple Silicon, Intel not supported, this maybe 20x slower than RTX 4090
PYTORCH_ENABLE_MPS_FALLBACK=1 python inference.py

如上图所示,在执行推理的过程中,您可能会遇到错误,重新安装几个包,如我下图:

再重新执行推理:

成功!

 

查看帮助:

如果脚本运行成功,就会得到一个名为 animations/s6--d0_concat.mp4 的 mp4 输出文件。 该文件包括以下结果:驱动视频、输入图像或视频以及生成结果。

或者,也可以通过指定 -s 和 -d 参数来更改输入:

# source input is an image
python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d0.mp4

# source input is a video ✨
python inference.py -s assets/examples/source/s13.mp4 -d assets/examples/driving/d0.mp4

# more options to see
python inference.py -h

后面的用法,小伙伴们自己探索吧!

驱动视频自动裁剪

若要使用自己的驱动视频,建议您:

—— Crop it to a 1:1 aspect ratio (e.g., 512x512 or 256x256 pixels), or enable auto-cropping by --flag_crop_driving_video.
—— Focus on the head area, similar to the example videos.
—— Minimize shoulder movement.
—— Make sure the first frame of driving video is a frontal face with neutral expression.

以下是通过 --flag_crop_driving_video 进行自动裁剪的案例:

python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d13.mp4 --flag_crop_driving_video

如果发现自动裁剪效果不佳,可以修改 --scale_crop_driving_video、--vy_ratio_crop_driving_video 选项来调整缩放比例和偏移量,或者手动调整。

运动模板制作

您还可以使用自动生成的以 .pkl 结尾的运动模板文件来加快推理速度,并保护隐私,例如:

python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d5.pkl # portrait animation
python inference.py -s assets/examples/source/s13.mp4 -d assets/examples/driving/d5.pkl # portrait video editing

4. Gradio 界面

我们还提供了 Gradio 界面,只需运行即可获得更好的体验:

# For Linux and Windows users (and macOS with Intel??)
python app.py

# For macOS with Apple Silicon users, Intel not supported, this maybe 20x slower than RTX 4090
PYTORCH_ENABLE_MPS_FALLBACK=1 python app.py

您可以根据需要指定 --server_port、--share 和 --server_name 参数!

我们还提供了一个加速选项--flag_do_torch_compile。 首次推理会触发一个优化过程(约一分钟),使后续推理速度提高 20-30%。 不同 CUDA 版本的性能提升可能有所不同。

# enable torch.compile for faster inference
python app.py --flag_do_torch_compile

注意:Windows 和 macOS 不支持此方法。

—— 这也是政安晨坚持探索Linux部署应用各类开源AI框架的原因。

5. 推理速度评估

我们还提供了一个脚本,用于评估每个模块的推理速度:

# For NVIDIA GPU
python speed.py

以下是使用本地 PyTorch 框架和 torch.compile 在 RTX 4090 GPU 上推断一帧图像的结果:

ModelParameters(M)Model Size(MB)Inference(ms)
Appearance Feature Extractor0.843.30.82
Motion Extractor28.121080.84
Spade Generator55.372127.59
Warping Module45.531745.21
Stitching and Retargeting Modules0.232.30.31

注:"缝合 "和 "重定向 "模块的数值代表三个连续 MLP 网络的综合参数数量和总推理时间。

社区资源

探索项目社区提供的宝贵资源,提升您的 LivePortrait 体验:

  • ComfyUI-LivePortraitKJ by @kijai
  • comfyui-liveportrait by @shadowcz007
  • LivePortrait In ComfyUI by @Benji
  • LivePortrait hands-on tutorial by @AI Search
  • ComfyUI tutorial by @Sebastian Kamph
  • Replicate Playground and cog-comfyui by @fofr

项目社区一定是还做出了更多了不起的贡献!


再次感谢开源项目团队的付出,该项目在Ubuntu系统上部署执行,很好地推动了一些相关工作的进展!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1949238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apollo部署与简易架构梳理

文章目录 apollo 安装apollo的基本架构组件机制component编译与加载 节点通讯数据的传输消息读写的实现消息的写端消息读端 常用术语ComponentChannelTaskNodeReader/WriterService/ClientParameter服务发现CRoutineSchedulerMessageDag文件Launch文件Record文件Mainboard Moni…

机会性加密技术:网络安全的新趋势

在当今数字化时代,网络安全已成为各行各业不可忽视的重要议题。随着网络攻击手段的不断演进,传统的加密方式已难以满足复杂多变的安全需求。机会性加密技术(Opportunistic Encryption,简称OE),作为一种新兴…

快速入门Jupyter notebook

快速入门 Jupyter notebook 一、前言(一)优点(二)特点(三)调用运行(四)新建 二、认识界面快捷键(一)三种模式(1)蓝色模式:…

qt做的分页控件

介绍 qt做的分页控件 如何使用 创建 Pagination必须基于一个QWidget创建,否则会引发错误。 Pagination* pa new Pagination(QWidget*);设置总页数 Pagination需要设置一个总的页数,来初始化页码。 pa->SetTotalItem(count);设置可选的每页数量…

Spring中使用到的设计模式及其源码分析

前言 众所周知,Spring框架是一个强大而灵活的开发框架。这不,上次的面试刚问到这些,没防住!!!因此下来总结一下。这篇文章主要介绍Spring中使用到的设计模式,自己做个面试复盘,同时…

51单片机嵌入式开发:19、STC89C52R控制LCD1602码表+数码管+后台数显(串口)

STC89C52R控制LCD1602码表数码管后台数显(串口) 1 概述1.1 项目概述1.2 项目组成部分1.3 功能描述 2 开发环境2.1 支持设备2.2 硬件电路 3 软件代码工程4 演示4.1 Proteus仿真4.2 实物演示 5 总结 1 概述 1.1 项目概述 本项目旨在利用STC89C52R单片机实…

C语言程序设计结构(未完待续...)

文章目录 **C**语言设计的核心(灵魂)**C**语言程序设计的设计结构顺序结构选择结构循环结构 **C**语言的语句 C语言设计的核心(灵魂) 程序 数据结构 算法 算法:对于问题解决的方法思路或者步骤 算法的特征&#x…

mac|安装PostgreSQL

1、官网下载:EDB: Open-Source, Enterprise Postgres Database Management 选择需要的版本: 双击得到的.dmg文件 双击,弹窗选择打开,一路next,然后输入你要设置的密码,默认账号名字为:postgres…

vite构建vue3项目hmr生效问题踩坑记录

vite构建vue3项目hmr生效问题踩坑记录 hmr的好处 以下是以表格形式呈现的前端开发中HMR(热模块替换)带来的好处: 好处描述提升开发效率允许开发者在不刷新整个页面的情况下实时更新修改的代码,减少等待时间保持应用状态在模块替…

一起学Java(1)-新建一个Gradle管理的Java项目

一时兴起,也为了便于跟大家同步学习进展和分享样例代码,遂决定创建一个全新的Java项目,并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点(如Gradle等)。为了紧跟技术潮流和提高操作效率&a…

怎么给PDF文件加密码?关于PDF文件加密的四种方法推荐

怎么给PDF文件加密码?给PDF文件加上密码是保护文件安全的一种重要方法,特别是当需要在不受授权的访问下保护敏感信息时。这个过程不仅仅是简单地设置密码,而是涉及到对文档内容和访问控制的深思熟虑。加密PDF文件可以有效防止未经授权的用户查…

electron TodoList网页应用打包成linux deb、AppImage应用

这里用的是windows的wsl的ubuntu环境 electron应用打包linux应用需要linux下打包,这里用windows的wsl的ubuntu环境进行操作 1)linux ubuntu安装nodejs、electron 安装nodejs: sudo apt update sudo apt upgrade ##快捷安装 curl -fsSL http…

数据缺失补全方法综述

数据缺失补全方法综述 摘要1. 引言2. 数据缺失的类型3. 数据缺失补全方法3.1 简单插补方法3.1.1 均值插补3.1.2 中位数插补3.1.3 众数插补3.1.4 前向填充和后向填充3.1.5 线性插值3.1.6 多重插补 3.2 基于模型的插补方法3.2.1 线性回归插补3.2.2 加权回归插补3.2.3 主成分分析&…

如何改桥接模式

桥接模式主要是解决 路由功能的 因为NAT多层 主要是网络连接数太多时 然后路由器要好 不然光猫 比差路由要强的 光猫 请注意,对光猫的任何设置进行修改前,请一定要备份光猫的配置文件,并在每次修改前都截图保存原始设置信息!不要…

Jacoco 单元测试配置

前言 编写单元测试是开发健壮程序的有效途径,单元测试写的好不好可以从多个指标考量,其中一个就是单元测试的覆盖率。单元测试覆盖率可以看到我们的单元测试覆盖了多少代码行、类、分支等。查看单元测试覆盖率可以使用一些工具帮助我们计算,…

pytest结合allure-pytest插件生成测试报告

目录 一、安装allure-pytest插件 二、下载allure 三、生成allure报告 四、效果展示 一、安装allure-pytest插件 二、下载allure 下载之后解压,解压之后还要配置环境变量(把allure目录下bin目录配置到系统变量的path路径),下…

AcWing1维差分

输入数据a数组 a[i]a0a1a2 … \dots …anb[i]b0b1b2 … \dots …bn b1a1 b2a2-a1 … \dots … bnan-an-1 以上各式累加相消得到 b1b2 … \dots …bnan 也就是说任一an可以由b数组累加求和得到并且任一个bi加上元素c等于在an上面c。 对于区间[L,R], aLb1b2 … \dots …bL aL1…

【短视频矩阵系统源码如何构建?】

在数字化时代,短视频已成为信息传播的重要载体。针对这一趋势,短视频矩阵系统的构建应运而生,集混剪、发布、数据分析及线索跟进于一体,旨在为内容创作者和品牌提供全方位的服务支持。 系统通过混剪功能,能够将长视频或…

接口测试 ★ ✔【接口测试理论、http协议、接口测试文档解析、Postman使用、接口测试用例设计、Request库、UnitTest框架、】

接口测试 接口测试-第01天(接口测试理论、HTTP协议、接口测试流程、接口文档解析)学习⽬标能够分析HTTP协议的请求和响应数据完成ihrm系统指定接⼝的API⽂档解析接⼝测试理论概念作用 ★实现⽅式 ★HTTP协议 ★HTTP协议简介URL格式 ★练习 HTTP请求 ★整…

A Comprehensive Study of Knowledge Editing for Large Language Models

大型语言模型(LLMs)在理解和生成与人类交流密切相关的文本方面表现出了非凡的能力。然而,一个主要的限制在于训练期间的大量计算需求,这是由于它们的广泛参数化而产生的。世界的动态性质进一步加剧了这一挑战,需要经常…