政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署Hallo :针对肖像图像动画的分层音频驱动视觉合成

目录

背景介绍 

训练与推理

训练

推理

开始部署

1. 把项目源码下载到本地

2. 创建 conda 环境

3. 使用 pip 安装软件包

4. 下载预训练模型

5. 准备推理数据

6. 运行推理

关于训练

为训练准备数据

训练


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

欢迎 👍点赞✍评论⭐收藏

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

本文目标在Ubuntu系统上部署Hallo,实现训练和推理


背景介绍 

由语音音频输入驱动的肖像图像动画领域在生成逼真的动态肖像方面取得了重大进展。

这项研究深入探讨了同步面部运动的复杂性,以及在基于扩散的方法框架内创建视觉上吸引人、时间上一致的动画。

我们的创新方法摒弃了依赖参数模型进行中间面部表征的传统模式,采用了端到端扩散模式,并引入了分层音频驱动视觉合成模块,以提高音频输入和视觉输出(包括嘴唇、表情和姿势运动)之间的对齐精度。 我们提出的网络架构无缝集成了基于扩散的生成模型、基于 UNet 的去噪器、时序对齐技术和参考网络。 所提出的分层音频驱动视觉合成技术可对表情和姿势多样性进行自适应控制,从而更有效地实现针对不同身份的个性化定制。

通过结合定性和定量分析的综合评估,我们的方法在图像和视频质量、嘴唇同步精度和动作多样性方面都有明显的提升。

项目地址为:

https://github.com/fudan-generative-vision/halloicon-default.png?t=N7T8https://github.com/fudan-generative-vision/hallo

本方法所提议的流程概览如下:

具体而言,我们将包含肖像的参考图像与相应的音频输入整合,并用于驱动肖像动画。

可选的视觉合成权重可用于平衡嘴唇、表情和姿势权重。

ReferenceNet编码全局视觉纹理信息,用于实现一致且可控的角色动画。

人脸和音频编码器分别生成高保真的肖像身份特征和将音频编码为动作信息。

层次化音频驱动的视觉合成模块建立了音频和视觉组件(嘴唇、表情、姿势)之间的关系,并在扩散过程中使用UNet降噪器。

音频驱动的层次视觉合成的可视化及原始全方法与我们提出的层次音频-视觉交叉注意力之间的比较分析。

训练与推理

训练

训练过程包括两个不同的阶段:

(1) 在第一阶段的训练中,利用参考图像和目标视频帧对生成单个视频帧。

VAE编码器和解码器的参数以及面部图像编码器被固定,同时允许优化ReferenceNet和去噪UNet的空间交叉注意力模块的权重,以提高单帧生成能力。提取包含14帧的视频片段作为输入数据,从面部视频片段中随机选择一帧作为参考帧,从同一个视频中选择另一帧作为目标图像。

(2) 在第二阶段的训练中,使用参考图像、输入音频和目标视频数据进行视频序列训练。

ReferenceNet和去噪UNet的空间模块保持静态,专注于增强视频序列生成能力。这个阶段主要侧重于训练层次化的音频-视觉交叉注意力,建立音频作为运动指导和嘴唇、表情和姿势的视觉信息之间的关系。

此外,引入运动模块来改善模型的时间连贯性和平滑性,该模块使用来自AnimateDiff 的预设权重进行初始化。在这个阶段,从视频剪辑中随机选择一个帧作为参考图像。

与现有的肖像图像动画方法在HDTF数据集上的定量比较。本框架提出的方法在生成高质量、时间上连贯的说话头像动画以及优越的嘴唇同步性能方面表现出色。

上图为:在HDTF数据集上与现有方法的定性比较。

推理

在推理阶段,网络以一张参考图像和驾驶音频作为输入,根据相应的音频生成一个动画化的视频序列。为了产生视觉上一致的长视频,我们利用上一个视频片段的最后2帧作为下一个片段的初始k帧,实现逐步递增的视频片段生成。

开始部署

1. 把项目源码下载到本地

git clone git@github.com:fudan-generative-vision/hallo.git

2. 创建 conda 环境

  conda create -n hallo python=3.10conda activate hallo

 

3. 使用 pip 安装软件包

(此外,还需要 ffmpeg:sudo apt-get install ffmpeg, 如果没有安装的话可以在系统中安装一下)

4. 下载预训练模型

您可以从该项目的 HuggingFace 软件仓库轻松获取推理所需的所有预训练模型。

通过下面的 cmd 将预训练模型克隆到 ${PROJECT_ROOT}/pretrained_models 目录中:

git lfs install
git clone https://huggingface.co/fudan-generative-ai/hallo pretrained_models

 

 

 

 

最后,这些预训练模型的组织结构如下:

./pretrained_models/
|-- audio_separator/
|   |-- download_checks.json
|   |-- mdx_model_data.json
|   |-- vr_model_data.json
|   `-- Kim_Vocal_2.onnx
|-- face_analysis/
|   `-- models/
|       |-- face_landmarker_v2_with_blendshapes.task  # face landmarker model from mediapipe
|       |-- 1k3d68.onnx
|       |-- 2d106det.onnx
|       |-- genderage.onnx
|       |-- glintr100.onnx
|       `-- scrfd_10g_bnkps.onnx
|-- motion_module/
|   `-- mm_sd_v15_v2.ckpt
|-- sd-vae-ft-mse/
|   |-- config.json
|   `-- diffusion_pytorch_model.safetensors
|-- stable-diffusion-v1-5/
|   `-- unet/
|       |-- config.json
|       `-- diffusion_pytorch_model.safetensors
`-- wav2vec/`-- wav2vec2-base-960h/|-- config.json|-- feature_extractor_config.json|-- model.safetensors|-- preprocessor_config.json|-- special_tokens_map.json|-- tokenizer_config.json`-- vocab.json

5. 准备推理数据

Hallo 对输入数据有几个简单的要求:

源图像:

1. 应裁剪成正方形。

2. 人脸应是主要焦点,占图像的 50%-70%。

3. 人脸应朝向前方,旋转角度小于 30°(无侧面轮廓)。

驱动音频:

1. 必须是 WAV 格式。

2. 必须是英语,因为我们的训练数据集仅使用英语。

3. 确保人声清晰,背景音乐也可接受。 

项目提供了一些样本供您参考(文件在项目源码中,小伙伴们自行获取 -- 政安晨)。

6. 运行推理

只需运行 scripts/inference.py,并将 source_image 和 driving_audio 作为输入即可:

python scripts/inference.py --source_image examples/reference_images/1.jpg --driving_audio examples/driving_audios/1.wav

动画结果默认保存为 ${PROJECT_ROOT}/.cache/output.mp4。 你可以通过 --output 来指定输出文件名。 您可以在 examples 文件夹中找到更多推理示例。

在使用推理的过程中,您可能会遇到问题,比如提示xformers不可用,重新安装xformers等。

按照提示地址打开xformers官网重新安装:

conda install xformers -c xformers

之后,再重新按照上述方式在miniconda虚拟环境中重装依赖。

接下来,就可以正常操作了,我的示例如下:

python scripts/inference.py --source_image examples/YDBaba/2.jpg --driving_audio examples/YDBaba/1.wav

更多操作说明如下:

usage: inference.py [-h] [-c CONFIG] [--source_image SOURCE_IMAGE] [--driving_audio DRIVING_AUDIO] [--output OUTPUT] [--pose_weight POSE_WEIGHT][--face_weight FACE_WEIGHT] [--lip_weight LIP_WEIGHT] [--face_expand_ratio FACE_EXPAND_RATIO]options:-h, --help            show this help message and exit-c CONFIG, --config CONFIG--source_image SOURCE_IMAGEsource image--driving_audio DRIVING_AUDIOdriving audio--output OUTPUT       output video file name--pose_weight POSE_WEIGHTweight of pose--face_weight FACE_WEIGHTweight of face--lip_weight LIP_WEIGHTweight of lip--face_expand_ratio FACE_EXPAND_RATIOface region

关于训练

为训练准备数据

训练数据使用了一些与推理所用源图像类似的会说话的人脸视频,也需要满足以下要求:

1. 照片应裁剪成正方形。

2. 面部应是主要焦点,占画面的 50%-70%。

3. 面部应朝向前方,旋转角度小于 30°(无侧面轮廓)。

将原始视频整理到以下目录结构中:

dataset_name/
|-- videos/
|   |-- 0001.mp4
|   |-- 0002.mp4
|   |-- 0003.mp4
|   `-- 0004.mp4

您可以使用任何数据集名称,但要确保视频目录的名称如上所示。

接下来,使用以下命令处理视频:

python -m scripts.data_preprocess --input_dir dataset_name/videos --step 1
python -m scripts.data_preprocess --input_dir dataset_name/videos --step 2

:由于步骤 1 和步骤 2 执行不同的任务,因此应按顺序执行。

步骤 1 将视频转换为帧,从每个视频中提取音频,并生成必要的掩码。

步骤 2 使用 InsightFace 生成人脸嵌入,使用 Wav2Vec 生成音频嵌入,需要 GPU。 要进行并行处理,可使用 -p 和 -r 参数。 -p参数指定要启动的实例总数,将数据分成 p 部分。 -r参数指定当前进程应处理的部分。 您需要使用不同的 -r 值手动启动多个实例。

使用以下命令生成元数据 JSON 文件:

python scripts/extract_meta_info_stage1.py -r path/to/dataset -n dataset_name
python scripts/extract_meta_info_stage2.py -r path/to/dataset -n dataset_name

将 path/to/dataset 替换为视频父目录的路径,例如上例中的 dataset_name。 这将在 ./data 目录中生成 dataset_name_stage1.json 和 dataset_name_stage2.json。

训练

更新配置 YAML 文件 configs/train/stage1.yaml 和 configs/train/stage2.yaml 中的数据元路径设置:

#stage1.yaml
data:
  meta_paths:
    - ./data/dataset_name_stage1.json

#stage2.yaml
data:
  meta_paths:
    - ./data/dataset_name_stage2.json

使用以下命令开始训练:

accelerate launch -m \
  --config_file accelerate_config.yaml \
  --machine_rank 0 \
  --main_process_ip 0.0.0.0 \
  --main_process_port 20055 \
  --num_machines 1 \
  --num_processes 8 \
  scripts.train_stage1 --config ./configs/train/stage1.yaml

加速使用说明

加速启动命令用于以分布式设置启动训练过程。

accelerate launch [arguments] {training_script} --{training_script-argument-1} --{training_script-argument-2} ...

支持加速的理由

  • -m, --module: 将启动脚本解释为 Python 模块。
  • --config_file: 抱脸加速的配置文件。
  • --machine_rank: 多节点设置中当前机器的等级。
  • --main_process_ip: 主节点的 IP 地址。
  • --main_process_port: 主节点的端口。
  • --num_machines: 参与训练的节点总数。
  • --num_processes: 训练进程总数,与所有机器的 GPU 总数相匹配。

训练论据

  • {training_script}: The training script, such as scripts.train_stage1 or scripts.train_stage2.
  • --{training_script-argument-1}: Arguments specific to the training script. Our training scripts accept one argument, --config, to specify the training configuration file.

对于多节点训练,需要在每个节点上分别手动运行不同机器等级的命令。

训练细节后续会继续为大家展示。—— 政安晨

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高职院校人工智能人才培养成果导向系统构建、实施要点与评量方法

一、引言 近年来,人工智能技术在全球范围内迅速发展,对各行各业产生了深远的影响。高职院校作为培养高技能人才的重要基地,肩负着培养人工智能领域专业人才的重任。为了适应社会对人工智能人才的需求,高职院校需要构建一套科学、…

独立游戏《星尘异变》UE5 C++程序开发日志5——实现物流系统

目录 一、进出口清单 二、路径计算 三、包裹 1.包裹的数据结构 2.包裹在场景中的运动 四、道路 1.道路的数据结构 2.道路的建造 3.道路的销毁 4.某个有道路连接的建筑被删除 作为一个工厂类模拟经营游戏,各个工厂之间的运输必不可少,本游戏采用的…

Cisco 路由重发布 —— 实现路由信息在不同路由域间的传递

一、技术背景 在实际的组网中,可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备,使用 EIGRP 协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备&#…

主流大数据调度工具DolphinScheduler之数据采集

今天继续给大家分享主流大数据调度工具DolphinScheduler,以及数据的ETL流程。 一:调度工具DS 主流大数据调度工具DolphinScheduler, 其定位:解决数据处理流程中错综复杂的依赖关系 任务支持类型:支持传统的shell任…

人工智能增强的心电图推导的身体质量指数作为未来心脏代谢疾病预测指标| 文献-基于人工智能(AI base)医学影像研究与疾病诊断

Title 题目 Artificial intelligence-enhancedelectrocardiography derived body massindex as a predictor of futurecardiometabolic disease 人工智能增强的心电图推导的身体质量指数作为未来心脏代谢疾病预测指标 01 文献速递介绍 心电图(ECG)可…

ubuntu系统vscode调试c/c++大中型项目

文章目录 1. 插件2. 项目工程3. vsode的配置setting.jsonc_cpp_properties.json 4. 启动调试 前置阅读 vscode调试第一篇 1. 插件 c/c, cmake, cmake tools 2. 项目工程 对于我的项目需要用到很多的三方库,三方库的版本又会有很多,一般都是用cmake编译…

项目笔记| 基于Arduino和IR2101的无刷直流电机控制器

本文介绍如何使用 Arduino UNO 板构建无传感器无刷直流 (BLDC) 电机控制器或简单的 ESC(电子速度控制器)。 无刷直流电机有两种类型:有传感器和无传感器。有感无刷直流电机内置3个霍尔效应传感器,这些传感…

MLIR的TOY教程学习笔记

MLIR TOY Language 文章目录 MLIR TOY Language如何编译该项目ch1: MLIR 前端IR解析ch2: 定义方言和算子 (ODS)1. 定义方言2. 定义OP3. OP相关操作4. 定义OP ODS (Operation Definition Specification)1. 基本定义2. 添加文档3. 验证OP4. 新增构造函数5. 定义打印OP的格式 ch3:…

降雨量预测 | Matlab基于ARIMA-RBF降雨量预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 降雨量预测 | Matlab基于ARIMA-RBF降雨量预测 注:程序和数据放在一个文件夹。 程序语言为matlab,程序可出预测效果图,指标图; 代码特点:参数化编程、参数可方便更改、代…

浅聊 Three.js 屏幕空间反射SSR-SSRShader

浅聊 Three.js 屏幕空间反射SSR(2)-SSRShader 前置基础 渲染管线中的相机和屏幕示意图 -Z (相机朝向的方向)||| -------------- <- 屏幕/投影平面| | || | || | (f) | <- 焦距| | ||…

前端vue框架的项目文件创建及常见Vue指令运用

前言 本文介绍前端Vue框架&#xff0c;先从npm工具创建的Vue项目开始&#xff0c;对项目结构的一些文件用途进行说明&#xff0c;随后对Vue文件编写所用的两种风格&#xff08;选项式API和组合式API风格&#xff09;做了区分&#xff0c;同时对编写代码中常见的生命周期钩子函…

Pytorch使用前期准备

一、检查英伟达驱动和CUDA Toolkit是否正确安装 1.任务管理器性能选项卡中能正确显示显卡型号则表示显卡驱动正确安装 2. CUDA Toolkit会跟随pytorch自动安装 二、虚拟环境的准备 Miniconda — Anaconda documentationhttps://docs.anaconda.com/miniconda/ 1.安装anaconda或者…

腾讯元宝上线“3D角色梦工厂”:快速生成专属3D角色!

7月16日&#xff0c;腾讯旗下大模型应用“腾讯元宝”上线“3D角色梦工厂”&#xff0c;允许用户通过上传一张五官清晰的正面头像&#xff0c;并选择不同的角色模板&#xff0c;迅速生成个人3D角色&#xff01; 技术特点 “3D角色梦工厂”将大模型生成技术与3D应用相结合&#…

大模型(LLM)选择指南:AI解决方案的12个决策点

今天我们来看看国外各家领先的大型语言模型&#xff08;LLM&#xff09;&#xff0c;这些模型来自OpenAI、Google、Anthropic、Cohere、Meta、Mistral AI以及Databricks等不同的供应商。我们会根据几个关键因素来评估这些模型&#xff0c;包括性能&#xff08;涵盖价格、质量和…

NET 语言识别,语音控制操作、语音播报

System.Speech. 》》System.Speech.Synthesis; 语音播报 》》System.Speech.Recognition 语音识别 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Speech.Recog…

在 Windows 上运行 Linux:WSL2 完整指南(二)

系列文章目录 在 Windows 上运行 Linux&#xff1a;WSL2 完整指南&#xff08;一&#xff09;&#x1f6aa; 在 Windows 上运行 Linux&#xff1a;WSL2 完整指南&#xff08;二&#xff09;&#x1f6aa; 文章目录 系列文章目录前言四、常见问题及解决方法问题二&#xff1a;0…

昇思25天学习打卡营第17天|LLM-基于MindSpore的GPT2文本摘要

打卡 目录 打卡 环境准备 准备阶段 数据加载与预处理 BertTokenizer 部分输出 模型构建 gpt2模型结构输出 训练流程 部分输出 部分输出2&#xff08;减少训练数据&#xff09; 推理流程 环境准备 pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspo…

AV1技术学习:Affine Motion Compensation

一、Affine Model Parameter 除了传统的平移运动补偿&#xff0c;AV1 还支持仿射变换模型&#xff0c;将当前像素点 (x, y) 通过以下方式投影到参考帧中的预测像素点 (x, y). 参数 (h13, h23) 对应于平移模型中使用的常规运动向量。 参数 h11 和 h22 控制垂直和水平轴上的比例…

Spring后端框架复习总结

之前写的博客太杂,最近想把后端框架的知识点再系统的过一遍,主要是Spring Boot和Mybatis相关,带着自己的理解使用简短的话把一些问题总结一下,尤其是开发中和面试中的高频问题,基础知识点可以参考之前写java后端专栏,这篇不再赘述。 目录 Spring什么是AOP?底层原理?事务…

【HarmonyOS NEXT】网络请求 - 分页加载

分页加载关键字&#xff1a;onReachEnd 一、申请网络权限 在 module.json5 文件中&#xff0c;添加网络权限&#xff1a; {"module": {..."requestPermissions": [{"name": "ohos.permission.INTERNET","usedScene": {&qu…