当前位置: 首页 > news >正文

AnimateDiff论文解读

GitHub - Kosinkadink/ComfyUI-AnimateDiff-Evolved: Improved AnimateDiff for ComfyUI and Advanced Sampling Support

视频编码

  • 定义: 首先,将视频数据转换为一系列的潜变量代码(latent codes)。这是通过一个预训练的自动编码器(auto-encoder)来完成的。
  • 操作: 对于每个视频帧,自动编码器将其转换成一个低维的潜变量代码。这些潜变量代码捕捉了视频帧的主要特征,并且在高维空间中表示视频帧的内容。

噪声添加

  • 定义: 按照预定的扩散过程,在潜变量代码上添加噪声。这一过程模拟了图像退化的过程,即从清晰的图像逐渐变为噪声图像。

需要细化的部分:

  • 视频编码:这一步是正确的,但值得强调的是,使用的是基础T2I模型(如Stable Diffusion)中预训练的自动编码器,而不是单独训练的编码器。
  • 噪声添加:这里可以补充,噪声添加遵循预定义的前向扩散进度表,不同时间步的噪声强度是不同的。
  • 预测噪声:运动模块不是独立工作的,而是作为扩展后的T2I模型的一部分。整个模型(包括基础T2I部分和运动模块)共同参与噪声预测过程。
  • 固定权重:值得强调的是,在这个阶段,只有运动模块的权重是可训练的,而基础T2I模型和域适配器的权重是固定的。

运动模块 的输入和输出分别是什么?具体如何使用这个运动模块

  • 运动模块的输入:
    • 形状为 (b×h×w)×c×f 的特征图,其中: b: 批次大小 h, w: 空间维度(高度和宽度) c: 通道数 f: 帧数(时间维度)
    • 位置编码:用于表示每一帧在时间序列中的位置
  • 运动模块的输出:
    • 与输入形状相同的特征图,但经过了时间维度上的信息交换和处理
  • 运动模块的内部处理:
    • 将输入重塑为 (b×h×w)×f×c 的形状,将空间维度合并到批次维度
    • 通过自注意力机制处理时间维度上的信息
    • 输出再次重塑回原始形状
  • 如何使用运动模块: a. 模型扩展:
    • 将原始的2D T2I模型扩展为能处理3D(时间+空间)数据的模型
    • 在适当的位置插入运动模块,通常在每个分辨率级别的主要处理块之后
    b. 推理过程:
    • 输入:文本提示和初始噪声(代表多帧)
    • 逐步去噪:
      • 在每一步,特征图通过扩展的T2I模型的各层
      • 当特征图通过到达运动模块时:
        • 运动模块处理时间维度上的信息
        • 输出被传递到模型的下一层
    • 这个过程重复多次,直到生成最终的无噪声潜在表示
    • 最后通过解码器生成实际的视频帧

  • 训练过程:
    • 类似于推理,但包括反向传播来更新运动模块的权重
    • 使用视频数据集,将视频帧编码为潜在表示
    • 添加噪声,然后通过模型(包括运动模块)预测噪声
    • 计算预测噪声与实际噪声之间的损失,并用于更新运动模块

在AnimateDiff的第三阶段训练中,主要目标是使预训练的motion module能够适应新的运动模式。这一阶段被称为MotionLoRA,它是一种轻量级的微调技术,允许模型快速适应特定的运动效果,如不同的镜头类型等,而不需要大量的参考视频或长时间的训练。

第三阶段训练概述

  1. 保持第二阶段权重不变:在第三阶段,motion module的权重(即第二阶段训练得到的权重)是固定的,不会被更新。这意味着前两个阶段学到的一般运动先验知识不会丢失。

  2. 引入MotionLoRA:在motion module的基础上,通过引入LoRA层(一种低秩适配方法)来进行微调。这些LoRA层被添加到motion module的自注意力层中,使得模型能够学习到特定的新运动模式。

  3. 微调MotionLoRA层:只对这些新增的LoRA层进行训练,而不是整个motion module。这样做的好处是可以高效地学习新运动模式,同时保留原有的通用运动能力。

第三阶段的具体步骤

  1. 准备少量参考视频:收集20至50个具有特定运动模式的参考视频,例如想要实现缩放效果的视频。

  2. 数据增强:通过规则性的数据增强技术来生成更多具有所需运动模式的视频。例如,为了获得缩放效果的视频,可以通过逐步缩小(缩放)或放大(缩放)视频帧的裁剪区域来创建这种效果。

  3. 训练MotionLoRA层:在这些参考视频上训练MotionLoRA层。训练的时间通常较短,大约需要2000次迭代(大约1到2小时)。这使得用户能够在较低的成本下快速调整模型以适应特定的运动模式。

  4. 存储空间:训练好的MotionLoRA模型额外占用大约30MB的存储空间。这不仅使得模型易于分享,也降低了用户的成本负担。

结论

在第三阶段中,AnimateDiff通过MotionLoRA技术使得预训练的motion module能够高效地适应新的运动模式,同时保持了第二阶段训练得到的motion module权重固定不变。这样既保证了模型能够学习到通用的运动模式,又能够快速地针对特定需求进行调整。

相关文章:

AnimateDiff论文解读

GitHub - Kosinkadink/ComfyUI-AnimateDiff-Evolved: Improved AnimateDiff for ComfyUI and Advanced Sampling Support 视频编码 定义: 首先,将视频数据转换为一系列的潜变量代码(latent codes)。这是通过一个预训练的自动编码器(auto-encoder)来完成的。操作: …...

C/C++控制台贪吃蛇游戏的实现

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 一、…...

Linux 升级安装 Weblogic-补丁!

版本: RedHat 6.5 Weblogic 10.3.6.0 ----------------------------------------------------------------- 1.查看当前 weblogic 补丁版本 cd /weblogic/utils/bsu/ ./bsu.sh -prod_dir/weblogic/wlserver_10.3/ -statusapplied -verbose -view 2.卸载旧补丁…...

苍鹰来啦!快来看呀!NGO-BiTCN-BiGRU-Attention北方苍鹰算法优化多重双向深度学习回归预测

苍鹰来啦!快来看呀!NGO-BiTCN-BiGRU-Attention北方苍鹰算法优化多重双向深度学习回归预测 目录 苍鹰来啦!快来看呀!NGO-BiTCN-BiGRU-Attention北方苍鹰算法优化多重双向深度学习回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实…...

关于WebSocket必知必会的知识点

什么是WebSocket WebSocket是一种网络传输协议,可以在单个TCP连接上进行全双工通信,位于OSI模型的应用层。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,服务器可以主动向客户端发送消息。在WebSocket API中,浏览器和…...

Go 1.19.4 Sort排序进阶-Day 12

1. 结构体(切片)排序 结构体返回的是切片。 之前学习了sort.Ints()和sort.Strings(),使用这两个sort库下面的方法,可以对int和strings进行排序。 那如果我要对自定义类型进行排序,怎么办,sort库没提供&…...

python-求距离(赛氪OJ)

[题目描述] 给你一个 1−>n 的排列,现在有一次机会可以交换两个数的位置,求交换后最小值和最大值之间的最大距离是多少?输入格式: 输入共两行。 第一行一个数 n 。 第二行 n 个数表示这个排列。输出格式: 输出一行一…...

《第二十一章 传感器与定位 - 传感器应用》

《第二十一章 传感器与定位 - 传感器应用》 在当今的移动应用开发中,充分利用设备的传感器能够为用户带来更加智能和便捷的体验。本章将重点探讨加速度传感器、方向传感器和光线传感器的应用。 一、传感器应用的重要性 随着智能手机和移动设备的普及,传感…...

Windows系统命令

Windows系统命令 Windows 系统中的命令行工具是指令式编程语言,可以用来执行各种任务、管理文件和目录、监控系统状态等。下面是一个 Windows 命令应用实例: 1. 文件操作 cd:用于改变当前目录。例如,cd Documents 将当前目录更…...

C语言函数递归

前言与概述 本文章将通过多个代码并赋予图示,详细讲解C语言函数递归的定义和函数递归的运算过程。 函数递归定义 程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。它…...

【python数据分析11】——Pandas统计分析(分组聚合进行组内计算)

分组聚合进行组内计算 前言1、groupby方法拆分数据2、agg方法聚合数据3、apply方法聚合数据4、transform方法聚合数据5 小案例5.1 按照时间对菜品订单详情表进行拆分5.2 使用agg方法计算5.3 使用apply方法统计单日菜品销售数目 前言 依据某个或者几个字段对数据集进行分组&…...

高性能web服务器

目录 一、简介 (一)nginx-高性能的web服务端 (二)用户访问体验 二、I/O模型 (一)概念 (二)网络I/O模型 (三)阻塞型 I/O 模型 (四&#xf…...

微服务案例搭建

目录 一、案例搭建 1.数据库表 2.服务模块 二、具体代码实现如下: (1) 首先是大体框架为: (2)父模块中的pom文件配置 (3)shop_common模块,这个模块里面只需要配置pom.xml,与实体…...

SAP负库存

业务示例 在系统中,对于一些物料而言,不能立即将收到的交货输入为收货。如果要使发货无论如何都是可以过帐的,则需要允许这些物料的负库存。 负库存 发货数量大于预订数量时,过帐该发货就会出现负库存。如果由于组织原因&#…...

集团数字化转型方案(三)

集团数字化转型方案通过系统整合人工智能(AI)、大数据、云计算和物联网(IoT)技术,建立了一个全面智能化的业务管理平台,涵盖从业务流程自动化、数据驱动决策支持,到客户体验优化和供应链管理的各…...

ESP32智能设备:蓝牙音箱、AI语音助手、环境监测与调节以及智能控制,基于BLE与MQTT技术(代码详解)

本文将介绍如何实现一个功能丰富的ESP32项目,集成蓝牙音箱、AI语音助手、智能设备控制器、环境监测与调节等功能。通过本项目,您将学习到硬件设计、嵌入式编程、蓝牙技术、音频处理、人工智能与语音识别、物联网平台、数据分析及用户界面构建等技术。 一…...

web渗透测试 学习导图

web渗透学习路线 前言 一、web渗透测试是什么? Web渗透测试分为白盒测试和黑盒测试,白盒测试是指目标网站的源码等信息的情况下对其渗透,相当于代码分析审计。而黑盒测试则是在对该网站系统信息不知情的情况下渗透,以下所说的Web…...

WordPress禁止后台自定义功能

wordpress后台可以彻底禁止主题的自定义菜单功能,下面这段代码添加到functions.php文件中,后台外观菜单中的”自定义”就会消失不见了。 add_filter(map_meta_cap, function($caps, $cap){if($cap customize){return [do_not_allow];}return $caps; },…...

(六)Flink 窗口计算

窗口(Window)是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中,再对每个“桶”加以处理。 目录 时间概念 窗口类型 窗口划分 窗口的生命周期 Window Assigners 窗口函数 Triggers 窗口触发器 Evictor 数据剔除器 Allowed Lateness 旁路输出 时间…...

SQL 布尔盲注 (injection 第六关)

简介 SQL注入(SQL Injection)是一种常见的网络攻击方式,通过向SQL查询中插入恶意的SQL代码,攻击者可以操控数据库,SQL注入是一种代码注入攻击,其中攻击者将恶意的SQL代码插入到应用程序的输入字段中&am…...

idea大量爆红问题解决

问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...

Cursor实现用excel数据填充word模版的方法

cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术&#xff0c;通过密码学、共识机制和智能合约等核心组件&#xff0c;实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点&#xff1a;数据存储在网络中的多个节点&#xff08;计算机&#xff09;&#xff0c;而非…...