AIGC视频生成明星——Emu Video模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Meta的视频生成模型Emu Video,作为Meta发布的第二款视频生成模型,在视频生成领域发挥关键作用。
🌺优质专栏回顾🌺:
- 机器学习笔记
- 深度学习笔记
- 多模态论文笔记
- AIGC—图像
文章目录
- 论文
- 摘要
- 引言
- 相关工作
- 文本到图像(T2I)扩散模型
- 视频生成/预测
- 文本到视频(T2V)生成
- 分解生成
- 方法
- 预备知识
- Emu Video
- 生成步骤
- 图像条件
- 模型结构
- 零终端信噪比 噪声调度
- 插值模型
- 实现简单性
- 稳健的人类评估(JUICE)
- 实现细节
- 架构与初始化
- 高效的多阶段多分辨率训练
- 高质量微调
- 插值模型
- 实验
- 伦理问题
论文
项目:https://emu-video.metademolab.com/assets/emu_video
论文:https://arxiv.org/pdf/2311.10709
摘要
本文提出Emu Video,这是一种文本到视频生成模型,将生成过程分解为两个步骤:
- 先根据文本生成图像;
- 再基于文本
和
生成的图像生成视频。
该模型在性能上超越了RunwayML的Gen2和Pika Labs等商业解决方案。
引言
T2I模型在大规模的图像文本对上训练,已经很成功了,可使用视频文本对进一步拓展文本到视频(T2V)生成,但视频生成在质量和多样性方面仍落后于图像生成。原因在于:
- 需要对更高维度的时空输出空间进行建模,且仅以文本提示作为条件;
- 视频文本数据集通常比图像文本数据集小一个数量级。
当前视频生成的主流范式是使用扩散模型一次性生成所有视频帧。而不是NLP中的自回归问题不同,自回归方法在视频生成中具有挑战性,因为从扩散模型生成单个帧就需要多次迭代。
Emu Video通过显式的中间图像生成步骤,将文本到视频生成分解为两个子问题:
- 根据输入文本提示生成图像;
- 基于图像和文本的强条件生成视频。
直观地说,给模型一个起始图像和文本会使视频生成更容易,因为模型只需要预测图像未来的演变。
由于视频文本数据集远小于图像文本数据集,使用预训练的文本到图像(T2I)模型初始化T2V模型,并冻结其权重。在推理时,这种分解方法能显式生成图像,从而保留T2I模型的视觉多样性、风格和质量。
Emu Video证明了将文本到视频(T2V)生成过程分解为:先生成图像,再用生成的图像和文本生成视频。可以大幅提高生成质量。
到此,作者确定了他们的关键设计决策 —— 改变扩散噪声调度和采用多阶段训练,从而能够绕过先前工作中对深度级联模型的需求,高效生成 512 像素高分辨率的视频。该模型也可以根据用户提供的图像和文本提示生成视频。
相关工作
文本到图像(T2I)扩散模型
相比于先前的生成对抗网络(GAN)或自回归方法,扩散模型是文本到图像生成的前沿方法,通过加噪声和预测加入的噪声并去除来学习数据分布,生成输出。
扩散模型去噪可以在像素空间使用,也可以在低维潜在空间使用,本文采用潜在扩散模型进行视频生成
。
视频生成/预测
许多先前工作,如掩码预测、LSTMs、GANs 等通常在有限的领域中进行训练和评估。它们适用的场景较为狭窄,可能只在特定类型的视频数据、特定的任务要求或特定的应用场景中表现良好。
本文的研究中,目标是开放集的文本到视频(T2V)生成
。开放集意味着处理的数据和任务场景更为广泛和多样,没有预先设定的严格限制,这与之前这些方法所适用的有限领域形成对比。
文本到视频(T2V)生成
多数先前工作通过利用T2I模型来解决T2V生成问题:
- 采用无训练方法,通过在T2I模型中注入运动信息进行零样本T2V生成;
- 通过微调T2I模型实现单样本T2V生成。
这些方法生成的视频质量和多样性有限。
也有许多工作通过向T2I模型引入时间参数,学习从文本条件到生成视频的直接映射,来改进T2V生成。如
- Make-A-Video利用预训练的T2I模型和先验网络,在无配对视频文本数据的情况下训练T2V生成;
- Imagen Video基于Imagen T2I模型构建级联扩散模型。
为解决高维时空空间建模的挑战,部分工作在低维潜在空间训练T2V扩散模型,但这些方法学习从文本到高维视频空间的直接映射具有挑战性。
本文则 采用分解方法来增强条件信号
。
分解生成
与Emu Video在分解方面最相似的工作是CogVideo和Make-A-Video:
- CogVideo基于预训练的T2I模型,使用自回归Transformer进行T2V生成,其自回归性质在训练和推理阶段与Emu Video的显式图像条件有根本区别。
- Make-A-Video 利用从共享图像文本空间中学习到的图像嵌入作为条件。,
Emu Video直接利用第一帧作为条件,条件更强
。
此外,Make-A-Video从预训练的T2I模型初始化,但对所有参数进行微调,无法像Emu Video那样保留T2I模型的视觉质量和多样性。Stable Video Diffusion是一项与Emu Video同时期的工作,也引入了类似的分解方法进行T2V生成。
Make-A-Video是Meta于2022年发布的模型/论文中:MAKE-A-VIDEO: TEXT-TO-VIDEO GENERATION WITHOUT TEXT-VIDEO DATA
CogVideo是国产的视频生成模型,之前清华大学和智谱AI一起研发了CogView文本生成图像模型,CogVideo由清华大学发布的论文:CogVideo: Large-scale Pretraining for Text-to-Video Generation via Transformers
方法
文本到视频(T2V)生成的目标:构建一个模型,该模型以文本提示 P 作为输入,生成由 T 个 RGB 帧组成的视频 V。
近期的一些模型仅使用文本作为条件,一次性直接生成 T 个视频帧。作者在本论文中认为:
通过文本和图像共同提供更强的条件能够提升视频生成效果
(验证参见 3.2 节 )。
预备知识
条件扩散模型是一类生成模型,通过迭代对高斯噪声去噪,根据条件输入c生成输出。
在训练时:
- 将时间步 t ∈ [ 0 , N ] t \in[0, N] t∈[0,N]相关的高斯噪声 ϵ t ∼ N ( 0 , 1 ) \epsilon_{t} \sim N(0, 1) ϵt∼N(0,1)添加到原始输入信号X上,得到有噪输入 X t = α t X + 1 − α t ϵ t X_{t}=\alpha_{t} X+\sqrt{1-\alpha_{t}} \epsilon_{t} Xt=αtX+1−αtϵt,其中 α t \alpha_{t} αt定义 “噪声调度”,N是扩散步骤总数。
- 扩散模型通过预测噪声 ϵ t \epsilon_{t} ϵt、 x x x或 v t = α t ϵ t − 1 − α t X v_{t}=\alpha_{t} \epsilon_{t}-\sqrt{1-\alpha_{t}} X vt=αtϵt−1−αtX来对 x t x_{t} xt进行去噪。时间步t的信噪比(SNR)为 ( α t 1 − α t ) 2 (\frac{\alpha_{t}}{1-\alpha_{t}})^{2} (1−αtαt)2,并随着 t → N t \to N t→N而降低。
在推理时:
- 从纯噪声/高斯噪声 X N ∼ N ( 0 , 1 ) X_{N} \sim N(0, 1) XN∼N(0,1)开始去噪生成样本。
对 x t x_{t} xt去噪的三种预测方式:
- 预测 ϵ t \epsilon_{t} ϵt(
常用
):- ϵ t \epsilon_{t} ϵt是在时间步 t t t添加到原始输入信号 X X X的高斯噪声 ϵ t ∼ N ( 0 , 1 ) \epsilon_{t}\sim N(0, 1) ϵt∼N(0,1)。如果模型能够准确预测出这个噪声,那么就可以从含噪输入 X t = α t X + 1 − α t ϵ t X_{t}=\alpha_{t}X +\sqrt{1-\alpha_{t}}\epsilon_{t} Xt=αtX+1−αtϵt中减去预测的噪声,从而达到去噪的目的。
- 预测 x x x:
- 这里的 x x x是指原始输入信号 X X X。模型直接预测原始信号本身,在得到预测的原始信号 X ^ \hat{X} X^后,就可以将含噪输入 X t X_{t} Xt中的噪声部分去除。在实际操作中,直接预测原始信号可能会比较复杂,因为模型需要学习从含噪信号中还原出原始信号的复杂映射关系。
- 预测 v t v_{t} vt:
- v t = α t ϵ t − 1 − α t X v_{t}=\alpha_{t}\epsilon_{t}-\sqrt{1 - \alpha_{t}}X vt=αtϵt−1−αtX是一种组合了噪声 ϵ t \epsilon_{t} ϵt和原始信号 X X X的形式。当模型预测出 v t v_{t} vt为 v ^ t \hat{v}_{t} v^t时,可以通过一定的数学变换来去除噪声,恢复原始信号。这种方式综合考虑了噪声和原始信号之间的关系,也是一种有效的去噪策略。
Emu Video
图3描述了分解的文本 - 视频生成过程。
- 首先根据文本 p p p生成图像 I I I;
- 然后使用更强的条件,即生成的图像和文本来生成视频 V V V。
为了使我们的模型 F \mathcal{F} F以图像为条件,我们在时间维度上对图像进行零填充,并将其与一个二进制掩码连接起来,该掩码指示哪些帧是零填充的【类似Trandformer的填充遮蔽(Padding Masking)与未来遮蔽(Future Masking)】,以及含噪输入。
生成步骤
将文本到视频生成分解为两个步骤:
- 首先,根据文本提示 p p p 生成第一帧(图像);
- 然后,利用文本提示 p p p 和图像条件【下面会介绍图像条件怎么来的】生成T帧视频。
这两个步骤均使用潜在扩散模型 F \mathcal{F} F实现,使用预训练的文本到图像模型初始化 F \mathcal{F} F,确保其在初始化时能够生成图像。
只需训练 F \mathcal{F} F解决第二步,即根据文本提示和起始帧/图像推出视频。使用视频文本对训练 F \mathcal{F} F,通过采样起始帧/图像 I I I,让模型根据文本提示 P P P和图像 I I I条件预测 T T T帧( T T T帧会被独立地添加噪声,以生成含噪输入 x t x_{t} xt,而扩散模型的训练目标就是对这个含噪输入进行去噪)。
首先通过逐帧应用图像自动编码器的编码器将视频 v v v转换到潜在空间 X ∈ R T × C × H × W X \in \mathbb{R}^{T×C×H×W} X∈RT×C×H×W,这会降低空间维度。潜在空间中的数据可以通过自动编码器的解码器转换回像素空间。
图像条件
通过将起始帧 I I I与噪声拼接(如上图的concatenate),为模型提供条件。将 I I I表示为单帧视频( T = 1 T=1 T=1),并对其进行零填充,得到 T × C × H × W T ×C ×H ×W T×C×H×W张量,同时使用形状为 T × 1 × H × W T ×1 ×H ×W T×1×H×W的二进制掩码m,在第一时间位置设置为1表示起始帧位置,其他位置为0。将掩码m、起始帧I和有噪视频 x t x_{t} xt按通道连接作为模型输入。
与 Make-a-video等模型中基于语义嵌入设定条件的方法不同,Emu Video 的拼接的方式能让模型利用起始帧 I 的全部信息。基于语义嵌入的方法会在条件设定时丢失部分图像信息,而 Emu Video 的设计避免了这一问题,为生成高质量视频提供了更多有效信息。
掩码 m 用于标记起始帧在序列中的位置,帮助模型识别起始帧,对后续视频生成过程进行更精准的指导。
模型结构
使用预训练的T2I模型Emu初始化潜在扩散模型 F \mathcal{F} F,并添加新的可学习时间参数:
- 在每个空间卷积层之后添加一维时间卷积层;
- 在每个空间注意力层之后添加一维时间注意力层 ;
- 原始的空间卷积层和注意力层保持冻结状态。
在Runway的Gen-1中的时空潜在扩散中也使用了可学习时间参数:
- 在每个残差块中的每个 2D 空间卷积之后引入一个1D 时间卷积。
- 在每个空间 2D 空间注意力块后引入一个时间1D 时间注意力块。
预训练的 T2I 模型以文本作为条件,与上一节的图像条件相结合后,模型 F \mathcal{F} F 同时以文本和图像作为条件。
Emu是Meta发布的一款T2I模型,论文为:Emu: Enhancing Image Generation Models Using Photogenic Needles in a Haystack
零终端信噪比 噪声调度
作者发现,先前工作(Emu和SD模型)中使用的扩散噪声调度存在训练 - 测试差异,这会阻碍高质量视频的生成。
在训练过程中,该噪声调度会留下一些残留信号,也就是说,即使在扩散的终端时间步N,信噪比(SNR)仍不为零。当我们从不含真实数据信号的随机高斯噪声中采样时,这会导致扩散模型在测试时无法很好地泛化。由于高分辨率视频帧在空间和时间上存在冗余像素,其残留信号更为明显。
作者通过缩放噪声调度并将最终的 α N = 0 \alpha_N = 0 αN=0来解决这个问题,这使得在训练过程中的时间步为N时(扩散过程的最后一个阶段),信噪比也为零。我们发现这个设计决策对于高分辨率视频的生成至关重要。
这个问题和缩放噪声调度方法并非本文首创,在之前的:Common diffusion noise schedules and sample steps are flawed也发现了这个问题。【来源于字节跳动】
插值模型
使用与 F \mathcal{F} F结构相同的插值模型 I I I,将低帧率的 T T T帧视频转换为高帧率的 T p T_{p} Tp帧视频。 输入的 T T T帧通过零交错生成 T p T_{p} Tp帧,并将指示 T T T帧存在的二进制掩码m连接到有噪输入。为提高效率,从 F \mathcal{F} F初始化 I I I,并仅针对插值任务训练 I I I的时间参数。
将低帧率的 T T T帧视频转换为高帧率的 T p T_p Tp帧,能提升视频流畅度与视觉效果,适应多样化应用场景,增强模型竞争力,为用户带来更好体验。
实现简单性
Emu Video在实现方面的简单且高效:
- 训练数据与模型结构简单
- 标准数据集训练:Emu Video采用标准视频文本数据集进行训练,这意味着其训练数据来源广泛且具有通用性,不需要特殊定制的数据集,降低了数据准备的难度和成本。
- 无需深度级联模型:在生成高分辨率视频时,Emu Video不需要像某些其他方法(如Imagen Video中使用7个模型的深度级联结构)那样复杂的模型架构,简化了模型构建和训练流程。
- 推理过程
- 图像与视频生成:推理时,先运行去除时间层的模型F根据文本提示生成图像I,再将I和文本提示作为输入,通过F直接生成高分辨率的T帧视频,这种推理方式简洁高效。
- 帧率提升:借助插值模型I可提高视频帧率,进一步增强视频的视觉效果,且这一操作融入到了整体的推理流程中。
- 模型初始化与风格保留
- 初始化策略:空间层从预训练的T2I模型初始化并保持冻结,这样可以利用T2I模型在大规模图像文本数据集上学习到的概念和风格多样性。
- 风格保留优势:相比Imagen Video需要在图像和视频数据上联合微调以维持风格,Emu Video不需要额外的训练成本就能保留并运用这些风格来生成图像I。许多直接的T2V方法,如Make-a-video,虽然也从预训练T2I模型初始化并冻结空间层,但由于没有采用基于图像的分解方法,无法像Emu Video一样保留T2I模型的质量和多样性 。
稳健的人类评估(JUICE)
由于自动评估指标不能反映质量的提升,主要使用人类评估来衡量T2V生成性能,从视频生成质量(Quality,Q)和生成视频与文本提示的对齐或 “保真度”(Faithfulness,F)两个正交方面进行评估。提出JUICE评估方案,要求评估者在成对比较视频生成结果时说明选择理由,显著提高了标注者之间的一致性。评估者可选择像素清晰度、运动平滑度、可识别对象/场景、帧一致性和运动量等理由来评价视频质量;使用空间文本对齐和时间文本对齐来评价保真度。
实现细节
附录第 1 节提供完整的实现细节,详细内容可以参考附录第 1 节,这里只介绍关键细节。
架构与初始化
采用Emu中的文本到图像 U-Net 架构构建模型,并使用预训练模型初始化所有空间参数。
预训练模型使用一个 8 通道、64×64 的潜在向量,经自动编码器在空间上进行 8 倍下采样,生成 512px 的方形图像。
该模型同时使用一个冻结的 T5-XL 和一个冻结的 CLIP 文本编码器从文本提示中提取特征。
高效的多阶段多分辨率训练
为降低计算复杂度,分两个阶段进行训练。
- 先在低分辨率下,训练更简单的任务,即生成256px、8fps、1s的视频。
- 然后在期望的高分辨率下训练,对4fps、2s的视频进行15K次迭代训练。
a. 使用同SD一样的噪声调度进行256px训练。
b. 在512px训练中使用零终端信噪比噪声调度,扩散训练步数 N = 1000 N = 1000 N=1000
c. 使用DDIM采样器进行采样,采样步数为250步。
SD中的噪声调度是:线性调度。
SD 系列文章参考:Stable Diffusion
高质量微调
通过在一小部分高运动和高质量视频上微调模型,可改善生成视频的运动效果。从训练集中自动识别出1600个具有高运动(根据H.264编码视频中存储的运动信号计算)的视频作为微调子集,并根据美学分数和视频文本与第一帧的CLIP相似度进行筛选。
插值模型
插值模型I从视频模型F初始化,输入8帧,输出 T p = 37 T_{p} = 37 Tp=37帧,帧率为16fps。在训练时使用噪声增强,在推理时对F的样本进行噪声增强。
实验
参照论文原文
伦理问题
参照论文原文
相关文章:

AIGC视频生成明星——Emu Video模型
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Meta的视频生成模型Emu Video,作为Meta发布的第二款视频生成模型,在视频生成领域发挥关键作用。 🌺优质专栏回顾&am…...

Cyber Security 101-Security Solutions-Firewall Fundamentals(防火墙基础)
了解防火墙并亲身体验 Windows 和 Linux 内置防火墙。 任务1:防火墙的用途是什么 我们看到商场、银行、 餐馆和房屋。这些警卫被安置在 这些区域用于检查进出人员。这 维护此检查的目的是确保没有人在没有 被允许。这个警卫充当了他所在区域和访客之间的一堵墙。 …...

备赛蓝桥杯之第十五届职业院校组省赛第一题:智能停车系统
提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题࿰…...

Docker核心命令与Yocto项目的高效应用
随着软件开发逐渐向分布式和容器化方向演进,Docker 已成为主流的容器化技术之一。它通过标准化的环境配置、资源隔离和高效的部署流程,大幅提高了开发和构建效率。Yocto 项目作为嵌入式 Linux 系统构建工具,与 Docker 的结合进一步增强了开发…...

idea plugin插件开发——入门级教程(IntelliJ IDEA Plugin)
手打不易,如果转摘,请注明出处! 注明原文:idea plugin插件开发——入门级教程(IntelliJ IDEA Plugin)-CSDN博客 目录 前言 官方 官方文档 代码示例 开发前必读 Intellij、Gradle、JDK 版本关系 plu…...

61,【1】BUUCTF WEB BUU XSS COURSE 11
进入靶场 左边是吐槽,右边是登录,先登录试试 admin 123456 admiin# 123456 admin"# 123456 不玩了,先去回顾下xss 回顾完就很尴尬了,我居然用SQL的知识去做xss的题 重来 吐槽这里有一个输入框,容易出现存储型…...

开发环境搭建-1:配置 WSL (类 centos 的 oracle linux 官方镜像)
一些 Linux 基本概念 个人理解,并且为了便于理解,可能会存在一些问题,如果有根本上的错误希望大家及时指出 发行版 WSL 的系统是基于特定发行版的特定版本的 Linux 发行版 有固定组织维护的、开箱就能用的 Linux 发行版由固定的团队、社…...
Spring Boot MyBatis Plus 版本兼容问题(记录)
Spring Boot & MyBatis Plus 版本兼容问题(Invalid value type for attribute factoryBeanObjectType: java.lang.String) 问题描述问题排查1. 检查 MapperScan 的路径2. 项目中没有配置 FactoryBean3. 检查 Spring 和 MyBatis Plus 版本兼容性 解决…...
26. 【.NET 8 实战--孢子记账--从单体到微服务】--需求更新--用户注销、修改用户名、安全设置
在实际开发过程中,项目需求的变更和增加是常见的情况,因此这篇文章我们就模拟一下项目需求新增的情况。 一、需求 项目经理今天提出了新的功能,需要增加重置密码、安全设置、修改用户名、注销账户这四个功能,这四个功能必须是独…...
神经网络|(一)加权平均法,感知机和神经元
【1】引言 从这篇文章开始,将记述对神经网络知识的探索。相关文章都是学习过程中的感悟和理解,如有雷同或者南辕北辙的表述,请大家多多包涵。 【2】加权平均法 在数学课本和数理统计课本中,我们总会遇到求一组数据平均值的做法…...
OpenHarmony OTA升级参考资料记录
OpenHarmony 作为一个开源分布式操作系统,通过其强大的 OTA(Over-The-Air)升级能力,为开发者和厂商提供了一套灵活而安全的系统升级方案。 OTA升级方式 根据升级包的应用方式,OpenHarmony 的 OTA 升级可以分为两种:本地升级和网络OTA升级。 本地升级 本地升级是将已制作…...

在 Kubernetes 上快速安装 KubeSphere v4.1.2
目录标题 安装文档配置repo安装使用插件 安装文档 在 Kubernetes 上快速安装 KubeSphere 配置repo export https_proxy10.10.x.x:7890 helm repo add stable https://charts.helm.sh/stable helm repo update安装 helm upgrade --install -n kubesphere-system --create-name…...

【回忆迷宫——处理方法+DFS】
题目 代码 #include <bits/stdc.h> using namespace std; const int N 250; int g[N][N]; bool vis[N][N]; int dx[4] {0, 0, -1, 1}; int dy[4] {-1, 1, 0, 0}; int nx 999, ny 999, mx, my; int x 101, y 101; //0墙 (1空地 2远方) bool jud(int x, int y) {if…...
华为OD机试真题---战场索敌
华为OD机试真题“战场索敌”是一道考察算法和数据结构应用能力的题目。以下是对该题目的详细解析: 一、题目描述 有一个大小是NM的战场地图,被墙壁’#‘分隔成大小不同的区域。上下左右四个方向相邻的空地’.‘属于同一个区域,只有空地上可…...

计算机网络 (53)互联网使用的安全协议
一、SSL/TLS协议 概述: SSL(Secure Sockets Layer)安全套接层和TLS(Transport Layer Security)传输层安全协议是工作在OSI模型应用层的安全协议。SSL由Netscape于1994年开发,广泛应用于基于万维网的各种网络…...

c++算法贪心系列
本篇文章,同大家一起学习贪心算法!!! 第一题 题目链接 2208. 将数组和减半的最少操作次数 - 力扣(LeetCode) 题目解析 本题重点:最终的数组和要小于原数组和的一半,且求这一操作的…...

【Maui】注销用户,采用“手势”点击label弹窗选择
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 方法一:前端绑定3.2 方法二:后端绑定3.3 注销用户的方法 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创…...

智慧脚下生根,智能井盖监测终端引领城市安全新革命
在繁忙的都市生活中,我们往往只关注地面的繁华与喧嚣,却忽略了隐藏在地面之下的基础设施——井盖。这些看似不起眼的井盖,实则承担着排水、通讯、电力等重要功能,是城市安全运转的重要一环。然而,传统的井盖管理面临着…...

Word2Vec如何优化从中间层到输出层的计算?
文章目录 Word2Vec如何优化从中间层到输出层的计算?用负采样优化中间层到输出层的计算负采样方法的关键思想负采样的例子负采样的采样方法 Word2Vec如何优化从中间层到输出层的计算? 重要性:★★ 用负采样优化中间层到输出层的计算 以词汇…...
第七篇:vue3 计算属性:computed
v-model "firstName". // v-model. 就是双向绑定的意思 <br/> // 通过 v-model 进行绑定姓:<input type"text" v-model "firstName"><br/>名:<input type"text" v-model"lastN…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...