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

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践

flyfish

运行 HunyuanVideo 模型使用文本生成视频的推荐配置(batch size = 1):

模型分辨率
(height/width/frame)
峰值显存
HunyuanVideo720px1280px129f60G
HunyuanVideo544px960px129f45G
  • 本项目适用于使用 NVIDIA GPU 和支持 CUDA 的设备
    • 模型在单张 80G GPU 上测试
    • 运行 720px1280px129f 的最小显存要求是 60GB,544px960px129f 的最小显存要求是 45GB。
  • 测试操作系统:Linux

HunyuanVideo: A Systematic Framework For Large Video Generation Model

HunyuanVideo/ckpts/文件夹下的模型

在这里插入图片描述

HunyuanVideo├──ckpts│  ├──README.md│  ├──hunyuan-video-t2v-720p│  │  ├──transformers│  │  │  ├──mp_rank_00_model_states.pt│  │  │  ├──mp_rank_00_model_states_fp8.pt│  │  │  ├──mp_rank_00_model_states_fp8_map.pt├  │  ├──vae│  ├──text_encoder│  ├──text_encoder_2├──...关键配置项:|        参数        |  默认值  |                描述                |
|:----------------------:|:---------:|:-----------------------------------------:|
|       `--prompt`       |   None    |   用于生成视频的 prompt    |
|     `--video-size`     | 720 1280  |      生成视频的高度和宽度      |
|    `--video-length`    |    129    |     生成视频的帧数     |
|    `--infer-steps`     |    50     |     生成时采样的步数      |
| `--embedded-cfg-scale` |    6.0    |    文本的控制强度       |
|     `--flow-shift`     |    7.0    | 推理时 timestep 的 shift 系数,值越大,高噪区域采样步数越多 |
|     `--flow-reverse`   |    False  | If reverse, learning/sampling from t=1 -> t=0 |
|     `--neg-prompt`     |   None    | 负向词  |
|        `--seed`        |     0     |   随机种子    |
|  `--use-cpu-offload`   |   False   |    启用 CPU offload,可以节省显存    |
|     `--save-path`      | ./results |     保存路径      |## 结果
```csharp
(HunyuanVideo) sss@sss-Super-Server:~/source/HunyuanVideo$ python3 sample_video.py \--video-size 544 960 \--video-length 129 \--infer-steps 50 \--prompt "A cat walks on the grass, realistic style." \--flow-reverse \--use-cpu-offload \--save-path ./results
Namespace(model='HYVideo-T/2-cfgdistill', latent_channels=16, precision='bf16', rope_theta=256, vae='884-16c-hy', vae_precision='fp16', vae_tiling=True, text_encoder='llm', text_encoder_precision='fp16', text_states_dim=4096, text_len=256, tokenizer='llm', prompt_template='dit-llm-encode', prompt_template_video='dit-llm-encode-video', hidden_state_skip_layer=2, apply_final_norm=False, text_encoder_2='clipL', text_encoder_precision_2='fp16', text_states_dim_2=768, tokenizer_2='clipL', text_len_2=77, denoise_type='flow', flow_shift=7.0, flow_reverse=True, flow_solver='euler', use_linear_quadratic_schedule=False, linear_schedule_end=25, model_base='ckpts', dit_weight='ckpts/hunyuan-video-t2v-720p/transformers/mp_rank_00_model_states.pt', model_resolution='540p', load_key='module', use_cpu_offload=True, batch_size=1, infer_steps=2, disable_autocast=False, save_path='./results', save_path_suffix='', name_suffix='', num_videos=1, video_size=[544, 960], video_length=129, prompt='A cat walks on the grass, realistic style.', seed_type='auto', seed=None, neg_prompt=None, cfg_scale=1.0, embedded_cfg_scale=6.0, use_fp8=False, reproduce=False, ulysses_degree=1, ring_degree=1)
2024-12-21 21:50:51.616 | INFO     | hyvideo.inference:from_pretrained:154 - Got text-to-video model root path: ckpts
2024-12-21 21:50:51.616 | INFO     | hyvideo.inference:from_pretrained:189 - Building model...
2024-12-21 21:50:52.098 | INFO     | hyvideo.inference:load_state_dict:340 - Loading torch model ckpts/hunyuan-video-t2v-720p/transformers/mp_rank_00_model_states.pt...
/home/sss/tool/HunyuanVideo/hyvideo/inference.py:341: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.state_dict = torch.load(model_path, map_location=lambda storage, loc: storage)
2024-12-21 21:51:05.739 | INFO     | hyvideo.vae:load_vae:29 - Loading 3D VAE model (884-16c-hy) from: ./ckpts/hunyuan-video-t2v-720p/vae
/home/sss/tool/HunyuanVideo/hyvideo/vae/__init__.py:39: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.ckpt = torch.load(vae_ckpt, map_location=vae.device)
2024-12-21 21:51:07.546 | INFO     | hyvideo.vae:load_vae:55 - VAE to dtype: torch.float16
2024-12-21 21:51:07.577 | INFO     | hyvideo.text_encoder:load_text_encoder:28 - Loading text encoder model (llm) from: ./ckpts/text_encoder
Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:01<00:00,  2.42it/s]
2024-12-21 21:51:10.888 | INFO     | hyvideo.text_encoder:load_text_encoder:50 - Text encoder to dtype: torch.float16
2024-12-21 21:51:10.890 | INFO     | hyvideo.text_encoder:load_tokenizer:64 - Loading tokenizer (llm) from: ./ckpts/text_encoder
2024-12-21 21:51:11.263 | INFO     | hyvideo.text_encoder:load_text_encoder:28 - Loading text encoder model (clipL) from: ./ckpts/text_encoder_2
2024-12-21 21:51:11.331 | INFO     | hyvideo.text_encoder:load_text_encoder:50 - Text encoder to dtype: torch.float16
2024-12-21 21:51:11.332 | INFO     | hyvideo.text_encoder:load_tokenizer:64 - Loading tokenizer (clipL) from: ./ckpts/text_encoder_2
2024-12-21 21:51:11.454 | INFO     | hyvideo.inference:predict:580 - Input (height, width, video_length) = (544, 960, 129)
2024-12-21 21:51:11.469 | DEBUG    | hyvideo.inference:predict:640 - height: 544width: 960video_length: 129prompt: ['A cat walks on the grass, realistic style.']neg_prompt: ['Aerial view, aerial view, overexposed, low quality, deformation, a poor composition, bad hands, bad teeth, bad eyes, bad limbs, distortion']seed: Noneinfer_steps: 50num_videos_per_prompt: 1guidance_scale: 1.0n_tokens: 67320flow_shift: 7.0embedded_guidance_scale: 6.0
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 50/50 [01:25<00:00, 42.71s/it]
2024-12-21 21:54:32.410 | INFO     | hyvideo.inference:predict:669 - Success, time: 200.9416298866272
huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...
To disable this warning, you can either:- Avoid using `tokenizers` before the fork if possible- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)
2024-12-21 21:54:34.807 | INFO     | __main__:main:55 - Sample save to: ./results/seed452372_A cat walks on the grass, realistic style.mp4

代码

import os
import time
from pathlib import Path
from loguru import logger
from datetime import datetimefrom hyvideo.utils.file_utils import save_videos_grid
from hyvideo.config import parse_args
from hyvideo.inference import HunyuanVideoSamplerdef main():# 解析命令行参数args = parse_args()# 打印解析得到的参数,方便调试和查看输入信息print(args)# 将模型的根路径转换为 Path 对象,方便后续路径操作models_root_path = Path(args.model_base)# 检查模型根路径是否存在,如果不存在则抛出异常if not models_root_path.exists():raise ValueError(f"`models_root` 不存在: {models_root_path}")# 创建保存样本的文件夹# 如果 save_path_suffix 为空,则使用 save_path 作为保存路径,否则将后缀添加到 save_path 后save_path = args.save_path if args.save_path_suffix == "" else f'{args.save_path}_{args.save_path_suffix}'# 若保存路径不存在,则创建该目录,exist_ok=True 表示如果目录已存在不会引发异常if not os.path.exists(args.save_path):os.makedirs(save_path, exist_ok=True)# 从预训练模型的路径加载 HunyuanVideoSampler 模型,并传入解析得到的命令行参数hunyuan_video_sampler = HunyuanVideoSampler.from_pretrained(models_root_path, args=args)# 获取更新后的参数,可能是因为加载模型时对参数进行了某些调整args = hunyuan_video_sampler.args# 开始采样# TODO: 批量推理检查,这里可能需要后续完善批量推理的检查逻辑outputs = hunyuan_video_sampler.predict(# 输入的提示信息,用于引导视频生成prompt=args.prompt, # 视频的高度height=args.video_size[0],# 视频的宽度width=args.video_size[1],# 视频的长度video_length=args.video_length,# 随机种子,用于保证结果的可重复性seed=args.seed,# 负向提示信息,可能用于引导模型避免生成某些内容negative_prompt=args.neg_prompt,# 推理的步数,可能影响生成视频的质量和细节infer_steps=args.infer_steps,# 引导规模,可能影响生成结果与提示的符合程度guidance_scale=args.cfg_scale,# 每个提示对应的视频数量num_videos_per_prompt=args.num_videos,# 可能与视频流的偏移有关的参数flow_shift=args.flow_shift,# 推理的批量大小batch_size=args.batch_size,# 可能是嵌入的引导规模参数embedded_guidance_scale=args.embedded_cfg_scale)# 从输出中获取采样得到的样本,可能是生成的视频数据samples = outputs['samples']# 保存样本# 检查是否处于分布式环境或当前进程是否是主进程,可能用于分布式训练时的保存操作if 'LOCAL_RANK' not in os.environ or int(os.environ['LOCAL_RANK']) == 0:for i, sample in enumerate(samples):# 为当前样本添加一个维度,可能是为了满足后续保存操作的格式要求sample = samples[i].unsqueeze(0)# 获取当前时间并格式化为字符串,作为时间戳time_flag = datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d-%H:%M:%S")# 构建保存样本的路径,包含时间戳、种子信息和提示信息save_path = f"{save_path}/{time_flag}_seed{outputs['seeds'][i]}_{outputs['prompts'][i][:100].replace('/','')}.mp4"# 使用 save_videos_grid 函数保存视频,帧率为 24save_videos_grid(sample, save_path, fps=24)# 记录样本保存的路径信息,方便查看保存位置logger.info(f'样本保存到: {save_path}')if __name__ == "__main__":main()

VAE 理解

VAE即变分自编码器(Variational Autoencoder),是一种生成模型,以下是对其的详细介绍:

基本架构

• 编码器:将输入数据编码成潜在空间中的概率分布参数,通常是输出一个均值向量和一个方差向量,这两个向量共同描述了潜在变量的正态分布。

• 解码器:从潜在空间的概率分布中采样得到潜在变量,然后将其解码还原为与输入数据相似的输出。

工作原理

• 编码过程:输入数据通过编码器网络,编码器学习到输入数据的潜在特征,并将这些特征表示为潜在空间中的概率分布参数,即均值和方差。

• 重参数化技巧:由于概率分布无法直接进行梯度下降优化,VAE采用重参数化技巧,将潜在变量的采样过程转化为可微分的操作。具体来说,通过引入一个随机噪声变量,将其与均值和方差相结合,从而得到潜在变量的样本,这样就可以在反向传播过程中计算梯度并更新网络参数。

• 解码过程:采样得到的潜在变量输入到解码器网络,解码器根据这些潜在特征尝试重建原始输入数据。

• 损失函数:VAE的损失函数由两部分组成,一部分是重建误差,衡量重建数据与原始数据之间的差异,通常使用均方误差等指标;另一部分是KL散度,衡量编码器输出的概率分布与先验分布(一般为标准正态分布)之间的差异,通过最小化KL散度,使潜在空间的分布更加平滑和连续,有助于生成更高质量的新样本。

特点

• 生成能力:能够学习数据的潜在分布,从而生成与训练数据相似但又不完全相同的全新样本,可用于图像生成、文本生成等任务。

• 连续且有结构的隐空间:在潜在空间中学习到的表示是连续且有结构的,这使得样本插值和生成更加自然,也便于进行各种基于潜在空间的操作,如插值、算术运算等,以探索数据的不同特征和属性。

• 概率建模:通过最大化似然函数,能够有效地捕捉数据的复杂分布,为数据建模提供了一种概率视角,有助于更好地理解和解释数据的生成过程。

应用场景

• 图像生成:可以生成各种类型的图像,如手写数字、人脸图像、自然景观等,通过调整潜在变量的值,可以控制生成图像的不同特征,如人脸的表情、年龄、性别等。

• 数据增强:在训练数据有限的情况下,利用VAE生成与原始数据相似的新样本,扩充数据集,提高模型在分类、回归等任务上的性能和泛化能力。

• 异常检测:先学习正常数据的分布,然后对测试数据进行重建,如果重建误差较大,则认为该数据是异常数据,可用于工业设备故障检测、网络安全入侵检测等领域。

• 特征学习与降维:通过编码器将高维数据压缩成低维的潜在表示,这些潜在特征可以用于后续的机器学习任务,如分类、聚类等,同时也可以实现数据的可视化降维。

variational 理解

在变分自编码器(Variational Autoencoder,VAE)中,“variational”一词主要来源于其采用的变分推断(Variational Inference)方法,以下是对其具体理解:

“variational”体现了VAE在建模过程中对数据不确定性的一种变分处理方式,通过引入变分分布并利用变分推断方法来近似难以直接计算的真实后验分布,从而能够在潜在空间中学习到数据的概率分布,实现有效的数据生成和特征学习。这种变分的思想使得VAE在生成模型领域具有独特的优势,能够生成具有多样性且符合数据分布的新样本。
变分推断的引入背景

• 在传统的自编码器中,编码器将输入数据编码为一个确定性的低维表示,即一个固定向量。然而,这种表示方式无法捕捉数据的不确定性信息,也不利于生成新的样本。而VAE的目标是学习数据的概率分布,以便能够生成与训练数据相似的新样本,这就需要引入概率模型和推断方法来处理数据的不确定性,变分推断便应运而生。

变分推断的基本思想

• 概率图模型框架:VAE可以看作是一个概率图模型,其中输入数据x与潜在变量z之间存在某种概率关系。理想情况下,我们希望直接计算后验分布p(z|x),即给定输入数据x时潜在变量z的分布,从而了解数据的内在结构和不确定性。然而,这个后验分布往往难以直接计算,因为它涉及到复杂的积分运算。

• 变分分布的引入:变分推断通过引入一个变分分布q(z|x),来近似真实的后验分布p(z|x)。这个变分分布q(z|x)是参数化的,其参数可以通过优化过程来学习,使其尽可能地接近真实的后验分布。在VAE中,编码器的作用就是学习这个变分分布q(z|x)的参数,通常是输出潜在变量z的均值和方差,从而定义了一个以这些参数为特征的正态分布作为变分分布。

优化过程与KL散度

• 证据下界(ELBO):为了衡量变分分布q(z|x)与真实后验分布p(z|x)之间的相似程度,变分推断定义了一个证据下界(Evidence Lower BOund,ELBO),它是模型对数似然函数的一个下界。ELBO由两部分组成,一部分是重建误差,衡量解码器根据潜在变量z重建输入数据x的质量;另一部分是KL散度,衡量变分分布q(z|x)与先验分布p(z)之间的差异。

• 优化目标:VAE的训练目标就是最大化ELBO,这等价于最小化变分分布q(z|x)与真实后验分布p(z|x)之间的KL散度,同时最大化重建误差。通过这种方式,编码器学习到的变分分布能够更好地近似真实的后验分布,使得潜在变量z能够有效地捕捉输入数据x的不确定性信息,为生成新样本提供有力支持。

相关文章:

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置&#xff08;batch size 1&#xff09;&#xff1a; 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…...

CSRF攻击XSS攻击

概述 ​在 HTML 中&#xff0c;<a>, <form>, <img>, <script>, <iframe>, <link> 等标签以及 Ajax 都可以指向一个资源地址&#xff0c;而所谓的跨域请求就是指&#xff1a;当前发起请求的域与该请求指向的资源所在的域不一样。这里的域指…...

vue3学习日记8 - 一级分类

最近发现职场前端用的框架大多为vue&#xff0c;所以最近也跟着黑马程序员vue3的课程进行学习&#xff0c;以下是我的学习记录 视频网址&#xff1a; Day2-17.Layout-Pinia优化重复请求_哔哩哔哩_bilibili 学习日记&#xff1a; vue3学习日记1 - 环境搭建-CSDN博客 vue3学…...

Notepad++移除所有空格

1.打开Notepad。 2.打开你想要编辑的文件。 3.按下 Ctrl H 打开查找和替换对话框&#xff0c;并选择 “正则表达式”。 4.在 “查找目标” 框中输入 \s。 5.在 “替换为” 框中留空&#xff0c;不填写任何内容。 6.点击 “全部替换” 按钮。...

JavaSE第八天

一、继承之super关键字 super关键字&#xff1a; 一个引用变量&#xff0c;用于引用父类对象 父类和子类都具有相同的命名方法&#xff0c;要调用父类方法时使用 父类和子类都具有相同的命名属性&#xff0c;要调用父类中的属性时使用 super也是父类的构造函数&#xff0c;…...

ideal jdk报错如何解决

例如: 可能一:环境变量中未配置 请在Path中加入并将要使用的最好置顶,如 可能二:项目结构中语言级别错误: 可能三:Maven工程中,对于模块要单独设置jdk: 如: 未设置则为默认,在博主本次展示中为:...

嵌入式Linux ntpclient的使用

ntpclient是一个用于与NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;服务器通信并测量系统时间的工具。我这里用的是"ntpclient_2024_132"。下载源码编译后会得到一个ntpclient程序。 下面是对ntpclient每个选项的解释&#xff1a; -…...

25/1/15 嵌入式笔记 初学STM32F108

GPIO初始化函数 GPIO_Ini&#xff1a;初始化GPIO引脚的模式&#xff0c;速度和引脚号 GPIO_Init(GPIOA, &GPIO_InitStruct); // 初始化GPIOA的引脚0 GPIO输出控制函数 GPIO_SetBits&#xff1a;将指定的GPIO引脚设置为高电平 GPIO_SetBits(GPIOA, GPIO_Pin_0); // 将GPIO…...

【练习】力扣热题100 字符串解码

题目 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有额外的空格&#xff0c…...

1.快慢指针-力扣-283-移动零

题目描述 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 用例 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nu…...

5. 使用springboot做一个音乐播放器软件项目【业务逻辑开发】

#万物oop 上一章文章 我们做了音乐播放器 数据表的创建。参加地址&#xff1a; https://blog.csdn.net/Drug_/article/details/145093705 今天分享的这篇文章就是根据数据表 来写 业务逻辑 。 今天我们主要是实现管理后台的功能。 对于这篇文章 的理解 需要小伙伴有 springbo…...

配置正确spring-boot工程启动的时候报错dynamic-datasource Please check the setting of primary

一个两年没有碰的spring-boot工程&#xff0c;启动时报错。因为用了baomidou的多源数据库配置&#xff0c;因此启动时报错primary没有正确配置。经过检查&#xff0c;确定配置文件配置正确。 报错原因是没有读到正确的配置文件。pom文件里的resources标签重定义&#xff0c;把…...

Freeswitch使用media_bug能力实现回铃音检测

利用freeswitch的media bug能力来在智能外呼时通过websocket对接智能中心的声音检测接口&#xff0c;来实现回铃音检测&#xff0c;来判断用户当前是否已响应&#xff0c;拒接&#xff0c;关机等。 1.回铃音处理流程 2.模块源码目录结构 首先新建一个freeswitch的源码的src/a…...

Kubernetes(k8s)和Docker Compose本质区别

Kubernetes&#xff08;简称 k8s&#xff09;和 Docker Compose 是容器编排领域的两大重要工具&#xff0c;虽然它们都用于管理和编排容器化应用&#xff0c;但在设计目标、功能特性、使用场景和复杂度上存在显著差异。以下将从多个方面详细探讨 Kubernetes 和 Docker Compose …...

OSI七层协议——分层网络协议

OSI七层协议&#xff0c;顾名思义&#xff0c;分为七层&#xff0c;实际上七层是不存在的&#xff0c;是人为的进行划分,让人更好的理解 七层协议包括&#xff0c;物理层(我),数据链路层(据),网络层(网),传输层(传输),会话层(会),表示层(表),应用层(用)(记忆口诀->我会用表…...

RabbitMQ 客户端 连接、发送、接收处理消息

RabbitMQ 客户端 连接、发送、接收处理消息 一. RabbitMQ 的机制跟 Tcp、Udp、Http 这种还不太一样 RabbitMQ 服务&#xff0c;不是像其他服务器一样&#xff0c;负责逻辑处理&#xff0c;然后转发给客户端 而是所有客户端想要向 RabbitMQ服务发送消息&#xff0c; 第一步&a…...

SQL ON与WHERE区别

在 MySQL 中&#xff0c;ON 和 WHERE 都用于过滤数据&#xff0c;但它们的使用场景和作用有所不同&#xff0c;尤其是在涉及 JOIN 操作时。下面通过具体的例子来说明它们的区别。 1. ON 的作用 ON 用于指定表之间的连接条件&#xff0c;决定哪些行应该被连接在一起。它在 JOI…...

[创业之路-254]:《华为数字化转型之道》-1-华为是一个由客户需求牵引、高度数字化、高度智能化、由无数个闭环流程组成的价值创造、评估、分配系统。

前言&#xff1a; 华为是一个由客户需求牵引、高度数字化、高度智能化、由无数个闭环流程组成的价值创造、评估、分配系统。华为的流程大到战略&#xff0c;小到日常工作&#xff0c;是由无数个自我调节自我优化的数字化闭环控制流程组成&#xff0c;大闭环套小闭环&#xff0…...

免费为企业IT规划WSUS:Windows Server 更新服务 (WSUS) 之快速入门教程(一)

哈喽大家好&#xff0c;欢迎来到虚拟化时代君&#xff08;XNHCYL&#xff09;&#xff0c;收不到通知请将我点击星标&#xff01;“ 大家好&#xff0c;我是虚拟化时代君&#xff0c;一位潜心于互联网的技术宅男。这里每天为你分享各种你感兴趣的技术、教程、软件、资源、福利…...

异步任务与定时任务

一、异步任务 基于TaskExecutionAutoConfiguration配置类中&#xff0c;注册的ThreadPoolTaskExecutor线程池对象进行异步任务执行。 (一)手动执行异步任务 在yml中配置线程池参数 spring: task:execution:pool:core-size: 5 # 核心线程数max-size: 20 # 最大线…...

大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(5)

大模型WebUI&#xff1a;Gradio全解11——Chatbot&#xff1a;融合大模型的多模态聊天机器人&#xff08;5&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.5 Chatbot的特殊Events11.5.1 各事件总演示11.5.2 详解.undo、.retry、.like和.edit…...

32单片机综合应用案例——基于GPS的车辆追踪器(三)(内附详细代码讲解!!!)

困难不会永远存在&#xff0c;只要你勇于面对&#xff0c;坚持努力&#xff0c;就一定能够战胜一切困难。每一次挑战都是一次成长的机会&#xff0c;不要害怕失败&#xff0c;失败是成功之母。只有经历过失败&#xff0c;你才能更加明白自己的不足&#xff0c;并不断改进自己&a…...

扣除价格因素与剔除季节性因素:统计数据中的“真实”增长(中英双语)

扣除价格因素与剔除季节性因素&#xff1a;统计数据中的“真实”增长 在经济统计分析中&#xff0c;我们经常会听到“扣除价格因素”和“剔除季节性因素”这两个概念。这两者都是为了排除外部干扰因素&#xff0c;真实反映经济活动的增长情况。它们分别针对价格波动和季节性波…...

网卡接收报文的过程

网卡接收报文的过程通常包括以下几个关键步骤&#xff1a; 1. 硬件接收&#xff1a; • 网卡硬件首先接收到从网络传输过来的数据包。网络接口卡&#xff08;NIC&#xff09;负责将接收到的电信号转换为数字信号&#xff0c;并存储到一个硬件缓冲区中。 2. DMA传输&#xff…...

Windows图形界面(GUI)-QT-C/C++ - QT 对话窗口

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 模态对话框 非模态对话框 文件对话框 基本概念 静态函数 常见属性 颜色对话框 基本概念 静态函数 常见属性 字体对话框 基本概念 静态函数 常见属性 输入对话框 基本概念 …...

bypass--2025春秋杯冬季赛

漏洞点 题目不难&#xff0c;这个循环赋值的结束条件是s[i]0&#xff0c;并且s和key再栈上的位置是挨着的 那么很容易想到&#xff0c;第二次循环赋值的时候&#xff0c;有一个溢出&#xff0c;溢出部分的值是第一次写入的key的值。 那么基本思路就是&#xff0c;利用这段溢出…...

学习微信小程序的下拉列表控件-picker

1、创建一个空白工程 2、index.wxml中写上picker布局&#xff1a; <!--index.wxml--> <view class"container"><picker mode"selector" range"{{array}}" bindchange"bindPickerChange"><view class"pick…...

【17】Word:林楚楠-供应链❗

目录 题目 NO1.2 NO3 NO4 NO5 NO6 NO7 NO89 题目 NO1.2 另存为&#xff1a;文件→另存为→文档→文件名/考生文件夹F12/FnF12→文件名/考生文件夹 插入→分节符→文本框→输入文件→排版_居中对齐→间距/回车去掉文本框的边框→选中文本框→格式&#xff1a;形状轮廓…...

父子盒子滑动事件穿透问题

问题描述 当父子盒子都有滚动条时&#xff0c;在子盒子内滚动时&#xff0c;父盒子滚动子盒子无法滚动&#xff0c;直到父盒子滚动到底部&#xff0c;子盒子才滚动 解决 如果是vue的项目&#xff0c;直接在子盒子上添加 wheel.stop""...

vue-amap、leaflet、融汇 离线地图瓦片使用情况分析

vue-amap&#xff1a; vue3写的&#xff0c;使用文档 -> 文档地址 <-的离线jsApi里的demo&#xff0c;发现 tile-url不能读取本地项目文件夹里的瓦片&#xff0c;文档里写的其实还是要互联网读取的高德瓦片......... 作者在git库回复tile-url要么放项目里使用绝对路…...

leetcode - 1055. Shortest Way to Form String

Description A subsequence of a string is a new string that is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (i.e., “ace” is a subsequence of “abcd…...

【HarmonyOS之旅】基于ArkTS开发(二) -> UI开发三

目录 1 -> 绘制图形 1.1 -> 绘制基本几何图形 1.2 -> 绘制自定义几何图形 2 -> 添加动画效果 2.1 -> animateTo实现闪屏动画 2.2 -> 页面转场动画 3 -> 常见组件说明 1 -> 绘制图形 绘制能力主要是通过框架提供的绘制组件来支撑&#xff0c;支…...

RabbitMQ 进阶

文章目录 一、发送者的可靠性 1.1 生产者重试机制&#xff1a;1.2 生产者确认机制&#xff1a; 1.2.1 开启生产者确认&#xff1a;1.2.2 定义 ReturnCallback&#xff1a;1.2.3 定义 ConfirmCallback&#xff1a; 二、MQ 的可靠性 2.1 数据持久化&#xff1a; 2.1.1 交换机持…...

RabbitMQ---TTL与死信

&#xff08;一&#xff09;TTL 1.TTL概念 TTL又叫过期时间 RabbitMQ可以对队列和消息设置TTL&#xff0c;当消息到达过期时间还没有被消费时就会自动删除 注&#xff1a;这里我们说的对队列设置TTL,是对队列上的消息设置TTL并不是对队列本身&#xff0c;不是说队列过期时间…...

uniapp(小程序、app、微信公众号、H5)预览下载文件(pdf)

1. 小程序、app 在uniapp开发小程序环境或者app环境中,都可以使用以下方式预览文件 之前其实写过一篇,就是使用uniapp官网提供文件下载、文件保存、文件打开的API, uniapp文件下载 感兴趣也可以去看下 uni.downloadFile({// baseURL 是...

Spring Boot经典面试题及答案

一、Spring Boot基础知识 什么是Spring Boot&#xff1f; 答案&#xff1a; Spring Boot是Spring开源组织下的子项目&#xff0c;是Spring组件一站式解决方案。它简化了Spring应用程序的初始化和开发过程&#xff0c;通过“约定大于配置”的原则&#xff0c;减少了手动配置的繁…...

usb通过hdc连接鸿蒙next的常用指令

参考官方 注册报名https://www.hiascend.com/developer/activities/details/44de441ef599450596131c8cb52f7f8c/signup?channelCodeS1&recommended496144 hdc-调试命令-调测调优-系统 - 华为HarmonyOS开发者https://developer.huawei.com/consumer/cn/doc/harmonyos-guid…...

FPGA:Quartus软件与操作系统版本对照表

文章目录 1.软件概述2.软件版本3.设计流程4.支持的设备5.新特性6.版本对照 1.软件概述 Quartus软件是由英特尔&#xff08;Intel&#xff09;公司开发的一款功能强大的FPGA&#xff08;现场可编程逻辑门阵列&#xff09;设计工具&#xff0c;广泛应用于数字电路设计、仿真、综…...

RustDesk ID更新脚本

RustDesk ID更新脚本 此PowerShell脚本自动更新RustDesk ID和密码&#xff0c;并将信息安全地存储在Bitwarden中。 特点 使用以下选项更新RustDesk ID&#xff1a; 使用系统主机名生成一个随机的9位数输入自定义值 为RustDesk生成新的随机密码将RustDesk ID和密码安全地存储…...

[C语言]字符串分离

题目 从标准输入流&#xff08;控制台&#xff09;中获取一行字符串 str&#xff0c;字符串中可能会存在空格&#xff0c;现在需要将字符串进行分离&#xff0c;规则如下&#xff1a; (1)将 str 中位于 偶数下标 的元素放置在字符串 str1 之中 (2)将 str 中位于 奇数下标 的…...

-bash: /java: cannot execute binary file

在linux安装jdk报错 -bash: /java: cannot execute binary file 原因是jdk安装包和linux的不一致 程序员的面试宝典&#xff0c;一个免费的刷题平台...

Python绘制数据地图-GeoPandas入门

使用GeoPandas绘制数据地图是一种非常直观且强大的数据可视化方法。GeoPandas是一个Python库&#xff0c;专门用于处理地理空间数据&#xff0c;它建立在Pandas和Shapely库之上&#xff0c;并集成了matplotlib、seaborn等绘图库的功能。 下面是一个简单的入门教程&#xff0c;…...

CVPR 2024 图像处理方向总汇(图像去噪、图像增强、图像分割和图像恢复等)

1、Image Progress(图像处理) 去鬼影 Generating Content for HDR Deghosting from Frequency View去阴影 HomoFormer: Homogenized Transformer for Image Shadow Removal去模糊 Unsupervised Blind Image Deblurring Based on Self-EnhancementLatency Correction for E…...

c++ string

1 sting 基本概念 string 基本概念 本质&#xff1a;string是c风格的字符串&#xff0c;而string 本质上是一个类string 和char* 的区别&#xff1a; char * 是一个指针 string 是一个类&#xff0c;类内部封装了char*&#xff0c;管理这个字符串&#xff0c;是一个char* 数组…...

tomcat文件目录讲解

目录的用处 bin&#xff1a;tomcat的可执行命令&#xff0c;比如&#xff1a;tomcat的启动停止命令&#xff0c;也包含其他命令以及.bat&#xff08;Windows执行的命令&#xff09;和.sh&#xff08;Linux操作系统执行的命令&#xff09;文件config:关于tomcat的配置&#xff0…...

博客搭建 — GitHub Pages 部署

关于 GitHub Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;通过构建过程运行文件&#xff0c;然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…...

【0x0052】HCI_Write_Extended_Inquiry_Response命令详解

目录 一、命令概述 二、命令格式及参数 2.1. HCI_Write_Extended_Inquiry_Response命令格式 2.2. FEC_Required 2.3. Extended_Inquiry_Response 三、生成事件及参数 3.1. HCI_Command_Complete 事件 3.2. Status 四、命令执行流程 4.1. 命令准备阶段(主机端) 4.2…...

Kotlin Bytedeco OpenCV 图像图像55 图像透视变换

Kotlin Bytedeco OpenCV 图像图像53 图像透视变换 1 添加依赖2 测试代码3 测试结果 1 添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns"http://maven.apa…...

flutter Get GetMiddleware 中间件不起作用问题

当使用 get: ^5.0.0-release-candidate-9.2.1最新版本时&#xff0c;中间件GetMiddleware各种教程都是让我们在redirect中实现&#xff0c;比如&#xff1a; overrideRouteSettings? redirect(String? route) {return RouteSettings(name: "/companyAuthIndexPage"…...

npm介绍

npm&#xff08;Node Package Manager&#xff09;是 Node.js 的默认包管理工具&#xff0c;用于管理 JavaScript 和 Node.js 项目的依赖关系。它既是一个包管理工具&#xff0c;又是一个在线仓库&#xff0c;开发者可以通过它分享和下载开源的 JavaScript 库和工具。npm 是世界…...