NeurIPS 2024 | 像素级LLM实现图像视频理解、生成、分割和编辑大统一(昆仑万维等)
Accepted by NeurIPS 2024
文章链接:https://arxiv.org/pdf/2412.19806
项目链接:https://vitron-llm.github.io/
Github链接:https://github.com/SkyworkAI/Vitron
亮点直击
首次提出了一种通用的视觉多模态大语言模型(MLLM)——VITRON,能够在像素级对图像和视频进行理解、生成、分割和编辑。
引入了一种更高效的LLM到解码器的指令传递机制,结合了离散文本和连续信号嵌入。
提出了针对多模态大语言模型的像素级视觉语言时空对齐学习,使其能够达到最优的细粒度视觉能力。
设计了一种协同模块,最大化任务持久的细粒度视觉特征在所有不同视觉任务之间的共享能力,通过此机制,VITRON的性能超越了现有的最先进(SoTA)专业模型。
总结速览
解决的问题
-
多模态大语言模型(MLLMs)在支持多任务方面缺乏统一性,特别是图像和视频的联合处理能力不足。
-
模型在细粒度像素级理解上存在局限,无法实现高精度的视觉区域定位与编辑。
-
视觉功能单一,难以支持从视觉理解到生成、分割、编辑等全方位任务。
-
多任务间存在协作性不足,任务间可能互相影响,难以实现统一优化。
**提出的方案 **
-
统一架构设计:VITRON 采用基于 LLM 的框架,前端集成图像、视频和像素级区域视觉编码器,后端结合最先进的图像与视频模块,支持视觉理解、生成、分割和编辑等多任务。
-
混合指令传递方法:结合离散文本指令与连续信号嵌入,确保 LLM 决策能够精确传递到后端模块。
-
跨任务协作模块:通过增强任务不变的细粒度视觉特征共享,提升不同视觉任务间的协同能力。
-
精细化像素级时空对齐学习:设计基于像素的视觉语言对齐与时空预测调优,增强模型的细粒度视觉感知能力。
-
对抗训练:将任务特定特征与任务不变特征解耦,提升跨任务间的表现稳定性。
应用的技术
-
视觉-语言对齐学习:通过前端编码器与 LLM 的对齐优化,实现视觉与语言模态的深度协同。
-
任务调用定向调优:训练 LLM 以更好地生成适合后端模块的调用指令。
-
嵌入对齐调优:优化 LLM 与后端模块间的信号嵌入对齐,提高信息传递精度。
-
多模态协作训练:融合像素级感知与时空预测,通过细粒度感知与对抗学习实现任务间协同优化。
达到的效果
-
在图像和视频任务上实现了真正的统一支持,从静态图像到动态视频均表现出色。
-
覆盖 12 项视觉任务,基于 22 个数据集的实验表明,VITRON 在多任务性能上与专用的单任务模型相媲美,甚至超越了某些任务的最优模型。
-
实现了从视觉理解到生成、分割、编辑等全流程的高效支持,展现了卓越的多模态通用能力。
-
模型设计的各项组件通过分析验证了其有效性,为未来多模态模型的进一步发展提供了参考。
VITRON架构
VITRON采用了现有流行多模态大语言模型(MLLMs)中最常见的“编码器-LLM-解码器”架构范式。整体框架如下图2所示,包含三个关键模块:
-
前端视觉和语言编码器;
-
用于语义理解和文本生成的中心LLM;
-
后端解码器模块,用于用户响应和视觉操作。
前端视觉-语言编码
对于图像和视频,分别使用CLIP ViT-L/14@336px作为编码器。视频编码器独立处理每一帧,并通过在时间维度上进行平均池化来生成整体的时间表示特征。随后,采用区域像素感知视觉提取器作为草图编码器,用于用户交互(如点击、绘制框或多边形、涂鸦)。主要参考[125],使用来自用户输入的mask区域的基于对象的表示,这不仅编码了像素级视觉特征,还收集了每个区域的空间位置信息。这些区域特征与对象区域的二进制空间几何掩膜一起进行池化,生成的嵌入特征被使用。随后,这些多模态特征表示通过线性投影传递给LLM。
核心LLM
在VITRON中,LLM作为核心代理。遵循最常见的实践 [15, 94, 128],使用Vicuna(7B,版本1.5)。LLM处理来自语言和视觉模态的输入,以执行语义理解和推理,然后做出决策。对于视觉理解任务,LLM直接为用户输出文本响应。同时,LLM还需向后端模块传递信号和指令,引导其执行超越文本生成的更复杂任务,例如视觉分割、生成和编辑。
正如前文所强调的,LLM有效、精确传递信息的能力对复杂多模态任务的性能至关重要。本文提出了充分结合两种常见信息传递方法的优点:离散文本指令和连续信号嵌入。前者有助于准确调用不同的后端模块(得益于LLM在任务调度中的能力),而后者补充了无法通过离散文本直接描述的丰富模态保留视觉特征。如前面图2所示,LLM输出以下内容:
-
用户的文本响应;
-
模块调用的文本指令;
-
特殊token的特征嵌入。
特征嵌入分为任务特定特征和任务不变的细粒度视觉-语言特征。这些文本指令和特征嵌入被传递给后端模块。
后端视觉专家
为了使MLLM具备多种视觉任务能力,将一系列独立的视觉专家集成到LLM中。
-
对于图像生成和编辑,集成了基于扩散模型的GLIGEN。
-
对于图像和视频分割,选择了SEEM。
-
对于视频生成,分别使用ZeroScope和I2VGen-XL处理文本到视频和图像到视频任务。
-
最后,对于视频编辑功能,集成了StableVideo。
LLM的文本指令首先确定调用哪个任务模块;同时,特征嵌入被传递给对应模块的特征编码器,以协助任务执行。特别设计了一种结构化调用模板,包括:
-
模块名称;
-
调用命令;
-
区域(可选),用于特定任务需要的细粒度视觉特征。
特征嵌入包括任务特定特征和任务不变的细粒度特征。这一设计旨在实现特征解耦,并尽可能广泛地在所有任务中共享任务不变的细粒度特征,以促进不同任务之间的协同作用。
像素感知的协同视觉-语言理解调优
通过VITRON框架,在训练中设置了三个阶段的目标:首先赋予模型基本的多模态能力(理解和生成);接着进行精细化的视觉定位指令调优,增强模型的像素级感知能力;最后执行跨任务协同学习,最大化所有任务之间共享的细粒度特征。
基本多模态理解与生成技能训练
在训练的第一阶段,主要目标是为MLLM赋予基本的多模态理解和生成能力,包括前端的编码器与LLM对齐以及后端的LLM与解码器对齐。使用了以下三种训练方法:
-
总体视觉-语言对齐学习
这一过程旨在确保输入的视觉和语言特征被映射到统一的特征空间中。遵循先前的通用实践,利用包含“图像-描述”对(如CC3M)、“视频-描述”对(如Webvid)、以及“区域-描述”对(如RefCOCO)的数据集。在输入图像、视频或特定视觉区域时,调用冻结的LLM生成与参考描述一致的文本描述或标题。 -
文本调用指令调优
此训练步骤的目的是让系统具备精准执行指令的能力,使LLM能够生成适当且正确的调用文本指令。为此,收集了总计55,000+的指令调优样本。 -
面向嵌入的解码器对齐调优
除了使用显式的文本指令调用下游模块外,还需要将信号特征嵌入(来自LLM)输入到模块中。参考[114],通过解码侧投影层对齐特征嵌入与所有视觉模块输入编码器,即通过最小化特征距离来实现对齐。
精细化时空视觉定位指令调优
一个通用的视觉模型需要具备像素感知的视觉理解能力,适用于图像和视频。因此,为VITRON提出了精细化的时空视觉定位指令调优。核心思想是使LLM能够定位图像的精细空间性以及视频的详细时间性。提供了以下三个学习方面:
-
图像空间定位
考虑到LLM本身只能输出文本,设计了响应机制,使其生成相应的边界框区域。关注两类任务:定位图像描述和参照图像分割。 -
视频时空定位
对于视频,LLM需要识别空间区域并在视频的时间上下文中对其进行定位,本质上是实现视频追踪。类似地,探索了定位视频描述和参照视频追踪等任务。 -
基于定位的视觉问答 (Grounding-aware Vision QA) 上述定位任务仅触及视觉感知的低层次方面。然而,在许多场景下,要求LLM具备更高阶、深入的视觉推理能力,这需要建立在基础的像素级定位能力之上。因此,我们进一步引入了基于定位的视觉问答(Grounding-aware Vision QA),包括图像问答(Image-QA)和视频问答(Video-QA)。通过这些任务,LLM能够在已定位的结果基础上进行语义层次的问答。
跨任务协同学习
作为通用模型,直接调用不同的专家模块会引发一个关键问题:如何确保不同模块(任务)之间协同工作?如果没有这种协作,将它们整合到一个复合系统中将毫无意义。为了解决这个问题,提出将信号特征嵌入分解为任务特定特征和任务无关的细粒度特征。
直观上,由于所有视觉任务都是细粒度的,任务无关的细粒度特征在不同任务之间共享得越广泛,各任务之间的互惠性就越强,从而获得更大的协同效应。因此,引入了一个跨任务协同学习模块,如下图3所示。
对抗训练用于特征解耦
采用对抗训练来解耦任务特定特征和任务无关特征。具体而言,首先让不同的视觉专家骨干网络根据这两类特征(通过拼接)进行任务预测。同时,引入一个第三方判别器(充当分类器),仅基于共享特征表征来判断当前任务是哪一类。
理想情况下,一旦判别器无法准确识别任务类型,说明共享特征已经被最大程度纯化,并且可以广泛应用于各个任务之间,从而实现真正的跨任务协同效应。
实验
现在尝试量化 VITRON 在四个视觉任务组上的性能,这些任务覆盖了 12 个任务和 22 个数据集。所有 VITRON 的训练均在 10×A100 (80G) GPU 上进行。为了确保公平比较,所有后续实验均采用与基线系统相同或相似的设置,并按照既定实践进行评估。
视觉分割结果
图像分割
下表 2 显示了在三个数据集 RefCOCO、RefCOCO+ 和 RefCOCOg 上的图像分割结果。与多个重要模型进行了比较,包括最新的非 MLLM 方法以及 MLLM 基线模型 NExT-Chat。显然,尽管 VITRON 在 RefCOCO Val 和 TestA 数据集上略逊于 NExT-Chat,但在其余数据集上表现优越。
视频分割
对于视频分割,我们研究了两个任务:视频空间定位(带边界框)和视频目标分割(又称视频跟踪,带掩码)。下表 3 展示了 VITRON 与当前最先进(SoTA)视频 MLLM 在视频空间定位任务上的比较。可以看出,VITRON 显著优于 PG-Video-LLaVA。下表 4 显示了 VITRON 与一些 SoTA 系统在视频跟踪任务上的比较,其中我们的系统继续表现出卓越的性能。
细粒度视觉理解结果
接下来,我们评估 VITRON 在细粒度视觉理解任务中的能力,主要关注图像和视频的区域级任务。
区域级图像理解 我们在图像指代表达理解和图像区域描述等任务上测试了 VITRON。表 5 中的比较和结果表明,VITRON 在多个数据集和指标上超越了最佳基线模型,证明其在图像细粒度语义理解上的强大和准确性。
上述两个任务仅关注模型在区域级别上的识别能力。进一步地,我们深入评估了模型对图像语义理解的能力,特别是通过基于图像的视觉问答(VQA)任务。这些任务能够有效反映模型对图像深层语义内容的理解能力。下表 6 显示了基于图像的 VQA 在六个数据集上的结果。主要比较了两组模型:一组具有像素级视觉对齐能力,另一组没有。结果表明,具备细粒度对齐能力的模型在任务性能上表现更强,这表明细粒度对齐有助于更深入的语义理解。值得注意的是,VITRON 在评估的模型中表现出最高的性能。
区域级视频理解 同样地,对于视频,我们评估了区域级视频理解能力。在图像观察的基础上,我们直接进行了视频问答(QA)任务。下表 7 展示了在四个代表性数据集上的视频 QA 结果。有趣的是,虽然 PG-Video-LLaVA 具有视频对齐能力,但其表现并未优于缺乏对齐能力的 Video-LLaVA。然而,VITRON 实现了更优异的性能。这间接证明了我们的系统具备更准确的视频对齐能力(如下表 8 所示),从而促进了更好的视频语义理解。
视觉生成结果
本文评估了系统在视觉生成任务中的能力,重点关注三种最具代表性的生成任务类型:文本生成图像(text-to-image generation)、文本生成视频(text-to-video generation)和图像生成视频(image-to-video generation)。这些任务广泛覆盖了图像生成的需求。下表 8、表 9 和表 10 展示了 VITRON 与其他最新技术(SoTA)系统的比较结果,包括 MLLM 和非 MLLM 的生成器。结果清楚地表明,VITRON 在所有三种任务中均表现优异。例如,在文本生成图像和文本生成视频任务中,VITRON 的性能优于 NExT-GPT。同样,在图像生成视频任务中,VITRON 超越了 SoTA 基线 VideoCrafter1,展现了更出色的结果。
视觉编辑结果
图像编辑
使用了 MagicBrush 数据集,该数据集通过需要一系列复杂编辑操作的查询挑战模型。这些编辑操作包括移除、更改、修复和添加元素。目前尚无支持图像编辑的 MLLM 系统,因此我们的比较仅限于非 LLM 的专业系统。下表 11 展示了不同模型在各种指标上的表现。VITRON 在所有指标上均表现更强,表明其在图像编辑任务中的稳定能力。
视频编辑
对于视频编辑,当前社区缺乏像图像编辑那样的标准化基准和评估方法。因此,选择了手动评估方法。要求不同的视频编辑系统基于相同的查询编辑相同的视频,之后五位评审员对编辑过的视频进行评分。评估主要关注 1) 目标内容修改的成功与否,2) 非目标内容的忠实度/保真度。下表 12 展示了视频编辑的手动评估结果。显然,VITRON 在这两个方面均优于两个基线系统,展示了卓越的视频编辑能力。随后,可视化了 VITRON 视频编辑的过程。
讨论
本文通过广泛的定量比较展示了 VITRON 的整体效能。现在进一步探讨系统如何以及为何能够进步,通过深入分析进行探索。
离散文本指令还是连续信号嵌入,哪种更优?
首先,我们探索了不同的消息传递机制,以确定离散文本指令是否更有利,或者连续信号嵌入是否更适合构建多模态通用模型。同时,我们验证了所提出的混合消息传递方法的优缺点。在 6 个任务上进行测试,比较了使用混合方法(默认设置)、没有信号嵌入和没有文本指令的 VITRON 任务表现,以及后端任务模块的成功执行率。下图 4 展示了结果。如图所示,整体上,使用这两种方法的场景性能始终更好,这证实了我们的混合模式的有效性。同时,我们发现文本指令的方法更有利于后端模块的成功执行,但软特征嵌入似乎在特定任务表现方面更有用。
每种精细视觉对齐学习的贡献有多大?
接下来,验证了在中提出的不同精细视觉对齐学习策略的具体贡献。图 5(顶部的 4 个与图像任务相关,底部的 4 个与视频任务相关)展示了当移除某个学习策略时对性能的影响。总体而言,这 3 种精细视觉对齐学习策略对不同的下游任务至关重要。例如,对齐和引用分割任务直接影响精细视觉识别任务,而针对对齐的视觉问答调优则显著提升认知层次的问答任务。这验证了我们提出的精细视觉对齐调优策略的有效性。
VITRON 是否真的实现了跨任务协同?
最后,探讨了本文的系统是否能够充分支持跨任务协同。根据表 2 至表 12 中关于“协同模块”消融实验的结果,我们可以观察到协同学习机制确实对整体性能产生了积极影响。在下图 6 中,进一步研究了不同任务之间是否存在协同作用及其合作关系。为了便于研究,考虑了任务之间的一对一映射关系,逐一研究任务对之间的合作。显然,不同任务之间的合作效应有所不同。那些更加依赖精细视觉特征的任务或骨干模块获得了更显著的改进。这也证明了协同学习模块可以成功促进跨任务协同。
结论
VITRON,一种统一的像素级视觉大语言模型,能够无缝理解(感知和推理)、生成、分割(对齐和追踪)以及编辑(修补)图像和视频。进一步介绍了一种新的混合消息传递方法,结合了离散文本指令和连续信号嵌入,以确保精确的功能调用。此外,VITRON 采用像素级时空视觉-语言对齐来增强其精细视觉能力。同时,开发了跨任务协同模块,以优化任务无关的精细视觉特征的使用,提升各类视觉任务之间的协同作用。在 22 个数据集上的 12 个视觉任务中,VITRON 展现了在视觉分割、精细视觉理解、生成和编辑等方面的广泛能力。总体而言,本研究展示了构建一个视觉-语言通用系统的巨大潜力,推动向更统一的人工智能迈进。
参考文献
[1] VITRON: A Unified Pixel-level Vision LLM for Understanding, Generating, Segmenting, Editing
相关文章:

NeurIPS 2024 | 像素级LLM实现图像视频理解、生成、分割和编辑大统一(昆仑万维等)
Accepted by NeurIPS 2024 文章链接:https://arxiv.org/pdf/2412.19806 项目链接:https://vitron-llm.github.io/ Github链接:https://github.com/SkyworkAI/Vitron 亮点直击 首次提出了一种通用的视觉多模态大语言模型(MLLM&…...

中药和西药的区别
中药和西药的区别 一、定义与来源 (一)中药 中药主要是在中国传统医学理论指导下用于预防、诊断、治疗疾病或调节人体机能的药物。它的来源广泛,包括植物药、动物药、矿物药等。植物药是中药的主要组成部分,例如人参࿰…...

Spring Security(maven项目) 3.0.2.4版本
前言: 通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往…...

【Ubuntu】安装华为的MindSpore
目录 1 安装Anaconda 2 更换国内源 3 安装MindSpore 1 安装Anaconda 2 更换国内源 具体方法如下: 打开命令行 cmd 工具,输入以下命令。 ① Conda 换源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ c…...

【模型】Qwen2-VL 服务端UI
1. 前言 最近在测试VLM模型,发现官方的网页demo,代码中视频与图片分辨率可能由于高并发设置的很小,导致达不到预期效果,于是自己研究了一下,搞了一个简单的前端部署,自己在服务器部署了下UI界面࿰…...

计算机网络•自顶向下方法:网络层介绍、路由器的组成
网络层介绍 网络层服务:网络层为传输层提供主机到主机的通信服务 每一台主机和路由器都运行网络层协议 发送终端:将传输层报文段封装到网络层分组中,发送给边缘路由器路由器:将分组从输入链路转发到输出链路接收终端࿱…...

安卓11 SysteUI添加按钮以及下拉状态栏的色温调节按钮
最近客户想要做一个台灯产品,需要实现 串口调节台灯功能 ,其中包括 亮度调节 色温调节 开关 三个功能 话不多说,贴代码 diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml old mode 100644 new …...

多个线程处理不同的数据,等线程都完成后再进行下一步操作
现在有三个任务,三个任务之间没有关联关系,但是第四个任务要等前三个完成之后才能进行,于是使用多线程完成前三个任务节省时间 示例代码: public void saveDataByOnlineTimeNew(LocalDateTime startTime, LocalDateTime endTime) {Objects.requireNonNull(startTime, "开…...

聆听音乐 1.5.9 | 畅听全网音乐,支持无损音质下载
聆听音乐手机版是面向广大音乐爱好者的移动应用程序,用户可以随时随地通过手机享受丰富的音乐资源。它提供了多种魅力功能,让用户在手机上畅享更舒适的音乐体验,每位用户都能享受精彩纷呈的收听体验。此外,软件还支持无损音质音乐…...

Rust 基础入门指南
Rust 基础入门指南 1. Rust 语言概述 Rust 的历史与设计理念 Rust 是由 Mozilla 研究院的 Graydon Hoare 于2010年开始创建的系统编程语言。其设计目标是创建一种安全、并发、实用的编程语言,特别关注内存安全和并发性。 Rust 的核心设计理念包括: …...

青少年编程与数学 02-006 前端开发框架VUE 03课题、编写APP组件
青少年编程与数学 02-006 前端开发框架VUE 03课题、编写APP组件 一、组件二、VUE中的组件三、APP组件四、应用示例1. App.vue - 根组件2. HelloWorld.vue - 子组件3. main.js - 应用入口文件4. router/index.js - 路由配置文件5. index.html - HTML入口文件6. package.json - 项…...

基于Java的银行排号系统的设计与实现【源码+文档+部署讲解】
目 录 内容提要 1. 引言 2. 系统分析 2.1 系统初步调查 2.2 系统可行性分析 2.2.1 经济可行性 2.2.2 操作可行性 2.2.3 技术可行性 2.3 系统开发环境概述 2.3.1 硬件环境 2.3.2 软件环境 2.4 系统需求分析 2.4.1 业务流程分析 2.4.2 系统体系结构设计 2.4.3 系统逻辑模型 2.5 …...

linux-26 文件管理(四)install
说一个命令,叫install,man install,install是什么意思?安装,install表示安装的意思,那你猜install是用来干什么的?猜一猜干什么的?安装软件,安装第三方软件,错…...

VS2015中使用boost库函数时报错问题解决error C4996 ‘std::_Copy_impl‘
在VS2015中使用boost库函数buffer时遇到问题,其他函数定义均能执行,当加上bg::buffer(参数输入正确);语句后就报如下错误: 错误 C4996 std::_Copy_impl: Function call with parameters that may be unsafe - this call relies…...

pikachu靶场--目录遍历和敏感信息泄露
pikachu靶场—目录遍历和敏感信息泄露 目录遍历 概述 在web功能设计中,很多时候我们会要将需要访问的文件定义成变量,从而让前端的功能便的更加灵活。 当用户发起一个前端的请求时,便会将请求的这个文件的值(比如文件名称)传递到后台,后台再…...

植物大战僵尸杂交版3.0.2版本
更新内容 植物大战僵尸杂交版3.0.2版本的更新内容如下: • 修复BUG: • 游戏内贴图错乱的BUG。 • 无尽模式卡死的BUG。 • 卡牌模仿者的一系列BUG。 • 干扰车可能同时出现多辆的BUG。 • 冒险模式部分关卡无法过关的BUG。 • 新增内容…...

kafka怎么保证顺序消费?
kafka怎么保证顺序消费? 1. 分区内的顺序保证2. 并发消费3. 实现顺序消费的策略4. 注意事项 kafka创建 topic 的时候没有指定分区数量,那么默认只会有一个分区。如果你想要创建一个具有多个分区的 topic,你可以在创建 topic 的命令中指定 --p…...

Makefile 模板 --- 内核模块
内核模块模板 驱动源码同级目录下 #******************************************************************************* # xxx Co., Ltd. All Right Reserved. # Author : # Version : V1.0.0 2020.10.21 # Description : # Note : gaoyang3513163.co…...

仓库叉车高科技安全辅助设备——AI防碰撞系统N2024G-2
在当今这个高效运作、安全第一的物流时代,仓库作为供应链的中心地带,其安全与效率直接关系到企业的命脉。 随着科技的飞速发展,传统叉车作业模式正逐步向智能化、安全化转型,而在这场技术革新中,AI防碰撞系统N2024G-2…...

计算机视觉CV期末总复习
1.计算机视觉基础 数字图像表示 二值图像 仅包含黑白两种颜色的图像,只使用1个比特为(0黑或1白)表示 彩色图像:分不同的颜色空间 gray灰度图像 每个像素只有一个采样颜色,取值范围0--255,为8比特位&a…...

【微信小程序获取用户手机号
微信小程序获取用户手机号有2种,一种是前端自己解密,一种是获取后发给后端,后端去解密 重点:要在微信公众平台设置里面绑定微信开放平台账号,不然反解不出来用户手机号上代码: <button style"font-size: 16px;" open-type"getPhoneNumber" getphonenumb…...

WFP Listbox绑定数据后,数据变化的刷新
Listbox绑定数据通过ItemsSource来的,如果绑定的是普通的List<数据>,不会自己刷新。 使用ObservableCollection集合 解决问题的方法: 将数组替换为 ObservableCollection ObservableCollection 是专为绑定设计的集合类型,可以通知 W…...

Android Camera压力测试工具
背景描述: 随着系统的复杂化和业务的积累,日常的功能性测试已不足以满足我们对Android Camera相机系统的测试需求。为了确保Android Camera系统在高负载和多任务情况下的稳定性和性能优化,需要对Android Camera应用进行全面的压测。 对于压…...

【华为OD-E卷 - 最优资源分配 100分(python、java、c++、js、c)】
【华为OD-E卷 - 最优资源分配 100分(python、java、c、js、c)】 题目 某块业务芯片最小容量单位为1.25G,总容量为M*1.25G,对该芯片资源编号为1,2,…,M。该芯片支持3种不同的配置,分…...

字符串格式时间(HH-MM)添加间隔时间后转为HH-MM输出
转换时间代码如下所示 #include <iostream> #include <iomanip> #include <sstream>//添加时间转换为时间 std::string addMinutesToTime(const std::string& timeStr, int minutesToAdd) {int hours, minutes;char delimiter;//解析输入时间std::istri…...

SQL 基础教程 - SQL ORDER BY 关键字
SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集进行排序。 SQL ORDER BY 关键字 ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。 ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。 SQL ORD…...

STM32 软件I2C读写
单片机学习! 目录 前言 一、软件I2C读写代码框架 二、I2C初始化 三、六个时序基本单元 3.1 引脚操作的封装和改名 3.2 起始条件执行逻辑 3.3 终止条件执行逻辑 3.4 发送一个字节 3.5 接收一个字节 3.5 发送应答&接收应答 3.5.1 发送应答 3.5.2 接…...

neo4j学习笔记
图数据库 图数据库是基于图论实现的一种NoSQL数据库,其数据存储结构和数据查询方式都是图论为基础的,图数据库主要用于存储更多的连接数据。 图论(GraphTheory)是数学的一个分支。图论以图为研究对象,图论的图是由若干…...

【动手学电机驱动】STM32-MBD(2)将 Simulink 模型部署到 STM32G431 开发板
STM32-MBD(1)安装 STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署 【动手学电机驱动】STM32-MBD(2)Simulink 模型部署 1. 软硬件条件和环境测试1.1 软硬件条件1.2 开发环境测试 2. 创建基于 STM32 处理器…...

Nginx代理本地exe服务http为https
Nginx代理本地exe服务http为https 下载NginxNginx命令exe服务http代理为https 下载Nginx 点击下载Nginx 下载好之后是一个压缩包,解压放到没有中文的路径下就可以了 Nginx命令 调出cmd窗口cd到安装路径 输入:nginx -v 查看版本 nginx -hÿ…...