【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.hqwc.cn/news/479406.html

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

相关文章

证券公司VIP快速交易通道是什么?可以免费申请吗?

交易速度是王道!!! “快速交易通道,早已不是什么新鲜事了。”深圳某上市券商经纪业务部负责人称,尽管各家券商提供的VIP通道形式不同,功能各异,而且无论是深市还是沪市都能申请VIP交易通道&…

业务签署升级,君子签电子签章助推汽车融资租赁释放消费潜力

汽车融资租赁是一种新型的分期购车方式,承租人通过向汽车融资租赁机构租赁,并进行分期付款,先获得使用权,待分期全部完成,继而获得所有权。这种以租代购、分期付款的购车方式,可以有效降低购车门槛&#xf…

【机器学习算法】KNN鸢尾花种类预测案例和特征预处理。全md文档笔记(已分享,附代码)

本系列文章md笔记(已分享)主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习,伴随浅显易懂的数学知识,让大家掌握机器学习常见算法原理,应用Scikit-learn实现机器学习算法的应用&#xff0…

VSCode C/C++无法跳转到定义(又是你 clangd !)

原博客:VSCode C/C无法跳转到定义、自动补全、悬停提示功能_c/c:edit configurations(json)-CSDN博客 我在此基础上加一点: 首先确保自己有这个插件: 点击 齿轮⚙ 符号,进入 配置设置,找到 把 C_cpp : Intelli Sens…

二叉树基本概念与遍历

什么是二叉树 二叉树不同于别的树,因为他每个节点最多只有两个子节点,而别的树可以有无数个子节点。 所以二叉树就是只最多只有两个子节点的树,一个子节点叫右子节点,另一个子节点叫左子结点 而他们的上一层就是父子节点&#xf…

TCP和UDP的使用方法和注意事项

文章目录 客户端和服务器TCP和UDP的特点UDP socket api的使用DatagramSocketDatagramPacketInetSocketAddress API 做一个简单的回显服务器UDP版本的回显服务器TCP版本的回显服务器 客户端和服务器 在网络中,主动发起通信的一方是客户端,被动接受的这一方…

OpenAI最新Sora视频学习与生成的技术分析与最新体验渠道

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

2024阿里云云服务器ECS价格表出炉

2024年最新阿里云服务器租用费用优惠价格表,轻量2核2G3M带宽轻量服务器一年61元,折合5元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年,2核4G4M轻量服务器165元一年,2核4G服务器30元3…

MBD_入门篇_17_Simulink逻辑和位运算模块

17.Simulink逻辑和位运算模块 17.1 概述 Logic And Bit Operation,逻辑和位运算操作模块。 17.2 逻辑运算模块LogicalOperator 可以对输入做与、或、非、异或等逻辑运算。 简单示例。 17.3 比较运算模块RelationOperation 比较两个数的大小等运算。 注意&#xff0c…

QT中事件过滤器

Qt添加事件过滤器,设置拖放listWidget、TreeWidget、TableWidget控件。 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this)…

【JAVA】《接口,抽象方法,抽象类 》之二 、抽象方法详解

抽象方法 详解 一、接口二、抽象方法2.1、抽象方法概念2.2、抽象方法的特点:2.3、抽象方法的作用:2.4、抽象方法的应用:2.5、抽象方法的实践:2.6、使用抽象方法的注意事项 三、抽象类四、开发实践 一、接口 1.1、接口的概念 1.2、…

如何利用Idea创建一个Servlet项目(新手向)

💕"Echo"💕 作者:Mylvzi 文章主要内容:如何利用Idea创建一个Servlet项目(新手向) Servlet是tomcat的api,利用Servlet进行webapp开发很方便,本文将介绍如何通过Idea创建一个Servlet项目(一共分为七步,这可能是我们写过的…