视频编辑最新SOTA!港中文Adobe等发布统一视频生成传播框架——GenProp
文章链接:https://arxiv.org/pdf/2412.19761
项目链接:https://genprop.github.io
亮点直击
定义了一个新的生成视频传播问题,目标是利用 I2V 模型的生成能力,将视频第一帧的各种变化传播到整个视频中。
精心设计了模型 GenProp,包含选择性内容编码器(Selective Content Encoder, SCE)、专用损失函数以及mask预测头,并提出了一个用于训练模型的合成数据生成pipeline。
本文的模型支持多种下游应用,如移除、插入、替换、编辑和跟踪。实验还表明,即使没有特定任务的数据进行训练,模型也能支持视频扩展(outpainting)。
实验结果显示,本文的模型在视频编辑和对象移除任务中优于 SOTA 方法,同时扩展了包括跟踪在内的现有任务范围。
总结速览
解决的问题
当前大规模视频生成模型在处理各种视频编辑任务时,往往聚焦于单一任务(如视频修复、外观编辑、对象插入等),而传统的视频传播方法(如光流或深度传播)易受错误积累影响,缺乏鲁棒性和泛化能力。现有方法还需要密集标注或专门针对任务进行重新训练,流程复杂且效率较低。
提出的方案
- 框架设计:提出了一个统一的视频生成传播框架——GenProp。
-
使用选择性内容编码器(Selective Content Encoder, SCE)对原视频的未变部分进行编码。
-
使用图像到视频生成模型(Image-to-Video, I2V)将第一帧的编辑传播至整段视频。
-
-
损失函数设计:引入区域感知损失(region-aware loss),确保SCE只编码未编辑区域的内容,同时优化I2V模型在修改区域的生成能力。
-
数据生成方案:利用实例级视频分割数据集生成合成数据,覆盖多种视频任务。
应用的技术
-
生成模型:通过 I2V 生成模型进行内容传播,无需依赖光流或运动预测。
-
辅助训练模块:加入辅助解码器预测修改区域,以提高编辑区域的生成质量。
-
选择性编码:通过区域感知机制,减少对已修改区域的编码干扰,增强未编辑内容的保真度。
达到的效果
-
编辑:支持对对象形状进行显著修改。
-
插入:插入的对象能够独立运动。
-
移除:可有效移除阴影、反射等对象效果。
-
跟踪:能够精确跟踪对象及其相关效果。
-
统一性:无需密集标注或任务特定的重新训练,简化了编辑流程。
方法
生成视频传播面临以下关键挑战:
-
真实性 – 第一帧中的变化应自然传播到后续帧中。
-
一致性 – 所有其他区域应与原始视频保持一致。
-
通用性 – 模型应具有足够的通用性,适用于多种视频任务。
在 GenProp 中,通过 I2V 生成模型解决 真实性(1);引入选择性内容编码器和掩膜预测解码器,并使用区域感知损失进行训练以解决 一致性(2);通过数据生成方案和通用 I2V 模型,满足 通用性(3)。
问题定义
给定一个输入视频 (包含 帧),设 为修改后的第一帧,目标是传播该修改,生成修改后的视频 ,其中每帧 ()保持对关键帧 的修改,同时在整个序列中保持外观和运动的一致性。
采用潜在扩散模型(latent diffusion model)在潜在空间中编码像素信息。为了简化表示,继续用 表示该潜在表示形式。形式化地,在推理过程中,GenProp 生成每帧 的公式为:
其中, 是由选择性内容编码器 引导的 I2V 生成模型。
在训练过程中,使用从现有视频实例分割数据集中构造的合成数据来创建配对样本。定义一个数据生成操作符 ,用于从原始视频序列 构造训练数据对 。令 表示应用于原始视频序列的合成数据生成操作符,其中:
然后, 是合成视频序列。
GenProp 被训练以满足以下目标,在所有帧 中:
其中, 是一个区域感知损失,用于解耦修改区域和未修改区域,保证未修改区域的稳定性,同时允许在编辑区域进行准确的传播。为了确保最终输出符合真实视频数据的分布,合成数据仅输入到内容编码器。I2V 生成模型则使用原始视频,防止模型无意中学习到合成伪影。
模型设计
为了保持原始视频的未修改部分,并仅传播修改区域,我们将两个额外的组件集成到基本的 I2V 模型中:选择性内容编码器(Selective Content Encoder,SCE)和mask预测解码器(Mask Prediction Decoder,MPD),如下图 4 所示。
选择性内容编码器 (SCE)
SCE 架构是主生成模型初始 个块的复制版本,类似于 ControlNet 。在每个编码器块后,提取的特征将添加到 I2V 模型中的相应特征中,从而实现内容信息的平滑和层次化流动。注入层是一个具有零初始化的多层感知机(MLP),该层也会进行训练。此外,为了实现双向信息交换,I2V 模型的特征在第一个块之前与 SCE 的输入进行融合。这使得 SCE 能够识别修改区域,从而能够选择性地编码未修改区域的信息。
Mask预测解码器 (MPD)
Mask预测解码器(MPD)用于估计需要编辑的空间区域,帮助编码器将修改内容与未修改内容区分开。SCE 使用 I2V 模型的前 个块,而 MPD 通过使用最终块及一个多层感知机(MLP)作为最终层来镜像这一结构。它从倒数第二个块获取潜在表示,该表示包含丰富的空间和时间信息,并通过 MLP 层处理。这恢复了时间维度,并与视频帧的数量匹配。最终输出通过均方误差(MSE)损失 训练,以匹配视频的实例掩码。这引导模型关注编辑区域,并显著提高注意力图的准确性。
区域感知损失 (Region-Aware Loss)
在训练过程中,使用实例分割数据来确保编辑和未编辑区域都能得到适当的监督。本文设计了区域感知损失(RA Loss),如下图 5 所示,旨在平衡两个区域的损失,即使编辑区域相对较小。
对于输入视频 和实例级别的mask ,其中 表示帧 中的编辑区域,在空间维度上应用高斯下采样,并在时间维度上重复,以获得与视频潜在表示形状对齐的掩码 。损失分别计算mask区域和非mask区域,得到
其中, 表示扩散均方误差损失(MSE loss),用于衡量生成帧 与真实帧 之间的像素级误差。
为了进一步减少 SCE 在mask区域的影响,添加了一个梯度损失 ,它最小化编码器输入中mask区域的影响。不直接计算二阶梯度,而是通过有限差分法进行近似计算。
其中, 表示编码器的特征, 是一个小的扰动。梯度损失定义为:
RA损失是三个项的加权和,以确保对mask区域和非mask区域都有足够的监督。
合成数据生成
创建大规模配对视频数据集可能既昂贵又具有挑战性,尤其是对于视频传播任务,因为很难涵盖所有视频任务。为了解决这个问题,本文提出使用从视频实例分割数据集中派生的合成数据。在训练中,使用了Youtube-VOS、SAM-V2 和一个内部数据集。然而,这一数据生成pipeline可以应用于任何可用的视频实例分割数据集。
采用了多种增强技术来处理分割数据,针对不同的传播子任务进行了定制:
-
复制并粘贴:从一个视频中随机分割对象并粘贴到另一个视频中,模拟物体插入;
-
Mask填充:对mask区域进行修复,在选定区域内创建逼真的编辑;
-
颜色填充:用特定的颜色填充mask区域,表示基本的物体追踪场景。
对于颜色填充,将被送到,将被送到,如公式3所示。每种合成数据类型与一个特定任务对齐,使得本文的模型能够跨不同应用进行泛化。对应这些增强方法的任务嵌入被注入到模型中,引导模型根据增强类型进行适应。请注意,尽管数据创建方法和任务多样,但SCE的核心功能保持一致:编码未编辑的信息,而I2V模型保持生成能力以传播已编辑区域。
实验
实现细节
由于GenProp是一个通用框架,在基于Sora的DiT架构和基于Stable Video Diffusion (SVD)的U-Net架构上进行了实验,作为基本的视频生成模型。对于前者,模型在32、64和128帧的视频上进行I2V生成训练,帧率为12和24FPS,基准分辨率为360p。SCE(24个块)和MPD进行训练,而I2V模型被冻结。结果可以使用超分辨率模型提升至720p。学习率设置为5e-5,采用余弦衰减调度器和线性预热。为确保训练稳定性,采用指数滑动平均。梯度范数阈值设为0.001,以防止训练不稳定。分类器自由引导(CFG)值设为20,数据增强比率分别设置为0.5/0.375/0.125,分别对应复制并粘贴/掩码填充/颜色填充。在RA损失中,为2.0,为1.0,为1.0。所有实验在32/64个NVIDIA A100 GPU上进行,针对不同的架构进行实验。DiT骨干网络具有更好的视频生成质量。主要结果来自这个DiT变体,而消融研究则基于SVD架构进行。
比较
由于生成视频传播是一个新问题,在GenProp的三个子任务中与现有的最先进方法进行了比较。请注意,本文的模型能够在同一个模型中处理这些任务,并进一步涵盖了如外延(outpainting)以及这些子任务的组合等附加任务,如下图1底部所示。
基于扩散的视频编辑
在下图6(a)和(b)中,将GenProp与其他基于扩散的视频编辑方法进行了比较,包括文本引导和图像引导的方法。InsV2V依赖于指令文本来控制生成。然而,由于训练数据有限,它在形状变化较大时表现不佳,并且不支持对象插入。Pika也使用文本提示在框选区域内进行编辑,但当物体形状发生显著变化时,它表现较差,且无法处理背景编辑或对象插入。AnyV2V是一个无需训练的方法,使用第一帧来引导编辑。虽然它能够处理外观变化,但在发生大规模形状或背景修改时会失败,通常会导致退化或鬼影效果。像InsV2V和Pika一样,它也无法插入物体。使用ReVideo通过先移除一个物体再重新插入来处理大规模的形状变化,但这种两阶段过程有缺点。基于框的区域可能导致模糊的边界,并且物体运动会受到原始点跟踪的影响,导致错误累积。此外,框选区域限制了它有效编辑复杂背景的能力。
视频物体移除
对于物体移除,将GenProp与传统的修补pipeline进行了比较,其中级联了两个最先进的模型来实现类似传播的修补,因为传统方法需要对所有帧进行密集的遮罩注释:SAM-V2用于遮罩跟踪,然后Propainter用于修补估计遮罩中的区域。如上图6(c)和(d)所示,GenProp具有几个优点:(1)不需要密集的遮罩注释作为输入;(2)去除物体的反射和阴影等效果;(3)去除大物体并在大面积内进行自然填充。
视频物体跟踪
在上图6(e)中将GenProp与SAM-V2在跟踪性能上进行了比较。由于SAM-V2是在大规模SA-V数据集上训练的,因此SAM-V2通常会生成比GenProp更精确的跟踪遮罩。此外,GenProp比像SAM-V2这样的实时跟踪方法要慢。然而,它有显著的优势。由于其视频生成的预训练,GenProp具有强大的物理规则理解能力。如图6所示,与SAM-V2不同,后者由于训练数据有限且偏倚,难以处理物体的反射和阴影等效果,GenProp能够稳定地跟踪这些效果。这突显了通过生成模型处理经典视觉任务的潜力。
定量结果
对多个测试集进行了定量评估。在视频编辑(如表1所示)中,在两种类型的测试集上进行了评估:(1)经典测试集,使用TGVE的DAVIS部分及其“对象变化描述”作为文本提示,重点关注对象替换和外观编辑;(2)挑战性测试集,包括从Pexels和Adobe Stock收集的30个手动选择的视频,涵盖了大规模物体替换、物体插入和背景替换。对于(2),第一帧使用商业图像编辑工具进行了编辑。对于Pika,使用在线框选工具,每个结果运行三次。对于ReVideo,选择一个框选区域,然后使用其代码提取原始物体的运动点以跟踪外观变化。对于具有显著形状变化的编辑,首先移除原始物体,再插入新物体并分配未来轨迹。
为了评估未编辑区域的一致性,在编辑遮罩外计算PSNR,记作PSNRm。对于形状变化较大的情况,我们在原始和编辑区域上应用粗略的遮罩,仅计算这些遮罩外区域的PSNR。对于文本对齐,我们计算编辑帧与文本提示的CLIP嵌入之间的余弦相似度(CLIP-T)。对于结果质量,计算跨帧的CLIP特征距离(CLIP-I)。
如下表1所示,GenProp在大多数指标上优于其他方法,特别是在挑战性测试集上。Pika在经典测试集上表现出较好的一致性,因为当物体形状相对不变时,其边界框表现得相当好。ReVideo在多个物体上效果较差。对于物体移除,收集了15个复杂场景的视频,包括物体效果和遮挡,因为现有的测试集没有覆盖这些情况。对于SAM,我们点击物体和副作用以确保完整的覆盖。
如表2所示,GenProp实现了最高的一致性,而ReVideo可能会产生边界框伪影,ProPainter在物体效果方面表现较差。
由于质量指标往往不能准确捕捉生成结果的真实感,使用Amazon MTurk进行了用户研究,共有121名参与者。每个参与者查看由GenProp和随机基线生成的几个视频,以及原始视频和文本提示。他们被问到两个问题:
-
哪个视频与说明更匹配?
-
哪个视频在视觉上更好?
然后参与者为每个问题选择一个视频。在上面表1和表2中,展示了用户在对齐/质量上的偏好,GenProp在所有基线上均大幅领先,特别是在挑战性测试集上。
消融研究
Mask预测解码器(MPD)
在下表3中,评估了MPD在挑战性测试集上的效果,结果显示它可以改善文本对齐和一致性。如图7的第1和第2行所示,未使用MPD时,输出mask往往严重退化,导致移除质量更差。如果没有MPD的显式监督,模型可能会混淆应该传播的部分和应该保留的部分,导致在后续帧中部分移除的物体重新出现。MPD有助于解耦,使得移除结果和预测掩码更加准确,即使在严重遮挡的情况下也能实现完全物体移除。
区域感知损失 (RA Loss)
在表3中,进一步测试了所提议的RA Loss在挑战性测试集上的有效性。GenProp中的一个核心挑战是,SCE可能错误地选择原始视频的所有区域,包括编辑区域,这会因为重建损失而削弱I2V生成能力。
如下图7的第3至第5行所示,在没有RA Loss的情况下,原始物体往往会逐渐重新出现,从而阻碍了第一帧编辑(绿色摩托车)的传播。使用RA Loss后,编辑区域能够以稳定一致的方式传播。
颜色填充增强 (Color Fill Augmentation)
颜色填充增强是解决传播失败的另一个关键因素。尽管复制粘贴和遮罩填充增强使得模型能够隐式学习物体修改、替换和删除,但颜色填充增强明确地训练模型进行跟踪,引导模型在整个序列中保持第一帧所做的修改,提示为“跟踪彩色区域”。如上图7的第6至第8行所示,由于形状差异显著,将女孩变成一只小猫是具有挑战性的。然而,使用颜色填充增强后,GenProp成功地将这一大幅修改在整个序列中传播。
结论
本文设计了一种新型的生成视频传播框架——GenProp,利用I2V模型固有的视频生成能力,实现了包括物体移除、插入和跟踪等多种下游应用。通过展示其能够扩展可实现的编辑范围(例如,移除或跟踪物体及其相关效果)并生成高度逼真的视频,且不依赖于传统的中间表示(如光流或深度图),我们展示了其潜力。通过集成选择性内容编码器并利用I2V生成模型,GenProp能够始终保持未改变的内容,同时动态传播变化。合成数据和区域感知损失进一步提升了其在跨帧解耦和细化编辑方面的能力。实验结果表明,GenProp在范围和精度上均优于现有方法,确立了其作为一种强大、灵活的解决方案的地位。未来,我们计划扩展该模型以支持多个关键帧的编辑,并探索可以支持的其他视频任务。
参考文献
[1] Generative Video Propagation
相关文章:
视频编辑最新SOTA!港中文Adobe等发布统一视频生成传播框架——GenProp
文章链接:https://arxiv.org/pdf/2412.19761 项目链接:https://genprop.github.io 亮点直击 定义了一个新的生成视频传播问题,目标是利用 I2V 模型的生成能力,将视频第一帧的各种变化传播到整个视频中。 精心设计了模型 GenProp&…...
ue5动画重定向,一键重定向。ue4小白人替换成ue5
这就是我们下载的 初学者动画内容包 点击设置选中列 绿色的是动画 黄色的关卡 蓝色是蓝图 ctrla 全选 ctrl鼠标左键 选中所有动画 重定向动画资产 不要选错,只要绿色 选择目标网格体 选择所有的绿色 动画 导出动画 添加前缀ycn 导出 一定要提前新建好存放的…...
C++ 枚举类型
【语法解析】 ● C 枚举类型 在C中,枚举(enumeration)类型是一种简单的数据类型,用于定义在程序中使用的常量。(1)枚举类型的定义格式:enum <类型名> {<枚举常量表>};(2…...
通过Apache、Nginx限制直接访问public下的静态文件
一、Apache 在public目录下的.htaccess文件中添加如下规则,来拒绝除了指定文件类型之外的所有请求 <FilesMatch "\.(?!(jpg|jpeg|png|gif|css|js|ico)$)[^.]$">Order Allow,DenyDeny from all </FilesMatch> 上述配置表示仅允许访问.jpg …...
Spring Boot3 配合ProxySQL实现对 MySQL 主从同步的读写分离和负载均衡
将 ProxySQL 配合 Spring Boot 使用,主要的目的是在 Spring Boot 应用程序中实现对 MySQL 主从同步的读写分离和负载均衡。这样,你可以利用 ProxySQL 自动将写操作路由到主库,而将读操作路由到从库。 1. 准备工作 确保你的 MySQL 主从同步环…...
ubuntu20下编译linux1.0 (part1)
author: hjjdebug date: 2025年 01月 09日 星期四 15:56:15 CST description: ubuntu20下编译linux1.0 (part1) 该博客记录了新gcc编译旧代码可能碰到的问题和解决办法, 可留作参考 操作环境: ubuntu20 $ gcc --version gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0 $ as --vers…...
【AI日记】25.01.10
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:国家为什么会失败阅读原因:2024 年诺贝尔经济学奖得主的力作未删减版:https://book.dou…...
04_Redis数据类型-String字符串
1.Redis数据类型介绍 Redis是一种Key-Value类型缓存型数据库,Redis为了存储不同类型的数据,Value支持多种数据类型,Redis为我们提供了常用的9种数据类型。包括5种基本类型:String(字符串)、Hash(哈希)、List(列表),Set(集合)及zset(Sorted Set有序集合);和4种…...
mysql之基本select语句 运算符 排序分页
1.SQL的分类 DDL:数据定义语言. CREATE ALTER DROP RENAME TRUNCATE DML: 数据操作语言. INSERT DELETE UPDATE SELECT 重中之重 DCL: 数据控制语言. COMMIT ROLLBACK SAVEPOINT GRANT REVOKE 2.SQL语言的规则与规范 1.基本规则 SQL可以在一行或多行,为了提高可…...
springboot整合admin
1. 添加依赖 首先,在你的admin服务端pom.xml文件中添加Spring Boot Admin的依赖: <dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.5.4<…...
springboot整合gateway
1. 添加依赖 首先,在你的pom.xml文件中添加Spring Cloud Gateway的依赖: <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId> </dependency> 如果…...
iOS实际开发中使用Alamofire实现多文件上传(以个人相册为例)
引言 在移动应用中,图片上传是一个常见的功能,尤其是在个人中心或社交平台场景中,用户经常需要上传图片到服务器,用以展示个人风采或记录美好瞬间。然而,实现多图片上传的过程中,如何设计高效的上传逻辑并…...
PyCharm 的安装与使用(Window)
1 PyCharm 简介 PyCharm 是一款由 JetBrains 公司开发的专门用于 Python 语言开发的集成开发环境(IDE)。以下是其相关介绍: 1.1 特点与功能 智能代码编辑:提供高度智能化的代码编辑器,支持语法高亮、自动补全、代码重…...
媒体资源生产转码过程
音视频基础 1. 音频基础原理 1.1 声音的基本概念 声波: 声音是通过空气或其他介质传播的机械波。声波的特性包括频率(Hz)、振幅(dB)和波形。采样率 (Sampling Rate): 每秒对声音信号进行采样的次数,单位为赫兹&…...
WPF控件Grid的布局和C1FlexGrid的多选应用
使用 Grid.Column和Grid.Row布局,将多个C1FlexGrid布局其中,使用各种事件来达到所需效果,点击复选框可以加载数据到列表,移除列表的数据,自动取消复选框等 移除复选框的要注意!!!&am…...
Postman配置环境变量
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Postman是一套比较方便的接口测试工具,但我们在使用过程中,可能会出现创建了API请求,但API的URL会随着服务器IP地址的变化而改…...
import语句详解
在 Java 中,import 语句用于引入其他包中的类、接口或静态成员,以便在当前源文件中直接使用它们,而不需要写完整的类名(包括包名)。以下是 import 语句的详细解释和使用方法: 一、import语句的基本概念 定…...
数据结构与算法之二叉树: LeetCode 199. 二叉树的右视图 (Ts版)
二叉树的右视图 https://leetcode.cn/problems/binary-tree-right-side-view/ 描述 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1 输入:root [1,2,3,nu…...
CentOS7修改Docker默认存储路径
当你使用Docker时,Docker的默认配置是将镜像、容器和卷存储在系统/var/lib/docker/目录下,如果docker镜像安装的太多会导致磁盘不够,你可以尝试以下方法来释放空间: 清理无用的镜像和容器:使用docker命令删除不再使用…...
宝塔面板使用 GoAccess Web 日志分析教程
宝塔面板是一个简单方便的服务器运维面板,但其网站统计功能是收费的。而 GoAccess 是一个用 C 编写的免费开源 Web日志分析器,本文将介绍如何在宝塔面板中开启 GoAccess Web 日志分析功能。 内容索引 下载安装 GoAccess在宝塔面板中添加日志切割的计划任务将 Web 日志输出到…...
【FPGA】时序约束与分析
设计约束 设计约束所处环节: 约束输入 分析实现结果 设计优化 设计约束分类: 物理约束:I/O接口约束(例如引脚分配、电平标准设定等物理属性的约束)、布局约束、布线约束以及配置约束 时序约束:设计FP…...
c++入门之 命名空间与输入输出
1、命名空间 1.1使用命名空间的原因 先看一个例子: #include <iostream>int round 0;int main() {printf("%d", round);return 0; }请问,这个程序能跑起来吗? 答案是否定的 原因是,当我们想创建一个全局变量 …...
【zotero】解决无法参考文献交叉跳转、相关参考文献插件推荐
无法跳转 参考大佬文章的方法: https://blog.csdn.net/air__Heaven/article/details/137470687 但是有可能有时候又跳不了了,可以多多执行一下 zotero-citation插件 github地址 : https://github.com/MuiseDestiny/zotero-citation cl ht…...
《深度学习模型在鸿蒙分布式框架下的跨设备高效之旅》
在人工智能领域,深度学习模型的训练与推理通常需要强大的计算资源和大量的数据支持。而鸿蒙系统的分布式框架为解决这一问题提供了新的思路和方法,使得深度学习模型能够在多个设备之间实现高效的训练与推理。 鸿蒙分布式框架概述 鸿蒙系统是一款面向万…...
不同方式获取音频时长 - python 实现
DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” -------------------------------------------------------------…...
用python实现烟花代码,完整代码拿走不谢
有时候用python实现一些有趣的代码,既有趣,又能提升知识 使用Python实现动态烟花代码 效果如下: 不废话,直接上代码: import pygame from random import randint, uniform, choice import mathvector pygame.math…...
[OPEN SQL] 限定选择行数
本次操作使用的数据库表为SCUSTOM,其字段内容如下所示 航班用户(SCUSTOM) 该数据库表中的部分值如下所示 指定查询多少行数据,我们可以使用语法UP TO n ROWS来实现对数据前n项的查询 语法格式 SELECT * FROM <dbtab> UP TO n ROWS 参数说明 db…...
【入门级】计算机网络学习
网络安全:前端开发者必知:Web安全威胁——XSS与CSRF攻击及其防范-CSDN博客 三次握手四次挥手:前端网络—三次握手四次挥手_前端三次握手-CSDN博客 http协议和https协议的区别:前端网络—http协议和https协议的区别-CSDN博客 网…...
Redis 安装与 Spring Boot 集成指南
安装 Redis 和将其与 Spring Boot 应用集成是构建高效缓存解决方案的常见步骤。以下是详细的指南,帮助你在本地环境中安装 Redis,并在 Spring Boot 项目中配置和使用它。 1. 安装 Redis Windows 环境 Redis 官方并不直接支持 Windows,但你…...
基于 Python 和 OpenCV 的人脸识别上课考勤管理系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【c/c++】 windows下调用putty
windows和linux系统存在差异,同样的数据在两边的终端行为都不一样,就很头疼。 例如:换行符,win下是\r\n 而linux下是\n 又或者win下使用vi 好在找到了解决方案 1、通过第三方程序GoTTY(支持windows和Linux&#x…...
JVM常见面试题
1.内存泄漏与内存溢出的区别 内存泄漏是指不再使用的对象无法得到及时的回收,持续占用内存空间,从而导致系统内存逐渐减少,系统性能下降,最终可能引发内存溢出内存溢出是指程序在运行时需要分配内存,但 JVM 没有足够的内存可以分配(超出可用内存大小),最终导致内存分配…...
手机租赁系统开发解决方案与市场趋势分析
内容概要 手机租赁系统开发正如一场技术与商业的双重舞会,双方时而相互辉映,时而却也是一场较量。在这片快速变幻的市场中,了解当前的技术实现与挑战尤为重要。例如,系统架构的选择、数据安全性以及用户体验设计都可能成为企业发…...
基于Qt的OFD阅读器开发原理与实践
摘要 本文详细探讨了基于Qt开发OFD阅读器的原理与实践。通过解析OFD文件格式、构建文档结构、实现页面渲染、处理用户交互以及进行性能优化,本文展示了如何使用Qt框架开发一个功能强大、性能优异的OFD阅读器。文章还提供了示例代码和未来发展方向,为开发…...
Redis实现高效的负载均衡算法
1. Redis存储设计 我们需要在 Redis 中存储以下信息: 配置列表(List<Config>):存储所有配置项。总权重:存储所有配置的总权重。当前轮询状态:存储当前的轮询状态(如当前随机值或索引&am…...
spring依赖注入
一、 注入方式 1. 构造器注入 构造器注入通过构造方法来注入依赖的对象。当Spring容器创建Bean时,会通过构造器来传递依赖对象。这种方式是最推荐的方式,因为它可以确保依赖对象在创建时已经完全注入。 示例: Component public class Car…...
流浪猫流浪狗领养PHP网站源码
源码介绍 流浪猫流浪狗领养PHP网站源码,适合做猫狗宠物类的发信息发布。当然其他信息发布也是可以的。 导入数据库,修改数据库配置/application/database.php 设置TP伪静态,设置运行目录, 后台:/abcd.php/dashboard?…...
ffmpeg 编译遇到的坑
makeinfo: error parsing ./doc/t2h.pm: Undefined subroutine &Texinfo::Config::set_from_init_file called at ./doc/t2h.pm line 24. 编译选项添加: --disable-htmlpages...
灵活运用事务回滚,快捷处理多张数据表格
各位编程宝子们(尤其是对MySQL了解不多的宝子们)在使用关系表处理时,有时候会希望简单一次性解决多张表的数据处理,但又有时候无从下手。其实有时候掌握数据的事务和回滚便可以简单解决这些事情,接下来我将以一个学生信…...
MyBatis 性能优化
1. 引言 1.1 什么是 MyBatis? MyBatis 是一款流行的 Java 持久层框架,能够将 Java 对象与 SQL 数据库映射起来。与传统的 JDBC 不同,MyBatis 提供了灵活的 SQL 映射功能,使开发者可以专注于业务逻辑,而无需编写冗长的…...
【python基础】python内置函数 zip用法介绍
zip() 是 Python 中非常有用的内建函数,能够将多个可迭代对象(如列表、元组、字符串等)打包成一个迭代器,它将对应位置的元素组合成元组,并返回一个由这些元组组成的迭代器。通常用于并行处理多个可迭代对象。 1. 基本…...
Unity Android AAB包GooglePlay上线备忘
aab GooglePlay要求新上线的App必须使用aab格式提交,在Unity Build Settings中勾选Build App Bundle 选项即可;或者在代码中设置: EditorUserBuildSettings.buildAppBundle true; 安装测试 https://developer.android.com/tools/bundlet…...
基于springboot的课程作业管理系统源码(springboot+vue+mysql)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的课程作业管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 可以管理首页、个人中心…...
JVM生产环境常用参数配置及调优建议
一、生产常用参数配置 JAVA_OPTS="-server -Xms4G -Xmx4 -Xmn2G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=45 -XX:ParallelGCThreads=8 -XX:ConcGCThreads=8 -XX:G1HeapRegionSize=16m -XX:MaxGCCount=10 -XX:MetaspaceSize=256m -XX:…...
vue 实现打包并同时上传至服务器端
将 publish_script 及以下文件 upload.server.js 添加到 主文件下,与 src 同级别 具体操作步骤: 1、安装 npm install scp2 2、将下面两条命令加入至 package.json 的 scripts 中 "upload": "node publish_script/upload.server.js&q…...
深入探索AI核心模型:CNN、RNN、GAN与Transformer
在人工智能的飞速发展中,众多深度学习模型和算法不断涌现,推动了许多领域的进步。特别是在图像识别、自然语言处理、生成建模等方向,AI模型的应用越来越广泛。本文将介绍几种最常用的AI模型,包括卷积神经网络(CNN&…...
【Elasticsearch】配置分片分配到指定节点
配置分片分配到指定节点 参考文章:https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-allocation-filtering.html 两种方式:根据节点属性分配和根据节点名称分配。 测试环境 tar xvf elasticsearch-7.17.25-linux-x86_64.tar.gz…...
【贵州省】乡镇界arcgis格式shp数据乡镇名称和编码内容下载测评
shp数据字段乡镇名称和编码,坐标是wgs84,数据为SHP矢量格式,下载下来直接加载进ArcMap即可使用 下载地址:https://download.csdn.net/download/zhongguonanren99/14928126...
EasyExcel上传校验文件错误信息放到文件里以Base64 返回给前端
产品需求: 前端上传个csv 或 excel 文件,文件共4列,验证文件大小,类型,文件名长度,文件内容,如果某行某个单元格数据验证不通过,就把错误信息放到这行第五列,然后把带有…...
Python 植物大战僵尸
文章目录 效果图项目结构实现思路源代码 效果图 项目结构 实现思路 下面是代码的实现思路: 导入必要的库和模块:首先,我们导入了Python的os、time库以及pygame库,还有植物大战僵尸游戏中用到的各个植物和僵尸的类。 初始化游戏和…...