(CVPR-2025)VideoMage:文本生成视频扩散模型的多主体与动作定制化

VideoMage:文本生成视频扩散模型的多主体与动作定制化

paper title:VideoMage: Multi-Subject and Motion Customization
of Text-to-Video Diffusion Models

paper是National Taiwan University发表在CVPR 2025的工作

Code:链接

图1

图1. 多主体与动作定制化示意图。给定多个主体的图像、一个参考动作视频以及相关的文本提示,我们的 VideoMage 能够生成与这些输入相匹配的视频输出。

Abstract

定制化文本生成视频的目标是生成高质量的视频,其中融入用户指定的主体身份或动作模式。然而,现有方法主要集中于个性化单一概念,即主体身份或动作模式,这限制了它们在处理多个主体及其期望动作模式时的效果。为了解决这一挑战,我们提出了一个统一的框架 VideoMage,用于同时在多个主体及其交互动作上进行视频定制。VideoMage 使用主体 LoRA 和动作 LoRA,从用户提供的图像和视频中捕捉个性化内容,并通过一种与外观无关的动作学习方法,将动作模式从视觉外观中解耦。此外,我们设计了一种时空组合方案,用于在期望动作模式下引导主体之间的交互。大量实验表明,VideoMage 优于现有方法,能够生成连贯的、用户可控的视频,并保持主体身份与交互的一致性。

1. Introduction

近年来,扩散模型 [17, 37, 38] 取得了前所未有的成功,大大提升了从文本描述生成照片级真实感视频 [3, 16, 18, 19, 35] 的能力,使视频内容创作有了新的可能性。然而,尽管现在可以合成高质量和多样化的视频,仅依靠文本描述无法对所需内容进行精确控制,难以与用户意图准确对齐 [24]。因此,从用户提供的参考资料中定制用户特定的视频概念,受到了学术界和工业界的广泛关注。

为了解决这一挑战,一些工作 [14, 24, 43, 44] 探索了将所需主体身份定制到合成视频中的方法。例如,AnimateDiff [14] 通过在预训练图像扩散模型中插入时间模块并对其进行调优,使用户提供的主体实现动画化。VideoBooth [24] 进一步采用跨帧注意力机制来保留定制主体的细粒度视觉外观。此外,CustomVideo [43] 在所有涉及的主体上同时微调跨注意力层,以在一个场景中定制多个主体。然而,这些方法仅关注静态主体的定制。它们无法为用户或视频创作者提供将所需动态动作(如特定舞蹈风格)个性化到输出视频中的能力,严重限制了视频内容定制的灵活性。

另一方面,为了赋予用户对动态动作的可控性,近期一些方法 [23, 28, 32, 48, 51] 设计了模块来捕捉来自参考视频的动作模式。例如,Customize-A-Video [32] 在时间注意力层中插入低秩适配(LoRA)[21] 并对其进行微调,以学习所需的动作模式。类似地,MotionDirector [51] 通过使用一个捕捉锚帧与其他帧差异的目标,利用 LoRA 来学习动作。然而,仅仅调优时间模块而没有正确地从参考视频中解耦动作信息,会导致严重的外观泄漏问题,进而产生的动作模式无法应用于任意主体身份。此外,在缺乏对主体和动作组合的引导下,模型难以精确控制这些定制视频概念之间的交互。因此,上述方法只能处理单一(即主体或动作)的概念定制。通过自由形式的提示同时定制多个主体和所需动作模式,仍然是一个具有挑战性且尚未解决的问题。

在本文中,我们提出了 VideoMage,一个统一的视频内容定制框架,它能够对主体身份和动作模式实现可控性。VideoMage 引入了主体和动作 LoRA,从用户提供的图像和视频中捕捉各自的信息。为确保动作 LoRA 不会被视觉外观污染,我们提出了一种与外观无关的动作学习方法,从参考视频中分离动作模式。更具体地说,我们采用了基于视觉外观的负向无分类器引导 [12, 22],有效地将动作与外观细节解耦。通过学习到的主体和动作 LoRA,我们提出了一种时空协同组合机制,以引导多个主体在所需动作模式下的交互。我们进一步引入基于梯度的融合和空间注意力正则化,以吸收多主体信息,同时鼓励主体的空间排列保持区分性。通过迭代地使用主体和动作 LoRA 引导生成过程,VideoMage 合成的视频具有更强的用户可控性和时空一致性。

我们在此总结本文的贡献如下:

  • 我们提出了 VideoMage,一个统一的框架,首次实现了多主体身份及其交互动作的视频概念定制。
  • 我们引入了一种新颖的与外观无关的动作学习方法,通过改进的负向无分类器引导,将潜在动作模式与外观解耦。
  • 我们提出了一种时空协同组合机制,用于组合获得的多主体和动作 LoRA,以在所需动作模式下生成一致的多主体交互。

2. Related Works

2.1. Text-to-Video Generation


近年来,文本生成视频取得了显著进展。其方法从早期基于生成对抗网络(GANs)[34, 36, 40, 41] 和自回归 Transformer [20, 45, 46, 49],发展到近期的扩散模型 [3, 7, 18, 19, 35, 42],大大提升了生成视频的质量与多样性。开创性工作如 VDM [19] 和 Imagen-Video [18] 在像素空间中建模视频扩散过程,而 LVDM [16] 和 VideoLDM [3] 则在潜在空间中建模,以优化计算效率。为了解决缺乏配对视频-文本数据的挑战,Make-A-Video [35] 利用图生文先验实现了文本生成视频。另一方面,开源模型如 VideoCrafter [7]、ModelScopeT2V [42] 和 Zero-Scope [39] 融入了时空模块以增强文本生成视频的能力,展现出生成高保真视频的显著性能。这些强大的文本到视频扩散模型推动了定制化内容生成的发展。

2.2. Video Content Customization


主体定制。近年来,定制化生成受到了广泛关注,尤其是在图像合成领域 [11, 26, 33]。基于这些进展,近期的研究逐渐聚焦于视频主体定制 [6, 8, 14, 24, 43, 44],这更具挑战性,因为需要在动态场景中生成主体。例如,AnimateDiff [14] 在预训练的图像扩散模型中插入了额外的动作模块,使得自定义主体能够实现动画化。此外,VideoBooth [24] 采用跨帧注意力机制来保留定制主体的细粒度视觉外观。最近,CustomVideo [43] 在所有相关主体上微调跨注意力层,以实现多主体定制。然而,这些方法往往只能产生轻微的主体动作 [44, 47],缺乏用户可控性,无法实现对动作的精确控制。

动作定制。给定少量描述目标动作模式的参考视频,动作定制 [23, 28, 32, 44, 48, 51] 旨在生成能够复现目标动作的视频。例如,Customize-A-Video [32] 在时间注意力层中集成低秩适配(LoRA)[21] 并对其进行微调,以从参考视频中捕捉特定的动作模式。类似地,MotionDirector [51] 通过微调 LoRA 来学习动作,其方法是捕捉锚帧与其他帧之间的差异,从而有效地将动态行为迁移到生成的视频内容中。最新的研究 DreamVideo [44] 探索了单一主体执行特定动作的定制化,其方法是分别在空间层和时间层中加入身份适配器(ID adapter)和动作适配器(motion adapter)。然而,外观泄漏问题以及缺乏对主体与动作组合的合理引导,阻碍了这些方法生成多主体交互的视频。因此,利用任意主体和动作模式定制视频内容的灵活性受到严格限制。为赋予用户对主体与动作视频概念更强的可控性,我们采用了独特的 VideoMage 框架,以实现多个定制主体身份之间的所需交互。

3. Method

问题表述。我们首先定义设置和符号。给定NNN个主体,每个主体由3-5张图像表示,记作xs,ix_{s,i}xs,i表示第iii个主体(为简化省略单个图像索引),一个参考交互动作视频xmx_mxm,以及用户提供的文本提示ctgtc_{tgt}ctgt,我们的目标是基于ctgtc_{tgt}ctgt生成一个视频,其中这NNN个主体按照动作模式进行交互。为了解决上述问题,我们提出了VideoMage,这是一个统一框架,用于定制多个主体和交互动作的文本生成视频。通过对视频扩散模型的快速回顾(第3.1节),我们详细说明了如何利用LoRA模块分别从输入图像和参考视频中学习视觉和动作信息(第3.2节)。不同于简单的组合方式,我们提出了一种独特的时空协同组合机制,用于整合学习到的主体/动作LoRA以进行视频生成(第3.3节)。

3.1. Preliminary: Video Diffusion Models


视频扩散模型(VDMs)[3, 16, 18, 19, 35] 旨在通过逐步去噪从高斯分布采样的一系列噪声来生成视频 [17]。具体而言,扩散模型ϵθ\epsilon_\thetaϵθ学习在每个时间步ttt预测噪声ϵ\epsilonϵ,其条件是输入ccc,而ccc是在文本生成视频中的文本提示。训练目标简化为一个重建损失:

L=Ex,ϵ,t[∥ϵθ(xt,c,t)−ϵ∥22],(1)\mathcal{L} = \mathbb{E}_{x,\epsilon,t} \left[ \left\| \epsilon_\theta(x_t, c, t) - \epsilon \right\|_2^2 \right], \tag{1} L=Ex,ϵ,t[ϵθ(xt,c,t)ϵ22],(1)

其中噪声ϵ∈RF×H×W×3\epsilon \in \mathbb{R}^{F \times H \times W \times 3}ϵRF×H×W×3N(0,I)\mathcal{N}(0,I)N(0,I)中采样,时间步t∈U(0,1)t \in \mathcal{U}(0,1)tU(0,1),并且xt=αˉtx+1−αˉtϵx_t = \sqrt{\bar{\alpha}_t}x + \sqrt{1-\bar{\alpha}_t}\epsilonxt=αˉtx+1αˉtϵ
ttt时刻的带噪输入,αˉt\bar{\alpha}_tαˉt是控制扩散过程的一个超参数 [17]。为了降低计算成本,大多数VDMs [7, 16, 42] 将输入视频数据x∈RF×H×W×3x \in \mathbb{R}^{F \times H \times W \times 3}xRF×H×W×3 编码为潜在表示(例如,通过VAE [25] 获得)。为简化起见,本文始终使用视频数据xxx作为模型的输入。

3.2. Subject and Motion Customization


图2

图2. VideoMage 概览。(a) 给定多个主体的图像和一个包含期望动作的参考视频,VideoMage 分别利用 LoRA 来捕捉视觉外观知识和与外观无关的动作信息。(b) 在包含上述视觉与动作概念的文本提示下,我们的时空协同组合机制对输入的带噪潜变量xtx_txt进行优化,从而生成匹配期望视觉与动作信息的视频。

视觉主体的学习。如图2(a)顶部所示,为了在视频生成中捕捉主体外观,我们学习一个特殊的token(例如,“<toy>”),并使用主体LoRA(Δθs\Delta \theta_sΔθs)对预训练视频扩散模型进行微调。为了避免干扰时间动态,主体LoRA仅应用于UNet的空间层。其目标函数定义为:

Lsub=Exs,ϵ,t[∥ϵθs(xs,t,cs,t)−ϵ∥22],(2)\mathcal{L}_{sub} = \mathbb{E}_{x_s,\epsilon,t} \left[ \left\| \epsilon_{\theta_s}(x_s,t,c_s,t) - \epsilon \right\|_2^2 \right], \tag{2} Lsub=Exs,ϵ,t[ϵθs(xs,t,cs,t)ϵ22],(2)

其中xs∈R1×H×W×3x_s \in \mathbb{R}^{1 \times H \times W \times 3}xsR1×H×W×3是主体图像,θs=θ+Δθs\theta_s = \theta + \Delta \theta_sθs=θ+Δθs表示施加了主体LoRA的预训练模型参数,csc_scs是包含特殊token的提示(例如,“A ”)。

然而,仅使用图像数据进行微调可能导致视频扩散模型丧失生成运动信息的能力。参考[47],我们利用一个辅助视频数据集DauxD_{aux}Daux(例如,Panda70M [9])来正则化微调过程,同时保留预训练的动作先验。更具体地,给定从DauxD_{aux}Daux中采样的视频-字幕对(xaux,caux)(x_{aux}, c_{aux})(xaux,caux),其正则化损失定义为:

Lreg=Exaux,ϵ,t[∥ϵθs(xaux,t,caux,t)−ϵ∥22].(3)\mathcal{L}_{reg} = \mathbb{E}_{x_{aux},\epsilon,t} \left[ \left\| \epsilon_{\theta_s}(x_{aux}, t, c_{aux}, t) - \epsilon \right\|_2^2 \right]. \tag{3} Lreg=Exaux,ϵ,t[ϵθs(xaux,t,caux,t)ϵ22].(3)

因此,总体目标函数定义为:

L=Lsub+λ1Lreg,(4)\mathcal{L} = \mathcal{L}_{sub} + \lambda_1 \mathcal{L}_{reg}, \tag{4} L=Lsub+λ1Lreg,(4)

其中λ1\lambda_1λ1是控制正则化损失权重的超参数。优化该目标能够捕捉主体外观,同时保留动作先验。通过我们的训练目标,我们能够在不损害VDM能力的情况下,支持用户提供的主体身份的定制。然而,微调后的VDM在从参考视频中精确控制动作模式方面仍具有挑战性,从而限制了用户的灵活性与可控性。

与外观无关的动作学习。为了从参考视频xmx_mxm中学习期望的动作模式,一个朴素的策略是微调动作LoRA,并将其注入UNet的时间层(即图2(a)底部的Δθm\Delta \theta_mΔθm)。然而,直接应用公式(1)中的标准扩散损失会导致外观泄漏问题,即动作LoRA无意中捕捉到了参考视频中主体的外观。这种主体外观与动作的纠缠阻碍了将学习到的动作模式应用到新主体的能力。

图3

图3. 与外观无关的动作学习。通过利用强调外观信息的文本提示(即capc_{ap}cap),我们旨在通过所提出的负向无分类器引导提取与外观无关的动作信息。

为了解决这一问题,我们提出了一种新颖的与外观无关的目标(appearance-agnostic objective),如图3所示,它能够有效地将参考视频中的动作模式与外观隔离。受到概念擦除方法[12, 22]的启发,我们提出了基于视觉主体外观的负向无分类器引导(negative classifier-free guidance),专注于在动作学习过程中消除外观信息。这确保了动作LoRA仅专注于动作动态。

为实现这一点,我们首先为参考视频中的主体学习特殊token(例如图3中的“person”和“horse”),方法是在参考视频的一帧上应用文本反演[11]。这能够捕捉主体外观,同时最小化动作的影响,有效地实现外观与动作的解耦。在获得上述特殊token后,我们训练动作LoRA,使用一个与外观无关的目标函数,该目标通过负向引导抑制外观信息,使动作LoRA能够独立于主体外观学习动作模式。更具体地,训练目标定义为:

Lmot=Exm,ϵ,t[∥ϵθm(xm,t,cm,t)−ϵap-free∥22],\mathcal{L}_{mot} = \mathbb{E}_{x_m,\epsilon,t} \left[ \left\| \epsilon_{\theta_m}(x_m,t,c_m,t) - \epsilon_{\text{ap-free}} \right\|_2^2 \right], Lmot=Exm,ϵ,t[ϵθm(xm,t,cm,t)ϵap-free22],

其中
ϵap-free=(1+ω)ϵ−ωϵθ(xm,t,cap,t).(5)\epsilon_{\text{ap-free}} = (1+\omega)\epsilon - \omega \epsilon_\theta(x_m,t,c_{ap},t). \tag{5} ϵap-free=(1+ω)ϵωϵθ(xm,t,cap,t).(5)

注意,ϵap-free\epsilon_{\text{ap-free}}ϵap-free是经过负向引导的无外观噪声,ω\omegaω是控制引导强度的超参数,cmc_mcmcapc_{ap}cap分别描述动作和静态主体外观(例如,“Person riding a horse”和“A static video of person and horse”)。

通过优化公式(5),动作LoRA能够独立于主体外观学习动作模式。这种解耦对于在多个主体之间组合定制动作至关重要,我们将在后文进一步讨论。

图4

图4. 用于T2V测试时优化的时空协同组合。(a) 测试时融合主体LoRA θ^s\hat{\theta}_sθ^s,其采用注意力正则化Lattn\mathcal{L}_{attn}Lattn以确保每个视觉主体的外观得以保留。(b) 时空协同采样(SCS)通过跨模态对齐,将融合的主体LoRA θ^s\hat{\theta}_sθ^s与动作LoRA θm\theta_mθm进行整合,从而确保视觉与时间上的一致性。

3.3. Spatial-Temporal Collaborative Composition


在获得多个主体LoRA和一个交互式动作LoRA之后,我们的目标是生成这些主体按照期望动作模式进行交互的视频。然而,结合具有不同属性(即视觉外观与时空动作)的LoRA并非一项简单的任务。在本工作中,我们提出了一种测试时优化方案——时空协同组合(spatial-temporal collaborative composition),该方案能够使上述LoRA之间进行协作,从而生成同时具备期望外观和动作特性的视频。下面我们将详细讨论所提出的方案。

多主体LoRA的组合。我们首先讨论如何融合描述不同视觉主体信息的LoRA。我们采用基于梯度的融合方法 [13],将每个主体LoRA中的独特身份特征提炼为一个单一的融合LoRA。即,给定多个LoRA,记作Δθs,1,Δθs,2,…,Δθs,N\Delta \theta_{s,1}, \Delta \theta_{s,2}, \ldots, \Delta \theta_{s,N}Δθs,1,Δθs,2,,Δθs,N,其中NNN是主体数量,每个LoRA对应一个特定主体,我们的目标是学习一个融合LoRA Δθ^s\Delta \hat{\theta}_sΔθ^s,能够生成包含多个主体的视频。

为实现这一点,我们希望强制融合后的LoRA Δθ^s\Delta \hat{\theta}_sΔθ^s 能够生成与每个特定主体LoRA一致的视频。更具体地,我们通过匹配融合LoRA与特定LoRA的预测噪声来优化Δθ^s\Delta \hat{\theta}_sΔθ^s。多主体融合的目标函数Lfusion\mathcal{L}_{fusion}Lfusion定义为:

Lfusion=1N∑n=1NExn,ϵ,t[∥ϵθ^s(xn,t,cn,t)−ϵn∥22],(6)\mathcal{L}_{fusion} = \frac{1}{N} \sum_{n=1}^{N} \mathbb{E}_{x_n,\epsilon,t} \left[ \left\| \epsilon_{\hat{\theta}_s}(x_n,t,c_n,t) - \epsilon_n \right\|_2^2 \right], \tag{6} Lfusion=N1n=1NExn,ϵ,t[ϵθ^s(xn,t,cn,t)ϵn22],(6)

其中ϵn=ϵθs,n(xn,t,cn,t)\epsilon_n = \epsilon_{\theta_{s,n}}(x_n,t,c_n,t)ϵn=ϵθs,n(xn,t,cn,t)xnx_nxn是由θs,n\theta_{s,n}θs,n生成的视频,cnc_ncn是对应第nnn个主体的提示。

此外,为了鼓励不同主体身份合理排列,我们进一步引入空间注意力正则化(spatial attention regularization)Lattn\mathcal{L}_{attn}Lattn,以明确引导模型关注正确的主体区域。具体来说,如图4(a)所示,我们随机采样并使用Grounded-SAM2 [30, 31]分割两个主体,然后将分割结果组合为CutMix风格 [15, 50]的视频。我们正式定义Lattn\mathcal{L}_{attn}Lattn如下:

Lattn=12∑i=12∥MSCA,i−M^i∥22,(7)\mathcal{L}_{attn} = \frac{1}{2} \sum_{i=1}^{2} \left\| \mathcal{M}_{SCA,i} - \hat{M}_i \right\|_2^2, \tag{7} Lattn=21i=12MSCA,iM^i22,(7)

其中MSCA,i\mathcal{M}_{SCA,i}MSCA,i是第iii个采样主体的空间交叉注意力图,M^i\hat{M}_iM^i是对应的真实分割掩码。因此,多主体LoRA的最终目标函数定义为:

L=Lfusion+λ2Lattn,(8)\mathcal{L} = \mathcal{L}_{fusion} + \lambda_2 \mathcal{L}_{attn}, \tag{8} L=Lfusion+λ2Lattn,(8)

其中λ2\lambda_2λ2控制注意力损失的权重。需要注意的是,我们仅在一次训练中融合多个主体。一旦获得融合LoRA θ^s\hat{\theta}_sθ^s,我们即可生成具有任意动作模式的视频。


时空协同采样(SCS)。为了进一步将基于动作的LoRA Δθm\Delta \theta_mΔθm 与前述融合后的视觉主体LoRA Δθ^s\Delta \hat{\theta}_sΔθ^s 结合,我们提出了一种新颖的时空协同采样(spatial-temporal collaborative sampling, SCS)方法,以有效控制和引导多个定制主体的交互。在SCS中,我们分别从主体分支和动作分支中独立采样并整合噪声。为鼓励早期时间步的对齐,我们引入了一种协作引导机制,使两个分支的空间与时间注意力图相互细化输入潜变量。这种互相对齐使定制主体及其交互更为一致。

如图4(b)所示,给定带噪输入视频xtx_txt,我们将其复制为xtsubx_t^{sub}xtsubxtmotx_t^{mot}xtmot,分别送入主体分支和动作分支。在融合主体LoRA模型θ^s\hat{\theta}_sθ^s和动作LoRA模型θm\theta_mθm的条件下,我们生成主体噪声ϵtsub\epsilon_t^{sub}ϵtsub和动作噪声ϵtmot\epsilon_t^{mot}ϵtmot

ϵtsub=ϵθ^s(xtsub,ctgt,t),ϵtmot=ϵθm(xtmot,c~tgt,t),(9)\epsilon_t^{sub} = \epsilon_{\hat{\theta}_s}(x_t^{sub}, c_{tgt}, t), \\ \epsilon_t^{mot} = \epsilon_{\theta_m}(x_t^{mot}, \tilde{c}_{tgt}, t), \tag{9} ϵtsub=ϵθ^s(xtsub,ctgt,t),ϵtmot=ϵθm(xtmot,c~tgt,t),(9)

其中ctgtc_{tgt}ctgt是包含主体特殊token的输入提示(例如“A is riding a ”),而c~tgt\tilde{c}_{tgt}c~tgt则通过将特殊token替换为对应类别构造(例如“A toy is riding a dog”)。

然而,主体分支(仅含主体LoRA)会生成错误的动作,动作分支(仅含动作LoRA)会产生不准确的空间排列,直接结合ϵtsub\epsilon_t^{sub}ϵtsubϵtmot\epsilon_t^{mot}ϵtmot可能导致信息不完整。为此,我们鼓励θ^s\hat{\theta}_sθ^sθm\theta_mθm之间的对齐,以生成一致的噪声输出。具体来说,如图4(b)所示,我们考虑主体空间排列的空间交叉注意力图MSCA\mathcal{M}_{SCA}MSCA,以及捕捉动作动态的时间自注意力图MTSA\mathcal{M}_{TSA}MTSA。相应的协作引导损失为:

Ls→m=∥MSCA,s−MSCA,m∥22,Lm→s=∥MTSA,s−MTSA,m∥22,(10)\mathcal{L}_{s \to m} = \left\| \mathcal{M}_{SCA,s} - \mathcal{M}_{SCA,m} \right\|_2^2, \\ \mathcal{L}_{m \to s} = \left\| \mathcal{M}_{TSA,s} - \mathcal{M}_{TSA,m} \right\|_2^2, \tag{10} Lsm=MSCA,sMSCA,m22,Lms=MTSA,sMTSA,m22,(10)

其中下标sssmmm分别表示来自主体分支和动作分支。

随后,我们更新xtsubx_t^{sub}xtsubxtmotx_t^{mot}xtmot

xtsub:=xtsub−αt∇xtsubLm→s,xtmot:=xtmot−αt∇xtmotLs→m,(11)x_t^{sub} := x_t^{sub} - \alpha_t \nabla_{x_t^{sub}} \mathcal{L}_{m \to s}, \\ x_t^{mot} := x_t^{mot} - \alpha_t \nabla_{x_t^{mot}} \mathcal{L}_{s \to m}, \tag{11} xtsub:=xtsubαtxtsubLms,xtmot:=xtmotαtxtmotLsm,(11)

其中αt\alpha_tαt是梯度更新的步长,该引导在前τ\tauτ个去噪步骤中应用,τ\tauτ是超参数。最后,预测噪声由下式计算:

ϵt=βsϵtsub+βmϵtmot,(12)\epsilon_t = \beta_s \epsilon_t^{sub} + \beta_m \epsilon_t^{mot}, \tag{12} ϵt=βsϵtsub+βmϵtmot,(12)

其中我们设定βs=βm=0.5\beta_s = \beta_m = 0.5βs=βm=0.5以简化计算。更多细节见附录中的算法1。

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

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

相关文章

OpenCV轮廓近似与Python命令行参数解析

在计算机视觉任务中&#xff0c;轮廓分析是目标检测、形状识别的核心步骤。而approxPolyDP函数作为轮廓简化的关键工具&#xff0c;能有效减少轮廓顶点数量&#xff0c;降低计算复杂度&#xff1b;同时&#xff0c;argparse库则能让Python脚本更灵活、易用。本文将结合具体案例…

基于Springboot在线音乐推荐平台

目录 一、项目介绍 二、功能介绍 三、核心代码 四、效果图 源码获取 前言 在经济繁荣的浪潮过去后&#xff0c;社会的焦点逐渐从物质追求转向了文化和生活品质的提升[1]。文化生活的繁荣成为人们关注的焦点之一&#xff0c;而音乐&#xff0c;作为文化的一部分&#xff0…

LeetCode算法日记 - Day 26: 归并排序、交易逆序对的总数

目录 1. 归并排序 1.1 题目解析 1.2 解法 1.3 代码实现 2. 交易逆序对的总数 2.1 题目解析 2.2 解法 2.3 代码实现 1. 归并排序 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 你必须在 不使用任…

C++(Qt)软件调试---vcpkg安装crashpad(34)

C(Qt)软件调试—vcpkg安装crashpad&#xff08;34&#xff09; 文章目录C(Qt)软件调试---vcpkg安装crashpad&#xff08;34&#xff09;[toc]1 概述&#x1f41c;2 环境配置3 qt使用crashpad库捕获异常4 cmake中添加crashpad5 相关地址&#x1f410;更多精彩内容&#x1f449;内…

Kafka 副本同步异常与 ISR 收缩故障排查实录

背景 某高流量 Kafka 集群&#xff08;原 10G 网卡&#xff09;在切中心时频繁触发带宽报警&#xff0c;扩容至 25G 网卡后出现副本同步异常&#xff1a; 操作流程&#xff1a;停机→升级网卡→重启→触发分区同步→切换首选 Leader现象&#xff1a; 写入流量上升后&#xff0c…

顶点 (VS)vs 片段(FS):OpenGL纹理滚动着色器的性能博弈与设计哲学

一个微妙的选择&#xff0c;影响整个应用性能表现在实时图形渲染中&#xff0c;实现纹理滚动效果是一种常见需求。但当我们在顶点着色器和片段着色器之间做出不同实现选择时&#xff0c;会对性能产生显著影响。今天&#xff0c;我们将深入探讨这两种实现的差异&#xff0c;帮助…

基于博客系统的自动化测试项目

目录 一、引言 二、项目背景 三、项目功能 1&#xff09;初始登录界面 2&#xff09;博客首页 3&#xff09;博客详情页 4&#xff09;博客编辑页 四、测试工具 1&#xff09;基础操作系统环境 2&#xff09;浏览器环境 3&#xff09;开发与测试工具环境 4&#xf…

R 语言 eulerr 包绘制韦恩图:比例精准

在数据可视化中,韦恩图是展示多组数据交集关系的常用工具,尤其在生物信息(如基因差异表达分析)、统计分析等领域高频使用。但传统绘图工具常面临椭圆比例失衡、数值显示混乱、样式调整繁琐等问题,而 R 语言的eulerr包恰好能解决这些痛点 —— 它支持按数据比例自动适配图形…

CRYPT32!CryptMsgUpdate函数分析和asn.1 editor nt5inf.cat 的总览信息

0000: 30 83 09 69 2f ; SEQUENCE (9692f Bytes) 0005: 06 09 ; OBJECT_IDENTIFIER (9 Bytes) 0007: | 2a 86 48 86 f7 0d 01 07 02| ; "PKCS 7 已签名 (1.2.840.113549.1.7.2)" 0010: …

04数据库约束实战:从入门到精通

感谢黑马程序员提供的免费课程约束概念&#xff1a;约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。目的&#xff1a;保证数据库中数据的正确、有效性和完整性。常见的几种约束&#xff1a;注意&#xff1a;约束是作用于表中字段上的&#xff0c;可以在创…

WPF+IOC学习记录

最近在学WPF&#xff0c;上一篇文章记录了WPF的MVVM自己实现和用框架的区别&#xff08;WPFMVVM入门学习&#xff09;&#xff0c;接下这篇文章记录一下在WPF中使用IOC&#xff0c;这里演示用的是微软官方的DependencyInjection&#xff0c;也可以用其他的第三方框架。 项目源…

从零开始学习单片机16

STM32单片机STM32和51单片机的区别51单片机的外设资源少&#xff0c;寄存器少&#xff0c;运行速度慢&#xff0c;价格便宜&#xff0c;容易上手STM32单片机的外设资源更多&#xff0c;寄存器多&#xff0c;运行速度相对快&#xff0c;价格相对贵&#xff0c;上手相对较难STM32…

[特殊字符]论一个 bug 如何经过千难万险占领线上

谨以此文献给每一个曾与 Bug 搏斗、最终却目睹它成功上线的你 本文旨在揭露 Bug 的狡猾&#xff0c;绝非鼓励以下行为。若你照做&#xff0c;后果自负&#x1f436;每一个在线上逍遥法外的 Bug&#xff0c;都不是偶然。它是一场精心策划的奇迹&#xff0c;是开发、联调、测试、…

Day12-python文件操作(二)

目录前言一、Excel文档操作1.1、xlrd和xlwt库1.2、openpyxl库1.3、pandas库总结前言 今天继续学习文件操作相关内容&#xff0c;为后续办公自动化打基础。 一、Excel文档操作 1.1、xlrd和xlwt库 如果要兼容 Excel 2007 以前的版本&#xff0c;也就是xls格式的 Excel 文件&am…

CollageIt:简单易用的照片拼贴工具

在数字图像处理领域&#xff0c;制作照片拼贴是一种常见的创意表达方式。CollageIt作为一款体积小巧、简单易用的照片拼贴工具&#xff0c;能够帮助用户轻松将多张图片拼合成一张精美的拼贴画。它不仅操作简单&#xff0c;还支持多种图片格式&#xff0c;确保用户可以快速制作出…

Java全栈工程师的实战面试:从基础到微服务的全面解析

Java全栈工程师的实战面试&#xff1a;从基础到微服务的全面解析 一、开场介绍 面试官&#xff1a;你好&#xff0c;欢迎来到我们公司。我是今天的面试官&#xff0c;负责技术部分的评估。请先简单介绍一下你自己。 应聘者&#xff1a;您好&#xff0c;我叫李明&#xff0c;25岁…

驱动开发系列68 - GLSL编译器实现 - 算数指令折叠及访存优化

一 : 指令合并概述 指令折叠的意思,原本一个语句会产生多条指令,通过折叠,可以删除一些中间指令,减少指令数量,并且能够减少寄存器占用。提高执行效率。 举一个例子: MUL A, B, 4 ; A = B * 4MAD D, A, 2, F ; D = A * 2 + F MAD G, A, 3, I ; G …

深入解析Qt节点编辑器框架:高级特性与性能优化(四)

文章目录一、高级交互特性&#xff1a;超越基础操作的用户体验提升1. 节点组管理&#xff1a;折叠与嵌套的层级组织2. 智能连接线路由&#xff1a;避免交叉与视觉混乱3. 批量操作与快捷键&#xff1a;提升操作效率二、性能优化&#xff1a;应对大规模节点场景的核心策略1. 图形…

Python 入门操作指南

引言 Python 是一种简单易学却功能强大的编程语言,广泛应用于数据分析、人工智能、Web 开发等领域。对于初学者而言,掌握 Python 的入门操作是迈向编程世界的第一步。本文将以总分总的结构,系统介绍 Python 的安装方法、推荐的开发工具、第一个 Python 程序示例,以及包管理…

ZooKeeper 安装配置

前言 有时会需要安装开源的大数据集群进行测评或者验证问题&#xff0c;已经装过很多遍了&#xff0c;所以想系统的总结整理一下各个组件的安装部署&#xff0c;包括 Zookeeper、Hadoop、Hive、Spark 等。 版本 Zookeeper 3.5.6 3.8.4 3.9.3 初始化 包括主机名修改、SSH互…