【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models
SparseCtrl:在文本到视频扩散模型中添加稀疏控制。
(AnimateDiff V3,官方版AnimateDiff+ControlNet,效果很丝滑)
code:GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff.
paper:https://arxiv.org/abs/2311.16933
目录
文章
1 介绍
2 背景
3 方法
4 实验
5 结论
复现
1 问题
2 结果
文章
1 介绍
动机:不断调整文字prompt以达到理想效果非常耗时费力,作者希望通过添加额外输入条件(草图、深度和RGB图像)来控制T2V生成。
方法:提出SparseCtrl,通过带有附加编码器的临时稀疏条件映射,来控制T2V生成。具体地说,为了控制合成,应用ControlNet的理念,实现了一个辅助编码器,同时保留原始生成器的完整性。可以在预训练的T2V模型上训练编码器网络,来加入额外的条件,而不用对整个模型再训练。
图1。SparseCtrl,一个基于预训练文本到视频(T2V)扩散模型的附加编码器网络,以接受特定关键帧(例如草图/深度/RGB图像)的额外时间稀疏条件。通过与各种模态编码器的集成,SparseCtrl使预训练的T2V能够用于各种应用,包括故事板,草图到视频,图像动画,长视频生成等。结合AnimateDiff和增强的个性化图像主干,SparseCtrl也可以获得可控的高质量生成结果,如2/3/4-th行所示。
2 背景
目前的文本条件视频生成技术缺乏对合成结果的细粒度可控性。我们的工作旨在通过附加编码器增强对T2V模型的控制。
可控文本到视频的生成。鉴于文本提示通常会导致对视频运动、内容和空间结构的模糊引导,这种可控性成为T2V生成的关键因素。我们的目标是通过输入少量条件图,来控制时间稀疏条件下的视频生成,使T2V在更广泛的场景中更加实用。
用于附加控制的附加网络。训练基础T2I/T2V生成模型需要大量的计算量。因此,在这些模型中加入额外控制的首选方法是:在保持原始主干完整性的同时,训练一个额外的条件编码器。
ControlNet创建一个可训练的预训练层的副本,以适应条件输入。然后,编码器输出通过零初始化层重新集成到T2I模型中。twi - adapter利用轻量级结构注入控制。IP-Adapter通过将参考图像转换为补充嵌入来整合样式条件,随后将其与文本嵌入连接起来。我们的方法与这些工作的原理一致,旨在通过辅助编码器模块实现稀疏控制。
3 方法
为了增强预训练文本到视频(T2V)模型对于时间稀疏信号的可控性,引入了附加的稀疏编码器来控制视频生成过程,保持原始的T2V生成器不变。
3.1 T2V扩散模型的背景
最近的T2V模型在二维图像层之间引入时间层来扩展预训练的T2I生成器以生成视频,如图2(a)的下部所示。可以跨帧信息交换,有效地建模跨帧运动和时间一致性。
训练目标:预测添加到干净的RGB视频(或潜在特征)上的噪声尺度:
ct是文本描述的嵌入向量,ϵ是与z 1:N 0 形状相同的采样高斯噪声,αt和σt是控制添加噪声强度的参数,t是均匀采样的扩散步骤,T是总步数。
图2。(a) pipeline。(b) vanilla ControlNet(左)和稀疏条件编码器(右)的比较,“零”代表零初始化层;[·;·]表示通道级联。
3.2 稀疏条件编码器的设计
引入了一种能够接受稀疏条件图作为输入的附加编码器,称为稀疏条件编码器。T2I中,ControlNet 通过部分复制预训练的图像生成器模型及其输入,并添加条件后通过零初始化的层将输出重新整合到原始模型中,将结构控制添加到预训练的图像生成器中,如图2(b)左。我们设计类似的方法来实现T2V中的稀疏控制。
帧级编码器的受控性有限。首先尝试了一种简单直接的方案:训练一个类似ControlNet的帧级编码器,融入稀疏条件信号,沿时间维度复制。通过这个辅助结构,将条件加到关键帧上。对于没有直接被条件控制的帧,向编码器输入一个零图像,并通过额外的掩码通道,指示未被条件控制的状态。结果:实验显示这种帧级条件无法保持时间一致性,只有关键帧对条件做出反应,导致受条件控制和未受条件控制的帧之间,出现突然的内容变化。
跨帧条件传播。假设上述问题是由于T2V主干难以推断未受条件控制帧的中间条件状态引起的。因此,在稀疏条件编码器中添加时间层(例如带有位置编码的时间注意力),允许条件信号从帧到帧传播。结果:实验证实,这种设计提高了生成结果的鲁棒性和一致性。
人工噪声引起的质量下降。有时间层的稀疏条件编码器可以解决输入的稀疏性,但有时会导致生成的视频的质量下降。因为作者检查发现,本文不适合直接应用ControlNet,因为会复制带有噪声样本输入。如图2(b),原始ControlNet不仅复制了UNet编码器,还复制了带有噪声的样本输入zt。即,ControlNet编码器的输入是条件+带噪声样本的和。这种设计在原始情景中稳定了训练,并加速了模型的收敛。然而本文中,对于未受条件控制的帧来说,稀疏编码器的输入就只有带噪声的样本(因为没有条件嘛)。导致稀疏编码器忽视条件,并在训练过程中依赖于带噪声的样本zt,减弱了可控性。因此,如图2(b),稀疏编码器消除了带有噪声的样本输入,只接受拼接后的条件图[cs,m]。这种简单而有效的方法消除了实验中观察到的质量下降现象。
通过掩码统一稀疏性。为了能统一处理不同的稀疏性情况,用零图像作为未受条件控制的帧的输入占位符,并将二进制掩码序列与输入条件进行连接,这是视频重构和预测中常见的做法。如图2(a)所示,在每个帧的条件信号cs之外,我们以通道方式连接一个二值掩码m ∈ {0, 1} h×w,形成稀疏编码器的输入。m = 0时,表示当前帧未受条件控制。通过这种方式,可以用统一的输入格式表示不同的稀疏输入情况。
3.3 支持的模态和应用
本文中使用了三种模态实现SparseCtrl:草图、深度图和RGB图像。
草图到视频生成。可以提供任意数量的草图来塑造视频内容。例如,单个草图可以确定视频的整体布局,而第一帧、最后一帧和中间帧的草图可以定义粗略动作,该方法在故事板设计中非常有用。
深度引导生成。可以通过直接从引擎或3D表示中导出稀疏深度图来渲染视频,或者使用深度作为中间表示,进行视频转换。
图像动画和过渡。视频预测和插值。图像动画对应于以第一帧为条件的视频生成;过渡以第一帧和最后一帧为条件;视频预测以少量起始帧为条件;插值以均匀稀疏的关键帧为条件。
4 实验
4.1. 实现细节
文本到视频生成器。我们在AnimateDiff上实现了SparseCtrl,与预训练图像主干Stable Diffusion V1.5集成时,可以作为一个通用的T2V生成器,或者当与个性化图像主干如RealisticVision和ToonYou结合时,可以作为个性化的生成器。
图3。素描/深度/RGB图像稀疏条件编码器的定性结果。4/6行视频由个性化主干RealisticVision生成。条件关键帧用蓝色边框表示。
图4。网络设计的消融研究。左:预训练T2V野图动画结果。右:个性化t2i主干ToonYou的域内图像动画结果,其中输入图像由相应的图像模型生成。条件关键帧用蓝色边框表示。
三种情况下,生成的视频中的第一帧是对输入图像控制的保真度。在个性化生成设置下,帧编码器无法将控制传播到无条件帧(第一行,右),从而导致角色细节(例如头发和衣服颜色)随时间变化的时间不一致。在预训练T2V上,如第3.2节所述,具有传播层的编码器质量下降(第二行,左),假设这是因为输入到编码器的带噪样本为条件任务提供了误导性信息。最后,通过传播层和消除噪声样本输入,完整模型在两种设置(第三行)下,保持了对条件的保真度和时间一致性。
sketch-to-video设置中,构建三种类型的提示:(1)没有有用信息的不足提示(第4行),例如“优秀的视频,最好的质量,杰作”;(2)部分描述所需内容的不完整提示(第5行),例如,“大海,阳光,……”,忽略了中心物体“帆船”;(3)描述每个内容的完成提示(第六行)。如图5所示,在sketch条件下,需要完成提示才能正确生成内容,说明在提供的条件高度抽象,不足以推断内容的情况下,文本输入仍然发挥着重要作用。
图5。不相关条件与文本提示反应的消融研究。第一行演示了模型如何处理不相关的条件,下面的五行显示了模型如何对不同的文本提示作出反应。条件关键帧用蓝色边框表示。
5 结论
SparseCtrl,一种通过附加编码器网络,向预训练的文本到视频生成器添加时间稀疏控制的方法。可以适应深度、草图和RGB图等各种模态,极大增强了视频生成的控制力。这种灵活性在草图到视频、图像动画、关键帧插值等各种应用中都非常有价值。
限制:生成结果的质量、语义组合能力和领域受预训练的T2V主干和训练数据的限制。实验中,失败案例主要来自于域外输入,例如动漫图像动画,因为这样的数据在T2V和稀疏编码器的预训练数据集WebVid10M中很少(其内容主要是真实世界的视频)。提高泛化能力的可能解决方案包括改善训练数据集的领域多样性,并利用一些特定领域的主干,例如将SparseCtrl与AnimateDiff集成。
复现
1 问题
问题1:TypeError: EulerDiscreteScheduler.__init__() got an unexpected keyword argument 'steps_offset'
解决:目前解决不掉
问题2:torch.cuda.OutOfMemoryError
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 1.25 GiB (GPU 0; 11.91 GiB total capacity; 8.99 GiB already allocated; 1.23 GiB free; 9.96 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
解决:调小参数
(为什么配置参数写在animate.py里,不写在yaml里,找了半天T T
问题3:AttributeError: 'Row' object has no attribute 'style'
这题我会,注释掉就行了
参考:chatglm2-b部署报错问题‘Textbox‘ object has no attribute ‘style‘_attributeerror: 'textbox' object has no attribute -CSDN博客
原因:默认安装的第三方库gradio最新版本,降低版本即可,pip install gradio==3.50.0,解决
2 结果
运行:
1.T2V常规设置
# under general T2V setting
python -m scripts.animate --config configs/prompts/v3/v3-1-T2V.yaml
2.图像动画
# image animation (on RealisticVision)
python -m scripts.animate --config configs/prompts/v3/v3-2-animation-RealisticVision.yaml
输入:
结果:
3.草图到动画和故事板
# sketch-to-animation and storyboarding (on RealisticVision)
python -m scripts.animate --config configs/prompts/v3/v3-3-sketch-RealisticVision.yaml
我这里生成完1-sketch-to-video,再进行2-storyboarding时会爆显存,所以分开单独进行了,每次只保留一个任务在yaml里就可以,暂时注释掉另一个。我用的权重是lyriel_v16.safetensors,大小16x256x256或12x384x384,更大了不行
条件(草图):
结果:(图1:16x256x256;图2:12x384x384,感觉影响生成质量的主要是大小,height x width,图片越大,生成得越精细好看)
条件(故事版):
结果:
自己生成的效果居然快赶上官方展示图了,真给力~(´▽`)
相关文章:

【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models
SparseCtrl:在文本到视频扩散模型中添加稀疏控制。 (AnimateDiff V3,官方版AnimateDiffControlNet,效果很丝滑) code:GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff. paper:htt…...

速盾cdn:ddos防护手段
速盾CDN采用多种手段来进行DDoS防护,以确保网络和网站的正常运行。以下是速盾CDN可能采用的一些主要DDoS防护手段: 实时监测和分析: 速盾CDN实时监测网络流量,通过分析流量模式来检测异常行为,以迅速发现潜在的DDoS攻击…...

STL——queue容器
1.queue基本概念 概念:queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口。 队列容器允许从一端新增元素,从另一端移除元素。 队列中只有队头和队尾才可以被外界使用,因此队列不允许…...

gitLab页面打tag操作步骤
作者:moical 链接:gitLab页面打tag简单使用 - 掘金 (juejin.cn) 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ---------------------------------------------------------------------…...

神秘的Cookie和Session
Cookie 1.Cookie是什么? Cookie是浏览器提供的持久化储存数据的方式。 2.从哪里来? Cookie从服务器中来,存储到客户端中。一个客户端就对应着一个浏览器。 服务器代码中决定了什么样的数据会储存到客户端中,通过HTTP相应的Se…...

springboot接口文档
Swagger 在Spring Boot中生成和维护接口文档的一个常用方法是使用Swagger。Swagger是一个开源软件框架,它帮助开发者设计、构建、记录和使用RESTful Web服务。下面是在Spring Boot项目中使用Swagger来创建接口文档的详细步骤:1. 添加Swagger依赖 在你的Spring Boot项目的pom…...

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈
深入浅出图解C#堆与栈 C# HeapingVS Stacking第一节 理解堆与栈 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.n…...

Maven的使用和配置
Maven的使用和配置 起源: Apache 软件基金会(非营业的组织,把一些开源软件维护管理起来) maven 是apache的一个开源项目,是一个优秀的项目构建(管理)工具, maven 管理项目中的jar,以及jar与jar之间的依赖 maven 可…...

MongoDB 数据类型
目录 BSON 类型 二进制数据(Binary Data) ObjectId ObjectId定义 文档中的ObjectId ObjectId的单调性 字符串(String) 时间戳(Timestamps) 日期(Date) BSON类型的排序 数…...

Java 将 List 转换为 String常见方式
将 List 转换为 String的几种方式 使用 List的toString()方法将 List 转换为 String;结果前后会带有英文的中括号[],如:[1, 2, 3, 4, 5]使用Java8 stream流中的Collections.joining()方法,带有逗号分隔符或自定义分隔符将集合转成…...

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)
文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…...

idea 出现Cannot resolve symbol ‘springframework‘解决方法
Maven手动重新加载 1)File–>Invalidate Caches / Restart… 清理缓存,重启idea客户端 2)File–>Maven–>Reload project重新从maven中加载工程依赖的组件...

ubuntu22.04安装anacoda遇到的坑
这几天把用了3年的windows10换成了ubuntu22.04 各种环境都得配置,本文记录下遇到的坑。 1、anacoda在ubuntu上也可以用官方也提供了安装包,但是没有图形界面,需要以命令行的方式安装和运行配置 1.1 安装:官网下载后,…...

window的OPen方法,弹窗的特征
文章目录 一、介绍二、弹窗的特征 一、介绍 window.open() 方法是 JavaScript 中的一个内置方法,用于在浏览器中打开一个新的窗口或标签页。 语法: window.open(url, name, features, replace)二、弹窗的特征 open方法参数说明: 参数说明url要载入窗…...

DFS算法查找所有路径详解
DFS算法查找所有路径详解 算法介绍 深度优先搜索(Depth-First Search,DFS)是一种图遍历算法,它从起始节点开始,沿着一条路径尽可能深入,直到达到最深的节点,然后回溯到前一节点,继…...

单片机的存储、堆栈与程序执行方式
一、单片机存储区域 如图所示位STM32F103ZET6的参数: 单片机的ROM(内部FLASH):512KB,用来存放程序代码的空间。 单片机的RAM:64KB,一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …...

Web3开发成本和主要特性
多年来,技术不断进步,可帮助您的业务领先于竞争对手。如今,您可以看到许多更新和变化,使技术更加先进,对企业更加有用。到现在为止,web1.2和2.0比较流行,但是要知道web 3才是技术之父࿰…...

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(一)
Matplotlib图像基础 写在前面1 基本绘图实例:sin、cos函数图2 plot()函数详解**kwargs参数: 3 matplotlib中绘图的默认配置4 设置图的横纵坐标的上下界5 设置横纵坐标上的记号6 调整图像的脊柱7 添加图例8 给一些特殊点加注释9 子图最后 写在前面 前面我…...

005、数据类型
1. 关于数据类型 Rust中,每个值都有其特定的数据类型,Rust会根据数据的类型来决定如何处理它们。 Rust是一门静态类型语言,它在编译程序的过程中就需要知道所有变量的具体类型。在大部分情况下,编译器可以根据我们如何绑定、使用变…...

软考网络工程师考试大纲(2018年最新版)
本书是全国计算机专业技术资格考试办公室组织编写的网络工程师考试大纲,本书除大纲内容外,还包括了人力资源和社会保障部、工业和信息化部的有关文件以及考试简介。 网络工程师考试大纲是针对本考试的计算机网络中级资格制定的。通过本考试的考生,可被用人单位择优聘任为工…...

【数据结构】栈【详解】
目录 栈的定义: 栈的声明与定义: 头文件的包含: 对栈的基本操作: 栈的初始化: 摧毁栈: 入栈: 编辑 出栈: 编辑 输出栈顶位置: 输出栈的当前大小: 判空操…...

CSS 纵向底部往上动画
<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ scale-up-ver-bottom: isAnimating }"><!-- 元素内容 --&g…...

常用的 MySQL 可视化客户端
数据库可视化客户端(GUI)让用户在和数据库进行交互时,能直观地查看、创建和修改对象,如:表、行和列。让数据库操作变得更方便了。 今天,我们来了解下目前市场上最常用的 MySQL 可视化客户端。 官方&#x…...

C#使用SyntaxTree获取.cs文件中的属性名和注释
有时候,我们可能需要获取.cs文件中的属性和对应的注释来生成一些代码,比如SQL查询什么的。 但使用正则匹配有时候会不准确。搜索了下,发现微软提供了代码解析的API。 具体如下两个方法: /// <summary> /// 获取所有属性和…...

基于价值认同的需求侧电能共享分布式交易策略(matlab完全复现)
目录 1 主要内容 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序完全复现《基于价值认同的需求侧电能共享分布式交易策略》,针对电能共享市场的交易机制进行研究,提出了基于价值认同的需求侧电能共享分布式交易策略,旨在降低电力市…...

门控循环单元(GRU)-多输入回归预测
目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、部分程序: 四、全部代码数据分享: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译…...

电池管理系统BMS中SOC算法通俗解析(二)
下面简单介绍下我们BMS保护板使用的SOC估算方法。我们算法的主要是针对电流积分法计算SOC的局限性进行改进: ●电池包第一次上电使用开路电压法估算SOC。第一次上电,根据电池包厂家给出的电压和剩余容量二维关系图大概估算出目前电池包的剩余容量即SOC。…...

YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点
一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络,其是今年最新推出的主干网络,VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单,层数较少,避免了像深度架构和自注意力这样的复杂操作(需要注意的是…...

爬虫工作量由小到大的思维转变---<第三十三章 Scrapy Redis 23年8月5日后会遇到的bug)>
前言: 收到回复评论说,按照我之前文章写的: 爬虫工作量由小到大的思维转变---<第三十一章 Scrapy Redis 初启动/conn说明书)>-CSDN博客 在启动scrapy-redis后,往redis丢入url网址的时候遇到: TypeError: ExecutionEngine.crawl() got an unexpected …...

PostgreSQL | 概念 | 什么是OLTPOLAP?
什么是OLTP&OLAP? 大白话理解:业务系统都可以称作OLTP,基于业务系统产生的数据进行数据分析和决策的都可以称为OLAP。 OLTP OLTP( Online Transaction Processing)在线事务处理系统 用途: 用于支持日…...