AIGC:生成图像动力学

文章目录

  • 前言
  • 一、介绍
  • 二、方法
    • 2.1、运动预测模块
      • 运动纹理
    • 2.2、图像渲染模块
  • 三、数据集实验
  • 总结


前言

让静态的风景图能够动起来真的很有意思,不得不说CVPR2024 best paper实质名归,创意十足的一篇文章!!!

paper:https://arxiv.org/pdf/2309.07906
demo:https://generative-dynamics.github.io


一、介绍

自然界中的场景总是处于运动状态,如风、水流、呼吸等自然节律产生的振动。虽然人类可以轻松地解释或想象场景中的运动,但训练模型来学习或生成真实的场景运动却极其困难。在现实世界中观察到的运动是场景底层物理动力学的结果,例如,施加在物体上的力根据它们独特的物理属性(如质量、弹性等)做出响应,这些量很难大规模测量和捕捉。

文章实现从单个静止图像生成逼真的长时间像素轨迹通过学习从真实视频序列中提取的运动轨迹,作者开发了一种频域的密集、长期运动表示方法(光谱体积)。该方法**通过频率协调的扩散模型进行预测,能够生成覆盖整个视频的运动纹理,**从而实现如下应用:

(1). 无缝循环视频生成:将静止图像转换为无缝循环的视频。
(2). 交互动态模拟:允许用户与图像中的对象进行交互,模拟对象在用户输入(如拖动和释放点)下的动态响应。
(3). 图像动画:将单个静止图像转换为动态视频,展示自然界中的振荡运动,例如树木在风中的摆动、花朵的摇曳等。

demo :generative-dynamics.github.io.
paper:https://arxiv.org/pdf/2309.07906

二、方法

给定一张图I0,文章的目标是生成一个基于I0的视频{I1, I2, … IT}, 其特征为微风吹过的树,花产生的摇摆运动。整个system包含两个module —— 一个运动预测模块,一个基于图像的渲染模块。首先,使用潜在扩散模型(LDM)预测输入图片的频谱体积,然后通过**逆离散傅里叶变换(IDFT,将频域信号转换为时域信号)**将其转换为运动纹理。接着,利用神经图像基渲染技术将输入的RGB图像动画化。该方法在生成无缝循环动画和模拟交互动态方面有多种应用。


基本流程如下:
首先,使用「潜在扩散模型」为输入图片 I 0 I_{0} I0预测一个神经随机运动纹理(频域)——
请添加图片描述
第二步,使用逆离散傅立叶变换将预测出的随机运动纹理转化为一系列运动位移场(时域)(motion displacement fields)
请添加图片描述
这些运动位移场将用于确定每个输入像素在每一个未来时间步长的位置

2.1、运动预测模块

运动预测模块通过潜在扩散模型(LDM)从单张输入图像预测出表示密集、长期像素运动的频谱体积

运动纹理

运动纹理定义了一系列时变的2D位移映射( displacement map)
请添加图片描述
F t ( p ) F_{t}(p) Ft(p)表示每个像素坐标p,定义了输入图像 I 0 I_{0} I0中的p像素在未来时间t的位置。为了在时间t生成一个未来帧,可以使用相应的位移映射,从 I 0 I_{0} I0中拾取像素,从而得到一个前向变形的图像
请添加图片描述


正如之前在计算机图形研究中所证明的,许多自然运动,特别是振荡运动,可以描述为一小组谐振子(harmonic oscillators)的叠加,这些谐振子用不同的频率、振幅和相位表示

一种引入运动的随机性的方法是整合噪声场。但正如之前研究结果表明的,直接在预测的运动场的空间和时间域内添加随机噪声通常会导致不现实或不稳定的动画。

更进一步,采用上面定义的时间域内的运动纹理意味着需要预测T个2D位移场,才能生成一个包含T帧的视频片段。为了避免预测如此大的输出表示,许多先前的动画方法要么自回归地生成视频帧,要么通过额外的时间嵌入独立预测每个未来的输出帧。

然而,这两种策略都不能确保生成的视频帧在长期内具有时间上的一致性,而且都可能产生随时间漂移或发散的视频。

为了解决上述问题,研究人员在频率域中表示输入场景的每像素运动纹理(即所有像素的完整运动轨迹),并将运动预测问题表述为一种多模态的图像到图像的转换任务。

研究人员采用潜在扩散模型(LDM)生成由一个4*K(K为一个超参数,为作者所选取的频率分量数量)通道的2D运动光谱图组成的随机运动纹理其中K << T是建模的频率数,而在每个频率上,需要四个标量来表示x和y维度的复傅立叶系数(可表示幅值和相位, 也就是说通过这四个标量可以计算出在设定固定频率下的幅值和相位)
请添加图片描述

下图展示了这些神经随机运动纹理
请添加图片描述


那么,应该如何选择研究人员表示的 K 输出频率呢?实时动画之前的研究说明,大多数自然振荡运动主要由低频分量(low-frequency component)组成。

为了验证这一假设,研究人员计算了从1000个随机抽样的5秒真实视频剪辑中提取出来的运动的平均功率谱。如下图所示,功率主要集中在低频分量上
请添加图片描述
动作的频谱随着频率的增加呈指数下降。这表明大多数自然振动动作确实可以由低频项很好地表示。

在实践中,研究人员发现前K=16个傅里叶系数足以在一系列真实视频和场景中真实地重现原始的自然动作


训练过程中,采用频率自适应归一化技术,对傅里叶系数进行调整,防止高频分量过小而导致的生成误差。随后,模型通过迭代去噪,从高斯噪声逐步逼近真实的频谱体积。最后,通过逆离散傅里叶变换将预测的频谱体积转换为时间域的运动纹理,生成未来帧的像素运动轨迹。这一模块使得从静态图像生成逼真、连贯的动态视频成为可能。运动预测模块结构如图所示。
请添加图片描述

2.2、图像渲染模块

首先,通过逆离散傅里叶变换将频谱体积转换为时间域的运动纹理,运动纹理描述了每个像素在未来时间步的位置变化。接着,模块对输入的RGB图像进行多尺度特征提取,生成一系列特征图。利用最大值点云映射策略,将特征图中的像素根据运动纹理映射到未来帧的位置。然后,通过图像合成网络对映射后的特征图进行细化和填充,生成无缝、逼真的动画帧。在生成无缝循环视频时,模块会应用运动指导,确保视频的起始帧和结束帧在位置和速度上保持一致。通过这一系列步骤,基于图像的渲染模块成功地将静态图像转化为动态视频,实现了逼真、连贯的动画效果。

请添加图片描述

请添加图片描述

三、数据集实验

文章收集3015个展示自然振荡运动的视频,并将其分为训练集和测试集。首先从视频中提取运动轨迹生成频谱体积,然后使用这些数据训练潜在扩散模型(LDM),模型能够预测单张输入图像的频谱体积,并通过逆离散傅里叶变换将其转换为时间域的运动纹理,生成未来帧的像素运动轨迹

请添加图片描述

请添加图片描述

总结

论文提出了一种从单张静止图像建模自然振荡动态的新方法。该方法从真实世界视频集合中学习,并在扩散模型预测中表现出高效。通过基于图像的渲染模块,频谱体积用于动画未来的视频帧,生成逼真的动画,给未来生成模型的应用带来更多可能!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python: Oracle Stored Procedure query table

oracel sql script CREATE OR REPLACE PROCEDURE SelectSchool(paramSchoolId IN char,p_cursor OUT SYS_REFCURSOR ) AS BEGINOPEN p_cursor FORSELECT *FROM SchoolWHERE SchoolId paramSchoolId; END SelectSchool; /-- 查询所有 CREATE OR REPLACE PROCEDURE SelectScho…

社区版Dify 轻松实现文生图,Dify+LLM+ComfyUI

社区版Dify 轻松实文生图&#xff0c;DifyLLMComfyUI Dify 安装可参考这里ComfyUI 其实 比 WebUI更简单更实用DifyComfyUIDifyLLM1. Qwen 通义千问大模型系列2. OpenAI大模型系列3. 本地Ollama搭建 DifyLLMComfyUI Dify 安装可参考这里 这是一个在Dify上实现 文生图的教程&…

Docker部署Sentinel

一、简介 是什么&#xff1a;面向分布式、多语言异构化服务架构的流量治理组件 能干嘛&#xff1a;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性 官网地址&#xff1a;https://sentinelguard.io/zh-c…

实用工具推荐----Doxygen使用方法

目录 目录 1 软件介绍 2 Doxygen软件下载方法 3 Doxygen软件配置方法 4 标准注释描述 4.1 块注释 和 特殊描述字符 4.1.1 函数描述示例 4.1.2结构体数组变量示例 特别注意&#xff1a; 4.2单行注释 4.2.1 单个变量注释示例 特别注意&#xff1a; 4.2.2对于枚举变量…

并发编程 - 死锁的产生、排查与解决方案

在多线程编程中&#xff0c;死锁是一种非常常见的问题&#xff0c;稍不留神可能就会产生死锁&#xff0c;今天就和大家分享死锁产生的原因&#xff0c;如何排查&#xff0c;以及解决办法。 线程死锁通常是因为两个或两个以上线程在资源争夺中&#xff0c;形成循环等待&#xf…

云轴科技ZStack获评OpenCloudOS社区2024年度优秀贡献单位

近日&#xff0c;由 OpenCloudOS 社区主办的 2024 OpenCloudOS 年会在北京成功召开。本次大会以“稳建基石&#xff0c;共创新篇”为主题&#xff0c;汇集了业界顶级技术专家与行业领袖&#xff0c;共同探讨下一代操作系统的建设与未来。云轴科技ZStack作为OpenCloudOS 社区的重…

clickhouse解决suspiciously many的异常

1. 问题背景 clickhouse安装在虚拟机上&#xff0c;持续写入日志时&#xff0c;突然关机&#xff0c;然后重启&#xff0c;会出现clickhouse可以正常启动&#xff0c;但是查询sql语句&#xff0c;提示suspiciously many异常&#xff0c;如图所示 2. 问题修复 touch /data/cl…

从零开始k8s-部署篇(未完待续)

从零开始k8s 1.部署k8s-部署篇 1.部署k8s-部署篇 本次部署完全学习于华子的博客点击此处进入华子主页 K8S中文官网&#xff1a;https://kubernetes.io/zh-cn 笔者从零开始部署的k8s&#xff0c;部署前置条件为 1.需要harbor仓库&#xff0c;存放镜像&#xff0c;拉取镜像&am…

Dots 常用操作

游戏中有多个蚂蚁群落&#xff0c;每个蚂蚁属于一个群落&#xff0c;如何设计数据结构&#xff1f; 方法1&#xff1a;为蚂蚁组件添加一个属性 ID&#xff0c;会造成逻辑中大量分支语句&#xff0c;如果分支语句逻辑不平衡可能带来 Job 调度问题&#xff0c;每个蚂蚁会有一份蚂…

如何通过 Kafka 将数据导入 Elasticsearch

作者&#xff1a;来自 Elastic Andre Luiz 将 Apache Kafka 与 Elasticsearch 集成的分步指南&#xff0c;以便使用 Python、Docker Compose 和 Kafka Connect 实现高效的数据提取、索引和可视化。 在本文中&#xff0c;我们将展示如何将 Apache Kafka 与 Elasticsearch 集成以…

深入浅出:AWT的基本组件及其应用

目录 前言 1. AWT简介 2. AWT基本组件 2.1 Button&#xff1a;按钮 2.2 Label&#xff1a;标签 ​编辑 2.3 TextField&#xff1a;文本框 2.4 Checkbox&#xff1a;复选框 2.5 Choice&#xff1a;下拉菜单 2.6 List&#xff1a;列表 综合案例 注意 3. AWT事件处理 …

Go Energy 跨平台框架 v2.5.1 发布

Energy 框架 是Go语言基于CEF 和 LCL 开发的跨平台 GUI 框架, 具体丰富的系统原生 UI 控件集, 丰富的 CEF 功能 API&#xff0c;简化且不失功能的 CEF 功能 API 使用。 特性&#xff1f; 特性描述跨平台支持 Windows, macOS, Linux简单Go语言的简单特性&#xff0c;使用简单…

JS 异步 ( 一、异步概念、Web worker 基本使用 )

文章目录 异步代码异步执行概念ES6 之前的异步 Web worker 异步 代码异步执行概念 通常代码是自上而下同步执行的&#xff0c;既后面的代码必须等待前面的代码执行完才会执行&#xff0c;而异步执行则是将主线程中的某段代码交由子线程去执行&#xff0c;当交给子线程后&…

机器学习(二)-简单线性回归

文章目录 1. 简单线性回归理论2. python通过简单线性回归预测房价2.1 预测数据2.2导入标准库2.3 导入数据2.4 划分数据集2.5 导入线性回归模块2.6 对测试集进行预测2.7 计算均方误差 J2.8 计算参数 w0、w12.9 可视化训练集拟合结果2.10 可视化测试集拟合结果2.11 保存模型2.12 …

Java字符串操作利器:StringBuffer与StringBuilder类详解

在处理字符串变更时&#xff0c;StringBuffer和StringBuilder类是优选工具。与String类不同&#xff0c;StringBuffer和StringBuilder允许对象被多次修改&#xff0c;而不会生成新的未使用对象。 StringBuilder类自Java 5起引入&#xff0c;其与StringBuffer的主要区别在于Stri…

软件确认测试报告的内容和作用简析

软件确认测试报告是对软件确认测试过程及结果的正式记录&#xff0c;是评估软件质量的重要依据。它不仅对开发团队起到反馈作用&#xff0c;更是决策层判断软件是否可以交付的重要参考。 一、软件确认测试报告包括的内容   1、测试目的&#xff1a;明确此次测试的目的和所要…

结构体(初阶)

结构体&#xff1a; 结构体类型的声明 结构体初始化 结构成员访问 结构体传参 1.结构体的声明 1.1结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag { member - list; }variable-lis…

详解VHDL如何编写Testbench

1.概述 仿真测试平台文件(Testbench)是可以用来验证所设计的硬件模型正确性的 VHDL模型&#xff0c;它为所测试的元件提供了激励信号&#xff0c;可以以波形的方式显示仿真结果或把测试结果存储到文件中。这里所说的激励信号可以直接集成在测试平台文件中&#xff0c;也可以从…

React 第二十节 useRef 用途使用技巧注意事项详解

简述 useRef 用于操作不需要在视图上渲染的属性数据&#xff0c;用于访问真实的DOM节点&#xff0c;或者React组件的实例对象&#xff0c;允许直接操作DOM元素或者是组件&#xff1b; 写法 const inpRef useRef(params)参数&#xff1a; useRef(params)&#xff0c;接收的 …

SQL子查询和having实例

有2个表如下&#xff1b;一个是站点信息&#xff0c;一个是站点不同时间的访问量&#xff0c; 现在要获取总访问量大于200的网站&#xff1b; 先执行如下sql&#xff0c;不包括having子句看一下&#xff0c;获得的是所有站点的总访问量&#xff1b; 这应是一个子查询&#xf…