【CCEdit】通过扩散模型进行创意且可控的视频编辑

文章目录

  • CCEdit
    • 1. 核心特性
      • 1.1 三叉戟网络结构
      • 1.2 精细的外观控制
      • 1.3 高度的自适应性
    • 2. 三叉戟结构
      • 2.1 结构分支(ControlNet架构)
      • 2.2 外观分支
      • 2.3 主分支
    • 3. 数据集——BalanceCC benchmark dataset
    • 4. 训练
    • 5. 长视频编辑
    • 6. 使用场景
    • 7. 评估指标

CCEdit

CCEdit是一个基于扩散模型的多功能视频编辑框架,它通过一个创新的三叉戟网络结构,分别控制视频的结构和外观,从而实现精确和创造性的编辑能力。这个框架不仅维持了视频内容的结构完整性,还允许用户对编辑的关键帧进行细粒度的外观调整,确保了编辑内容的个性化和多样性。

1. 核心特性

1.1 三叉戟网络结构

CCEdit采用了一个独特的网络架构,包括控制分支、外观分支和主分支。这种设计使得CCEdit能够在保持视频结构的同时,提供高度的创造性和个性化编辑能力。

1.2 精细的外观控制

通过外观分支,用户可以对颜色、纹理、光照等外观属性进行调整,实现个性化的视觉效果。

1.3 高度的自适应性

CCEdit支持多种结构表示和个性化文本到图像(T2I)模型的选择,以及提供编辑关键帧的选项,展现了其框架的多功能性。

2. 三叉戟结构

在这里插入图片描述

2.1 结构分支(ControlNet架构)

这个分支负责维持视频编辑过程中的结构完整性,消化从输入视频的每一帧中提取的结构信息,并将其无缝地注入到主分支中。它是整个网络的基础,确保在编辑时,视频的基本结构不会被破坏,从而保持了视频内容的连贯性和真实性。

CCEdit模型中结构分支的引入,是为了满足视频编辑任务中保持非编辑或风格转移片段的帧结构的常见需求。在保持忠实的帧结构和允许生成模型有足够创造自由之间找到一个微妙的平衡,是一个重大的挑战。结构分支使用预训练的ControlNet来实现。为了适应不同程度的结构控制需求,该分支采用了多种类型的结构表示方法,包括线条图、PiDi边界和深度图,确保能够在不同程度上控制结构。具体来说,从所有帧中分别提取结构表示,并将其注入到主分支中。每一帧都经过预处理来派生出一种结构表示,而ControlNet的权重在训练过程中保持冻结状态,以强调保留学习到的结构特征。

形式上,让 F ( ⋅ ; Φ c ) F(·; \Phi_c) F(⋅;Φc)表示将结构信息映射成特征的ControlNet, Z ( ⋅ ; Φ z 1 ) Z(·; \Phi_{z1}) Z(⋅;Φz1) Z ( ⋅ ; Φ z 2 ) Z(·; \Phi_{z2}) Z(⋅;Φz2)表示中的两个零卷积实例。那么向3D感知特征 v v v添加结构控制的过程可以表示为 v s = v + Z ( F ( z t + Z ( c s ; Φ z 1 ) ; Φ c ) ; Φ z 2 ) v_s = v + Z(F(z_t + Z(c_s; \Phi_{z1}); \Phi_c); \Phi_{z2}) vs=v+Z(F(zt+Z(cs;Φz1);Φc);Φz2),其中 z t z_t zt表示潜在空间中的噪声输入, c s c_s cs表示视频序列的结构条件, v s v_s vs表示具有结构信息感知的特征。

结构分支的目的是在不损害视频原有结构的情况下,为视频编辑和风格转换提供更精细的控制。通过使用不同类型的结构表示和保持ControlNet权重的冻结状态,结构分支能够在编辑过程中保留视频的结构特征,同时还能够根据需求调整结构的控制程度。这样,即使在进行创造性编辑时,也能确保视频内容的结构完整性不受影响。

2.2 外观分支

这个分支允许用户对编辑的关键帧进行细粒度的外观控制。通过这个分支,用户可以调整颜色、纹理、光照等外观属性,实现个性化的视觉效果。

外观分支是CCEdit模型中的一个创新设计,用于增加外观控制的精细度,并允许将编辑过的帧作为详细参考融入视频编辑的上下文中。这种架构创新提供了一种先锋的方法,用于实现精细的外观控制,通过整合一个编辑过的帧,使得框架能够在视频编辑中引入更大的创造性和可控性。关键帧的编辑可以通过精确的用户编辑或使用先进的现成图像编辑算法来完成,外观分支的引入使得我们的框架能够实现更高的创造性和控制力。

具体来说,一个关键帧最初由编码器E分配给潜变量。随后,一个与主分支的编码器具有相似架构的神经网络提取多尺度特征。这些提取的特征被整合到主分支中。通过这种设计,编辑过的关键帧的外观信息通过时间模块传播到所有帧中,有效地在输出视频中实现所需的创造性控制。

形式上,假设 F ( ⋅ ; Ψ ) F(·; Ψ) F(⋅;Ψ)是将关键帧的逐像素外观映射到特征的编码器, Z ( ⋅ ; Ψ z ) Z(·; Ψ_z) Z(⋅;Ψz)表示零卷积投影输出层, v j v_j vj表示第 j j j帧的特征, c j a c_j^a cja是关键帧。那么添加外观控制到特征的过程可以表示为 v j a = v j + Z ( F ( E ( c j a ) ; Ψ ) ; Ψ z ) v_j^a = v_j + Z(F(E(c_j^a); Ψ); Ψ_z) vja=vj+Z(F(E(cja);Ψ);Ψz),其中 v j a v_j^a vja是意识到编辑外观的第 j j j帧特征。

外观分支通过编码器处理编辑过的关键帧,提取其外观特征,并将这些特征融合到视频的每一帧中,从而实现对视频整体外观的精细调控。这样的设计使得用户可以精确地控制视频中各帧的外观,包括色彩、纹理等元素,以匹配编辑过的关键帧,实现高度个性化和创造性的视频编辑结果。

2.3 主分支

这个分支整合了上述两个分支的功能,并建立在现有的文本到图像(T2I)生成模型之上。通过学习性的时序层(learnable temporal layers),插入时间模块将其转换为文本到视频(T2V)模型,这个分支能够处理和生成视频内容,确保编辑后的视频在视觉上的连贯性和动态效果。

该模型通过在编码器和解码器的空间层中加入时间层,被转变为文本到视频的变体。具体来说,这包括在每个已有的空间层之后添加一个与之类型相同的一维时间层,例如卷积块和注意力块。此外,为了实现稳定和逐步的更新,还使用了跳过连接和每个新增加时间层的零初始化投影输出层,这种方法已被证明是有效的。

零初始化投影输出层被实例化为一个线性层。形式上,设 F ( ⋅ ; Θ s ) F(·; Θ_s) F(⋅;Θs)为2D空间块, F ( ⋅ ; Θ t ) F(·; Θ_t) F(⋅;Θt)为1D时间块, Z ( ⋅ ; Θ z ) Z(·; Θ_z) Z(⋅;Θz)为零初始化投影输出层,其中 Θ s \Theta_s Θs Θ t \Theta_t Θt Θ z \Theta_z Θz分别代表相应的网络参数。将输入特征 u u u映射到输出特征 v v v的完整过程可以写成 v = F ( u ; Θ s ) + Z ( F ( F ( u ; Θ s ) ; Θ t ) ; Θ z ) v = F(u; \Theta_s) + Z(F(F(u; \Theta_s); \Theta_t); \Theta_z) v=F(u;Θs)+Z(F(F(u;Θs);Θt);Θz),其中 u u u v v v都是3D特征图,即 u ∈ R l × h × w × c u ∈ R^{l×h×w×c} uRl×h×w×c,这里的 l , h , w , c {l, h, w, c} l,h,w,c分别代表帧数、高度、宽度和通道数。

主分支通过在传统的文本到图像模型中加入时间维度的处理,使得模型能够理解和生成视频序列。这样的设计让模型不仅能够处理每一帧的空间信息(即图像内容),还能够理解帧与帧之间的时间关系,从而生成连贯的视频内容。通过这种方式,模型可以根据文本描述生成具有一定时间长度的视频,每一帧都是根据文本描述精心构造的,而且整个视频在视觉上是连贯的。

3. 数据集——BalanceCC benchmark dataset

该数据集包含100个视频,每个视频4个prompts。

  • 视频的持续时间从 2 到 20 秒不等
  • 每个视频的帧速率约为 30 fps
  • 对于每个视频,GPT-4V(ision) 提供描述
  • 使用中心帧作为参考为场景分配复杂性分数,评级从 1(简单)到 3(复杂)
  • 摄像机运动、物体运动和分类内容,运动评级范围从 1(静止)到 3(快速),类别包括人类、动物、物体和风景
  • 幻想级别:指示目标提示的想象力和创造力程度
    在这里插入图片描述

4. 训练

我们使用预先训练的 ControlNet 进行结构信息指导。 训练数据集结合了WebVid-10M 和自行收集的私有数据集。 我们针对各种类型的结构信息训练时间一致性模块和外观 ControlNet,包括线条图、PiDi 边界 、Midas 检测到的深度图和人类涂鸦。 默认情况下使用深度图。 控制尺度设置为1。对于时间插值模型,我们仅在深度图上训练它,采用较小的控制尺度0.5。 采用这种方法是因为它对结构信息的要求相对其他模型来说较少。 在训练过程中,我们首先将短边调整为384像素,然后随机裁剪以获得尺寸为384×576的视频片段。从每个视频中采样17帧4fps。 批量大小为 32,学习率为 3e − 5。我们对每个模型进行 100K 次迭代训练。 在推理过程中,我们采用 DDIM 采样器,具有 30 个步骤,无分类器指导,幅度为 9。

在训练CCEdit模型之前,我们采取以下步骤来初始化模型的权重和进行训练设置:

  1. 主分支空间权重初始化:主分支的空间权重使用预训练的文本到图像(T2I)模型进行初始化,这有助于模型更好地理解和生成图像内容。

  2. 时间权重初始化:时间权重采用随机初始化,而投影输出层(projection out layers)则进行零初始化。这样的初始化方法旨在为模型的时间处理能力提供一个起点,同时保持一定的灵活性。

  3. 结构分支模型实例化:结构分支使用预训练的ControlNet模型来实现,这有助于模型准确地控制和保持视频帧的结构信息。

  4. 外观分支设置:外观分支复制了预训练的文本到图像模型的编码器,并移除了文本交叉注意力层,以便于专注于处理外观信息。

在训练过程中,给定一个输入视频片段 x 0 x_0 x0的潜变量 z 0 = E ( x 0 ) z_0 = E(x_0) z0=E(x0)。扩散算法逐步向其添加噪声,产生噪声输入 z t z_t zt。给定时间步 t t t、文本提示 c t c_t ct、结构信息 c s c_s cs和关键帧的外观信息 c j a c_j^a cja,整体优化目标是:

E z 0 , t , c t , c s , c j a , ϵ ∼ N ( 0 , I ) [ ∥ ϵ − ϵ θ ( z t , t , c t , c s , c j a ) ∥ 2 2 ] E_{z_0,t,c_t,c_s,c_j^a,\epsilon\sim N(0,I)}[\|\epsilon - \epsilon_\theta (z_t, t, c_t, c_s, c_j^a)\|^2_2] Ez0,t,ct,cs,cja,ϵN(0,I)[ϵϵθ(zt,t,ct,cs,cja)22]

这里 ϵ θ \epsilon_\theta ϵθ表示整个网络预测添加到噪声输入 z t z_t zt上的噪声。在训练期间,我们固定主分支的空间权重和结构分支的权重,同时更新主分支中新加入的时间层的参数,以及外观分支的权重。默认情况下,外观分支使用视频片段的中心帧作为输入。

简而言之,训练过程中通过结合预训练模型和专门设计的初始化方法,以及通过逐步添加噪声和根据给定条件优化网络预测的方式,CCEdit模型能够学习如何根据文本描述、结构和外观信息生成高质量的视频内容。这种方法使得模型在保持视频结构的同时,也能够在外观上进行精细的调整和创新。

5. 长视频编辑

CCEdit面对的一个挑战是如何在跨越数十秒的视频片段中保持一致的外观和感觉,这相当于数百帧。由于内存限制,生成模型一次只能处理十几帧,这带来了结果上的变异性,在CCEdit模型中,"L + 1"表示模型一次能够处理的最大帧数。

为了处理超过这个数量的帧,CCEdit采用了一种策略,通过选择关键帧、扩展模式和插值模式来确保整个视频的编辑结果保持一致性和连贯性。

具体来说,设 L + 1 L + 1 L+1代表CCEdit一次能处理的帧数。对于超过 L + 1 L + 1 L+1帧的视频,我们每 L L L帧选择一个关键帧。在初始运行中,前 L + 1 L+1 L+1个关键帧进行编辑。在后续的扩展模式运行中,将上一次运行的最后一个编辑帧作为第一帧。编辑结果作为外观分支的参考。这个过程一直重复,直到所有关键帧都被处理。转到插值模式时,两个相邻帧成为一个推断运行的第一帧和最后一帧,以编辑 L − 1 L - 1 L1个中间帧,且两个编辑过的帧作为外观分支的参考。这一过程持续进行,直到所有帧都被编辑。这一细致的过程确保了整个视频的编辑结果保持一致。

  • 关键帧选择:对于超过"L + 1"帧的视频,我们会每隔L帧选择一个关键帧进行编辑。这些关键帧作为视频编辑的基准点,帮助确保编辑效果的一致性。

  • 扩展模式:在初始运行中处理了第一组"L + 1"帧之后,接下来的运行会将上一次运行的最后一帧作为新的起始帧,这样做是为了在视频的连续帧之间保持编辑效果的连贯性。这个过程会一直重复,直到所有的关键帧都被处理完毕。

  • 插值模式:在处理完所有关键帧之后,为了确保整个视频帧之间的平滑过渡,CCEdit会使用插值模式来编辑那些没有被直接编辑的中间帧。这种方式通过在两个已编辑的关键帧之间进行插值,来编辑中间的"L - 1"帧,确保编辑效果在整个视频中的一致性。

这个过程确保了,即便是在长视频中,每个片段都能够以一种连贯和一致的方式被编辑,从而提高了整个视频的质量和观感。这种方法特别适用于处理大量帧的视频内容,能够有效地解决内存限制问题,并保持编辑的高质量结果。

6. 使用场景

CCEdit适用于各种视频编辑任务,包括但不限于以下几种:

  • 内容修改
  • 风格转换
  • 颜色调整
  • 动态效果的创造

无论是需要精确编辑特定帧的专业视频制作人员,还是希望给自己的社交媒体内容添加创意效果的短视频博主,CCEdit都能满足他们的需求。

7. 评估指标

  • 平均意见得分(Mean Opinion Score, MOS)

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

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

相关文章

单片机01天---stm32基本信息了解

下载数据手册 以STM32F407ZG为例 网站:www.st.com,搜索芯片型号,下载“数据手册”使用 数据手册使用 查看芯片型号信息 芯片资源信息 时钟框图 芯片资源表格下方 GPIO口表格 一般位于下图后面的位置 ①工作电压:1.8V – 3.6V…

Idea启动Gradle报错: Please, re-import the Gradle project and try again

Idea启动Gradle报错:Warning:Unable to make the module: reading, related gradle configuration was not found. Please, re-import the Gradle project and try again. 解决办法: 开启步骤:View -> Tool Windows -> Gradle 点击refe…

HN 千赞热贴|创业 4 年,那些狠狠打我脸的技术选型

Hacker News 帖子 过年这段时间,Hacker News 上也涌现了不少好帖子,除了霸榜的 Sora 外,技术贴最靠前的就是这篇 (Almost) Every infrastructure decision I endorse or regret after 4 years running infrastructure at a startup。作者根据…

【Django开发】0到1开发美多shop项目:图形和短信验证码。全md文档笔记(附代码,已分享)

本系列文章md笔记(已分享)主要讨论django商城项目相关知识。项目利用Django框架开发一套前后端不分离的商城项目(4.0版本)含代码和文档。功能包括前后端不分离,方便SEO。采用Django Jinja2模板引擎 Vue.js实现前后端…

【Java多线程】线程安全问题与解决方案

目录 1、线程安全问题 1.2、线程安全原因 2、线程加锁 2.1、synchronized 关键字 2.2、完善代码 2.3、对同一个线程的加锁操作 3、内容补充 3.1、内存可见性问题 3.2、指令重排序问题 3.3、解决方法 3.4、总结 volatile 关键字 1、线程安全问题 某个代码&#xff…

初识结构体(C语言)

目录 1、结构体声明 2、结构体访问 3、结构体传参 1、结构体声明 结构是一些值的集合,这些值称为成员变量。结构的每一个成员可以是不同类型的变量。有点像数组,但是一个数组只能存放同一种类型的变量。如果要描述复杂对象的时候,对象由多…

基于Java SSM框架实现留学生交流互动论坛网站项目【项目源码+论文说明】

摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

基于ant的图片上传组件封装(复制即可使用)

/*** 上传图片组件* param imgSize 图片大小限制* param data 上传数据* param disabled 是否禁用*/import React, { useState,useEffect } from react; import { Upload, Icon, message} from antd; const UploadImage ({imgSize 50,data { Directory: Image },disabled f…

Vue封装全局公共方法

有的时候,我们需要在多个组件里调用一个公共方法,这样我们就能将这个方法封装成全局的公共方法。 我们先在src下的assets里新建一个js文件夹,然后建一个common.js的文件,如下图所示: 然后在common.js里写我们的公共方法,比如这里我们写了一个testLink的方法,然后在main…

Apache Flink连载(三十):Flink 内存模型

🏡 个人主页:IT贫道-CSDN博客 🚩 私聊博主:私聊博主加WX好友,获取更多资料哦~ 🔔 博主个人B栈地址:豹哥教你学编程的个人空间-豹哥教你学编程个人主页-哔哩哔哩视频 目录

【GUI编程】Tkinter之OptionMenu

OptionMenu OptionMenu类是一个辅助类,它用来创建弹出菜单,并且有一恶搞按钮显示它。它非常类似Windows上的下拉列表插件。 如果要获取当前选项菜单的值,你需要把它和一个Tkinter变量联系起来。 def __init__(self, master, variable, val…

“无限交互,全新驾驶体验!智能语音小车,与您共同开创未来出行。”#51单片机最终项目《智能语音小车》【上】

"无限交互,全新驾驶体验!智能语音小车,与您共同开创未来出行。”#51单片机最终项目《智能语音小车》【上】 前言预备知识1. L9110S电机控制器接线1.1 L9110S概述1.2 L9110S IO口描述1.3 L9110S 实物图1.4 L9110S与单片机接线 2. L9110前…

PostgreSQL按日期列创建分区表

在PostgreSQL中,实现自动创建分区表主要依赖于表的分区功能,这一功能从PostgreSQL 10开始引入。分区表可以帮助管理大量数据,通过分布数据到不同的分区来提高查询效率和数据维护的便捷性。以下是在PostgreSQL中自动创建分区表的一般步骤&…

【Git】Gitbash使用ssh 上传本地项目到github

SSH Git上传项目到GitHub(图文)_git ssh上传github-CSDN博客 前提 ssh-keygen -t rsa -C “自己的github电子邮箱” 生成密钥,公钥保存到自己的github的ssh里 1.先创建一个仓库,复制ssh地址 git init git add . git commit -m …

GEE必须会教程—跳舞的线(字符串类型)

字符串,GEE上跳舞的线! GEE学习之路漫长,跟着小编一起走进今天的数据类型的学习。字符串是各大编程语言的常用数据类型,我们今天需要了解GEE平台上字符串的定义、以及常用的方法。 1.定义字符串 //字符串构造 var base_str &q…

「Java同步原理与底层实现解析」

原理概要: java虚拟机中的同步基于进入与结束Monitor对象实现,无论是显式同步(同步代码块进入在jvm是根据monitorenter标志、结束是monitorexit标志,那最后一个是monitorexit是异常结束时被执行的释放指令)、隐式同步…

STM32 输入捕获模式测频率

单片机学习! 目录 文章目录 前言 一、输入捕获测频率配置步骤 二、代码示例及注意事项 2.1 RCC开启时钟 2.2 GPIO初始化 2.3 配置时基单元 2.4 配置输入捕获单元 2.5 选择从模式的触发源 2.6 配置从模式为Reset 2.7 开启定时器 总结 前言 博文介绍如何配置输入捕获电…

OpenAI 全新发布文生视频模型 Sora,支持 60s 超长长度,有哪些突破?将带来哪些影响?

Sora大模型简介 OpenAI 的官方解释了在视频数据基础上进行大规模训练生成模型的方法。 我们下面会摘取其中的关键部分罗列让大家快速get重点。 喜欢钻研的伙伴可以到官网查看技术报告: https://openai.com/research/video-generation-models-as-world-simulator…

AI破局俱乐部,你要了解的都在这里

您好,我是码农飞哥(wei158556),感谢您阅读本文,欢迎一键三连哦。💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通…

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…