AIGC视频生成/编辑技术调研报告

人物AIGC:FaceChain人物写真生成工业级开源项目,欢迎上github体验。

简介: 随着图像生成领域的研究飞速发展,基于diffusion的生成式模型取得效果上的大突破。在图像生成/编辑产品大爆发的今天,视频生成/编辑技术也引起了学术界和产业界的高度关注。该分享主要介绍视频生成/编辑的研究现状,包括不同技术路线的优劣势,以及该领域当下面临的核心问题与挑战。

摘要

随着图像生成领域的研究飞速发展,基于diffusion的生成式模型取得效果上的大突破。在图像生成/编辑产品大爆发的今天,视频生成/编辑技术也引起了学术界和产业界的高度关注。该分享主要介绍视频生成/编辑的研究现状,包括不同技术路线的优劣势,以及该领域当下面临的核心问题与挑战。

1. 背景介绍

不少视频生成/编辑模型都是基于图像生成模型的预训练权重进行训练,结构也与图像生成模型一脉相承,因此在介绍视频生成/编辑模型之前有必要先介绍图像生成/编辑模型。我们根据不同的技术路线将图像生成/编辑模型分成四种类型,分别是使用编辑前后数据对进行训练的模型、zero-shot模型、one-shot/few-shot模型以及解耦合模型。我们将视频生成/编辑模型也分成四类,分别是large-data-driven模型、zero-shot模型、one-shot/few-shot模型和解耦合模型。接下来将分别介绍这几种类型。

2. 图像生成/编辑

2.1. 使用编辑前后数据对进行训练

比较典型的工作是 InstructPix2Pix [1]。该方法通过构造编辑前后的图像数据对来生成训练数据,使用这种数据进行训练得到的模型无需 finetune 即可进行图像编辑。具体的构造方式是利用 GPT3 生成编辑前后的 text prompt,再利用 stable diffusion + Prompt2Prompt 的方式进行编辑得到编辑前后图像对。

下图是 InstructPix2Pix 的示意图:

2.2. Zero-Shot 方法

比较具有代表性的工作是 Prompt-to-prompt [2] 和 MasaCtrl [3]。他们通过修改 cross attention 里的 attention maps 或 attention 机制的方式来实现无需 finetune 的图像编辑。Prompt-to-prompt 的具体做法是,对于由给定 prompt 通过模型生成的图像(若是真实场景图像,则需要做精确的 inversion),保留其 cross attention 步骤中的 attention map,对于新 text prompt,将新的词生成的 new attention 插入原 attention maps 中,并根据权重重新计算,生成编辑后的图像。

下图是 Prompt-to-prompt 的示意图:

2.3. One-Shot/Few-Shot方法

该类方法分为两类,一种是通过 finetune 来让网络学习到关于输入图像的 identifier,这样编辑过程中就能保留原图的内容和结构;第二种是通过设计保留原图内容和结构的 loss 来进行 finetune。第一种的代表性方法包括 Dreambooth [4] 和 DreamArtist [5]。其中 Dreambooth 便是通过对描述输入图像的 text prompt 插入特征 tokenizer,然后在同一物体的少量数据上训练,让网络记住该物体与该特定 identifier 之间的对应关系。接下来便能通过对 identifier 进行修饰从而达到对该物体的图像进行编辑的目的。

下图是 Dreambooth 的示意图:

第二种的代表性方法是 Text2live [6]。对于一张输入图像以及 target text prompt,该方法对图像和 text 分别做 augmentations 并生成数据集 internal dataset,然后在这个 internal dataset 上对模型进行finetune。模型的输出是带 alpha 通道的图层,该图层添加到原图上构成最终的输出图像。为了让生成的图像在保留原图内容和结构不变的基础上符合 target prompt 的描述,它使用了三种 loss:Composition Loss,Structure Loss 和 Screen Loss。Composition Loss 计算生成图像与 target prompt 在 clip 空间的距离;Structure Loss 计算生成图像与原图在结构和内容上的距离;Screen Loss 计算将带 alpha 通道的图层与绿幕组合后的图像与对该绿幕图像的 text 描述之间的 clip 距离。

下图是 Text2live 的示意图:

2.4. 解耦合方法

这类方法将图像要素解耦合成控制条件(如人体pose、edge map等)与图像内容/风格/语义,通过训练显式的编码器对控制条件或图像内容/风格/语义分别进行编码。推理阶段,修改图像内容/风格来生成符合控制条件的编辑后图像,或是通过修改控制条件来生成相同内容/风格/语义的图像。比较典型的方法如 DisCo [14] Prompt-Free Diffusion [15]。其中 DisCo 是针对人物姿态转换的模型,在第一阶段的训练中,它将人物图像进一步拆解成前景(人物)和背景对网络进行训练,第二阶段在第一阶段的基础上加上对控制条件(人物姿态) 的编码器进行进一步训练。DisCo 虽然在图像数据集上训练,但它可以被用来进行姿态引导的人物动态视频的生成,只要对单帧分别处理即可。

下图是 DisCo 的示意图:

3. 视频生成/编辑

3.1. Large-Data-Driven

这类方法在保持图像生成模型权重不变的基础之上,添加时序层,用大量的视频或者视频-文本数据对时序层进行训练,让模型学习到视频帧间连续性的同时尽可能保留原模型的图像生成能力。这类方法包括 Make-A-Video [7],Follow Your Pose [8],Control-A-Video [9],AnimateDiff [10],Align your Latents [11]。其中 Follow Your Pose 采取两阶段的训练方法,第一阶段使用带 pose 的 text-image 图像数据对进行训练,第二阶段使用不带 pose 的 text-video 数据对 temporal self-attention layer 和 cross-frame spatial attention layer 进行训练。最终 inference 阶段,使用 pose 和 text 共同控制视频的生成。

下图是 Follow Your Pose 的示意图:

3.2. One-Shot/Few-Shot 方法

与图像的方法类似,这类方法针对单个视频进行 finetune,使网络学习到属于该视频的时域特征,比较典型的是Tune-A-Video [12] 和 ControlVideo [13]。Tune-A-Video 将图像生成模型的权重固定不变,在单个视频上使用 source text prompt 和 image 对时序层进行 finetune。在 inference 阶段,先对输入视频进行 DDIM inversion,然后使用新的 prompt 生成编辑后的视频。ControlVideo 在 Tune-A-Video 的基础之上,加入了如 edge map 等其他控制手段引导视频的生成。

下图是 ControlVideo 的示意图:

3.3. Zero-Shot 方法

与图像的方法类似,这类方法通过对视频求精确的 inversion,然后修改 attention maps 或是 attention 机制来进行无需训练的视频编辑,典型的比如 Fatezero [16],Zero-shot video editing [17] 和 Video-p2p [18]。另一类方法根据视频时域连续性的先验知识,有针对性地设计新的 cross attention 机制或 adapter 来控制采样阶段生成的帧序列在结构、内容和色彩上的连续性。典型的方法比如 ControlVideo [19] 和 Rerender A Video [20]。其中 Rerender A Video 利用视频的光流信息,对采样阶段的隐空间特征进行变换和引导,同时辅以结构和色彩 adapter,实现了对输出视频的时域连续性控制。

下图为 Rerender A Video 的示意图:

3.4. 解耦合方法

图像编辑的解耦合方法也可以用来实现视频编辑,例如 DisCo [14],这里我们主要介绍针对视频的解耦合方法(考虑了时域特征)。与图像解耦合思路类似,视频也能被解耦合成控制条件帧序列(如人体pose、edge map等)与单帧图像内容/风格/语义,通过训练显式的编码器对控制条件序列或单帧图像内容/风格/语义进行编码,典型的方法如 DreamPose [21]。另一类解耦合方法,CoDeF [22],从视频本身的特性出发将视频拆解成 canonical content field 和 temporal deformation field 两个元素。只要通过图像编辑/生成模型对单帧图像进行编辑,生成新的 canonical content field, 再根据原视频的 temporal deformation field 就能生成被编辑后的视频。这一类方法的效果高度依赖解耦合思路的合理性以及模型的解耦合程度/能力。

下图为 DreamPose 的示意图:

4. 总结

视频编辑/生成的核心难点是如何保证帧间的连续性,在内容和结构上获得令人满意的视觉效果。这四种方法本质上均是试图解决帧间内容连续性的问题,只不过采用了四种不同的手段和技术路线。Large-Data-Driven 需要大量的优质视频数据进行训练,对存储空间和算力资源的需求很大。One-Shot/Few-Shot 方法对资源的消耗较小,但每次需对单个视频进行 finetune,较为耗时。Zero-Shot 方法对资源消耗小且速度快,但囿于技术手段本身的局限性,所能实现的效果存在着天然的瓶颈,且对精心设计的时域控制手段的要求也很高。解耦合方法从视频本身特性出发,将视频拆解成不同的要素,进行针对性的训练以及再组合,但效果的好坏取决于解耦合的设计与模型解耦合的能力。探索出保证视频帧间连续性的技术路线仍然是一个亟待解决的核心问题。

References

[1] InstructPix2Pix: Learning to Follow Image Editing Instructions.

[2] Prompt-to-prompt image editing with cross attention control.

[3] MasaCtrl: Tuning-Free Mutual Self-Attention Control for Consistent Image Synthesis and Editing.

[4] Dreambooth: Fine tuning text-to-image diffusion models for subject-driven generation.

[5] DreamArtist: Towards Controllable One-Shot Text-to-Image Generation via Contrastive Prompt-Tuning.

[6] Text2live: Text-driven layered image and video editing.

[7] Make-A-Video: Text-to-Video Generation without Text-Video Data.

[8] Follow Your Pose: Pose-Guided Text-to-Video Generation using Pose-Free Videos.

[9] Control-A-Video: Controllable Text-to-Video Generation with Diffusion Models.

[10] AnimateDiff: Animate Your Personalized Text-to-Image Diffusion Models without Specific Tuning.

[11] Align your Latents: High-Resolution Video Synthesis with Latent Diffusion Models.

[12] Tune-A-Video: One-Shot Tuning of Image Diffusion Models for Text-to-Video Generation.

[13] ControlVideo: Adding Conditional Control for One Shot Text-to-Video Editing.

[14] DisCo: Disentangled Control for Referring Human Dance Generation in Real World.

[15] Prompt-Free Diffusion: Taking "Text" out of Text-to-Image Diffusion Models.

[16] Fatezero: Fusing attentions for zero-shot text-based video editing.

[17] Zero-shot video editing using off-the-shelf image diffusion models.

[18] Video-p2p: Video editing with cross-attention control.

[19] ControlVideo: Training-free Controllable Text-to-Video Generation.

[20] Rerender A Video: Zero-Shot Text-Guided Video-to-Video Translation.

[21] DreamPose: Fashion Image-to-Video Synthesis via Stable Diffusion.

[22] CoDeF: Content Deformation Fields for Temporally Consistent Video Processing.

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

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

相关文章

HTML的初步学习

HTML HTML 描述网页的骨架, 标签化的语言. HTML 的执行是浏览器的工作,浏览器会解析 html 的内容,根据里面的代码,往页面上放东西,浏览器的工作归根结底,还是以汇编的形式在CPU上执行. 浏览器对于html语法格式的检查没有很严格,即使你写的代码有一些不合规范之处,浏览器也会尽可…

打开ps提示,计算机中丢失d3dcompiler_47.dll怎么解决?

“d3dcompiler_47.dll丢失5个解决办法”。相信很多同事在工作或者娱乐的过程中,都遇到过这个错误提示。那么,究竟什么是d3dcompiler_47.dll文件?为什么会丢失呢?又该如何解决这个问题呢?接下来,我将为大家详…

angular学习笔记

HTML绑定 形式&#xff1a;{{ 变量名 }} {{}}内部可以是 算数运算比较运算逻辑运算三目运算调用函数 {{}}内部不可以是 创建对象&#xff1a;不可以newJSON序列化 属性绑定 形式1&#xff1a;[属性名]“变量名” 形式2&#xff1a;属性名“{{变量名}}” <div [title…

ClickHouse介绍和使用

ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区&#xff08;可选&#xff09;4.3.2. primary key 主…

数据分析是什么?

第一章- 数据分析是什么 数据分析是指 根据分析目的&#xff0c;用适当的分析方法及工具&#xff0c;对数据进行分析&#xff0c;提取有价值的信息&#xff0c;形成有效结论的过程。 数据分析的作用 通过观察数据&#xff0c;知道当前发生什么&#xff1f;通过具体的数据拆解…

【论文阅读】Progressive Spatio-Temporal Prototype Matching for Text-Video Retrieval

资料链接 论文链接&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Li_Progressive_Spatio-Temporal_Prototype_Matching_for_Text-Video_Retrieval_ICCV_2023_paper.pdf 代码链接&#xff1a;https://github.com/imccretrieval/prost 背景与动机 文章发…

代码随想录算法训练营Day 47 || 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系…

Qframework 中超级方便的kitres

using QFramework; using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestResKit : MonoBehaviour {ResLoader mResLoader ResLoader.Allocate();private void Awake(){}/// <summary>/// 每一个需要加载资源的单元(脚本,界…

【Unity之UI编程】在Unity中如何打图集,来降低DrowCall

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…

pytest 的使用===谨记

发现用例的规则 a) 文件test_.py开头和_test.py结尾 b) Test开头的类中test开头的方法&#xff08;测试类不能带有__init__方法&#xff09; c) 模块中test开头的函数&#xff08;可以不在class中&#xff09; 注意点&#xff1a; pytest是以方法为单位发现用例的&#xff0c;你…

摔杯算法(要求用最少的测试次数找出恰巧会使杯子破碎的楼层。)

题目: 一种杯子&#xff0c;若在第N层被摔破&#xff0c;则在任何比N高的楼层均会破&#xff1b;若在第M层不破&#xff0c;则在任何比M低的楼层均不会破。给你两个这样的杯子&#xff0c;让你在100层高的楼层中测试&#xff0c;要求用最少的测试次数找出恰巧会使杯子破碎的楼层…

vue:实现顶部消息横向滚动通知

前言 最近有个需求&#xff0c;是在系统顶部展示一个横向滚动的消息通知。需求很简单&#xff0c;就是消息内容从右往左一直滚动。 效果如下&#xff1a; 因为我的需求很简单&#xff0c;功能就这样。如果有什么其他需求&#xff0c;可以再继续修改。 代码 使用 <noti…

数据中台之数据分析

效果界面 技术方案 Notebook集成 在您的数据平台上,创建一个能够与Jupyter Notebook通讯的服务。通过Jupyter Notebook的HTTP API与Notebook实例进行交互,执行代码、获取输出等。用户界面 在数据开发/数据分析的代码框右上方,添加一个机器人样式的图标,用户点击后可以调起…

Ubuntu 安装常见问题

1. 安装oh my zsh 搜狗输入法不能用 vim /etc/environmentexport XIM_PROGRAMfcitx export XIMfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx export XMODIFIERS“imfcitx” export LANG“zh_CN.UTF-8”配置完后重启&#xff0c;稍等一会&#xff0c;右上角会有个…

Linux--vim

文章目录 Vim的介绍Vim的几种模式命令模式下的基本操作批量化注释Vim的简单配置使用插件 Vim的介绍 Vim是一个强大的文本编辑器&#xff0c;是从vi编辑器发展而来的&#xff0c;在vi编辑器的基础上进行了改进和拓展&#xff0c;具有强大的特性和功能。 Vim是一个自由开源软件&…

城市内涝积水监测,万宾科技内涝预警监测系统

每一个城市的排水体系都是一个复杂的网络系统&#xff0c;需要多个部分配合协调&#xff0c;预防城市排水管网带来安全隐患&#xff0c;也因此才能在一定程度上缓解城市内涝带来的安全问题。在海绵城市建设过程中不仅要解决大部分道路硬化导致的积水无法渗透等问题&#xff0c;…

AR眼镜硬件解决方案_AR/VR智能眼镜安卓主板芯片方案介绍

随着近两年来增强现实(AR)技术的逐渐成熟&#xff0c;采用MT8788芯片解决方案的AR眼镜已经问世。众所周知&#xff0c;AR技术可以帮助开发者打造一个既强大而又实用的混合现实世界&#xff0c;将虚拟与真实世界相结合。 据了解&#xff0c;MT8788芯片采用了多芯片分布式处理系统…

HelloGitHub 社区动态,开启新的篇章!

今天这篇文章是 HelloGitHub 社区动态的第一篇文章&#xff0c;所以我想多说两句&#xff0c;聊聊为啥开启这个系列。 我是 2016 年创建的 HelloGitHub&#xff0c;它从最初的一份分享开源项目的月刊&#xff0c;现如今已经成长为 7w Star 的开源项目、1w 用户的开源社区、全网…

nacos做服务配置和服务器发现

一、创建项目 1、创建一个spring-boot的项目 2、创建三个模块file、system、gateway模块 3、file和system分别配置启动信息,并且创建一个简单的控制器 server.port9000 spring.application.namefile server.servlet.context-path/file4、在根目录下引入依赖 <properties&g…

2023-11-Rust

学习方案&#xff1a;Rust程序设计指南 1、变量和可变性 声明变量&#xff1a;let 变量、const 常量 rust 默认变量一旦声明&#xff0c;就不可变(immutable)。当想改变 加 mut&#xff08;mutable&#xff09; 。 const 不允许用mut &#xff0c;只能声明常量&#xff0c;…