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

news2024/9/21 13:46:50

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

欢迎 👍点赞✍评论⭐收藏

收录专栏: 零基础玩转各类开源AI项目

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

本文目标在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.10
  conda 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_IMAGE
                        source image
  --driving_audio DRIVING_AUDIO
                        driving audio
  --output OUTPUT       output video file name
  --pose_weight POSE_WEIGHT
                        weight of pose
  --face_weight FACE_WEIGHT
                        weight of face
  --lip_weight LIP_WEIGHT
                        weight of lip
  --face_expand_ratio FACE_EXPAND_RATIO
                        face 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.coloradmin.cn/o/1934802.html

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

相关文章

Linux——Shell脚本和Nginx反向代理服务器

1. Linux中的shell脚本【了解】 1.1 什么是shell Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁 Shell 既是一种命令语言,有是一种程序设计语言 Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问…

香橙派AIpro-携手华为-为AI赋能

文章目录 香橙派AIpro-携手华为-为AI赋能开箱和功能介绍开箱功能介绍 环境搭建镜像烧录进入系统 测试项目YOLOv5部署YOLOv5识别单张图片实时识别视频使用Ascend测试yolov5 产品评价 香橙派AIpro-携手华为-为AI赋能 今天新入手了一款香橙派AIPro,让我们一起跟着文章…

ELK日志分析系统部署文档

一、ELK说明 ELK是Elasticsearch(ES) Logstash Kibana 这三个开源工具组成,官方网站: The Elastic Search AI Platform — Drive real-time insights | Elastic 简单的ELK架构 ES: 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它…

适用于618/7xx芯片平台 AT开发 远程FOTA升级指南教程

简介 AT版本的远程升级主要是对AT固件版本进行升级,实际方式为通过合宙官方IOT平台升级或者使用自己搭建的服务器进行升级服务。 该文档教程流程适用于 618/716S/718P 芯片平台的Cat.1模块 合宙IOT平台配置 升级日志 —— 如何查看 升级日志 —— 响应码列表 响应…

算法之判断对称二叉树

94. 二叉树的中序遍历101. 对称二叉树 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:fa…

国产大模型速度测评,第一名竟然是它。。。

原文首发:国产大模型速度测评,第一名竟然是它。。。经过一段时间调研,我选择了一些国内比较知名的大模型进行速度测评,按照模型参数量及API调用价格,分为了三个档次,分别对应经济型、高性价比型、旗舰型。h…

【Django】网上蛋糕商城后台-商品管理

1.商品管理功能 当管理员点击商品管理时,发送服务器请求 path(admin/goods_list/, viewsAdmin.goods_list), # 处理商品列表请求 def goods_list(request):try:type request.GET["type"]except:type 0try:ym request.GET["ym"]except:ym …

【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列预测|附代码数据

全文链接:https://tecdat.cn/?p37019 分析师:Haopeng Li 随着我国股票市场规模的不断扩大、制度的不断完善,它在金融市场中也成为了越来越不可或缺的一部分。 【视频讲解】神经网络、Lasso回归、线性回归、随机森林、ARIMA股票价格时间序列…

Haproy服务

目录 一.haproxy介绍 1.主要特点和功能 2.haproxy 调度算法 3.haproxy 与nginx 和lvs的区别 二.安装 haproxy 服务 1. yum安装 2.第三方rpm 安装 3.编译安装haproxy 三.配置文件详解 1.官方地址配置文件官方帮助文档 2.HAProxy 的配置文件haproxy.cfg由两大部分组成&…

【MQTT(3)】开发一个客户端,QT-Android安卓手机版本

手机版本更加方便 生成安卓库 参考了这个代码 在编译Mosquitto以支持安卓平台时,主要涉及到使用Android NDK(Native Development Kit)进行交叉编译。环境的准备参考之前的博客【QT开发(17)】2023-QT 5.14.2实现Andr…

jenkins添加ssh证书

1、生成ssh密匙:windows生成ssh密匙-CSDN博客 2、添加添加ssh凭证:jenkins路由地址为:/manage/credentials/store/system/domain/_/ 点击添加凭证 选择第二个,将生成的私匙 id_rsa 里边的内容赋值到密钥,id留空自动…

使用小波分析实现文字种类自动识别

文章目录 数据简介开始实验小波分解得出结果结果分析误差分析 数据简介 各找一篇中文,日文,韩文,英文,俄文较长的学术论文。将论文转化为JPG格式。拆分每张JPG生成更多小的JPG。最终获得很多5个不同语言的JPG并且自带标签。数据链…

网安速查引擎(厂商设备大全)

速查引擎 斯元的速查引擎以其全面、精准的信息整合和便捷的搜索功能,大大缩短了用户查找相关厂商和产品信息的时间,从而提高了工作效率和决策质量。用户可以轻松查阅到各个赛道中的领先厂商和最新技术,帮助企业快速找到适合的合作伙伴和解决方…

逆向案例二十五——webpack所需模块函数很多,某翼云登录参数逆向。

解决步骤: 网址:aHR0cHM6Ly9tLmN0eXVuLmNuL3dhcC9tYWluL2F1dGgvbG9naW4 不说废话,密码有加密,直接搜索找到疑似加密位置打上断点。 再控制台打印,分析加密函数 有三个处理过程,b[g]得到的是用户名,b[f] 对…

HiFi-GAN——基于 GAN 的声码器,能在单 GPU 上生成 22 KHz 音频

拟议的 HiFiGAN 可从中间表征生成原始波形 源码地址:https://github.com/NVIDIA/DeepLearningExamples 论文地址:https://arxiv.org/pdf/2010.05646.pdf 研究要点包括 **挑战:**基于 GAN 的语音波形生成方法在质量上不及自回归模型和基于流…

Linux部署Prometheus+Grafana

【Linux】PrometheusGrafana 一、Prometheus(普罗米修斯)1、Prometheus简述2、Prometheus特点3、Prometheus生态组件4、Prometheus工作原理 二、部署Prometheus1、系统架构2、部署Prometheus3、修改配置文件4、配置系统启动文件 三、部署 Node Exporter …

Spring MVC-什么是Spring MVC?

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 今天你敲代码了吗 文章目录 1.MVC定义2. Spring MVC 官方对于Spring Web MVC的描述这样的: Spring Web MVC is the original web framework built on the Servlet APl and has been includedin the Spring Frame…

P1-AI产品经理--九五小庞

产品经理的定位 AI基于现有业务挖掘AI应用场景,服务提供商选择及算法定制等,配合已有产品完成整体产品工工资基于从事医疗行业的考虑,我们走的应该是AI产品经理(软件型) AI产品经理(行业型) AI…

JavaEE:Lombok工具包的使用以及EditStarter插件的安装

Lombok是一个Java工具库&#xff0c;通过添加注解的方式&#xff0c;简化Java的开发。 目录 1、引入依赖 2、使用 3、原理解释 4、更多使用 5、更快捷的引入依赖 1、引入依赖 <dependency><groupId>org.projectlombok</groupId><artifactId>lomb…

STM32全栈嵌入式人脸识别考勤系统:融合OpenCV、Qt和SQLite的解决方案

1. 项目概述 本项目旨在设计并实现一个基于STM32的全栈人脸识别考勤系统。该系统结合了嵌入式开发、计算机视觉和数据库技术&#xff0c;实现了自动人脸检测、识别和考勤记录功能。 主要特点: 使用STM32F4系列微控制器作为主控制器采用OpenCV进行人脸检测和识别Qt开发跨平台…