MDETR 论文报告

MDETR - Modulated Detection for End-to-End Multi-Modal Understanding

  • MDETR - Modulated Detection for End-to-End Multi-Modal Understanding
    • 发现问题
    • 主要贡献和创新点
    • 主要方法和技术
      • MDETR 的架构
      • 损失函数
        • 1. 框预测损失
        • 2. 软标记预测损失
        • 3. 对比对齐损失
        • 4. 总损失
    • 实验和结果
        • 预训练模型
        • 预训练超参数
        • 下游任务
    • 不足和改进


MDETR - Modulated Detection for End-to-End Multi-Modal Understanding 是一篇发表在 2021国际计算机视觉会议 (ICCV 2021) 上的论文,它提出了一种基于最新 DETR 检测框架的端到端调制检测器,将对象检测和自然语言理解整合到一个统一的端到端框架中,实现了 真正的端到端多模态推理。这样的一体化方法可以提高模型的性能,因为 整个系统可以在一个统一的目标函数下进行联合训练,促使模型更好地学习对象检测和下游任务之间的相互关系。

发现问题

​ 作者指出“多模态推理系统依靠预先训练的目标检测器从图像中提取感兴趣的区域。然而,这个关键模块通常用作黑匣子,独立于下游任务并在对象和属性的固定词汇上进行训练。这使得此类系统 很难捕获以自由形式文本表达的视觉概念的长尾。”

​ 在多模态推理系统中,“下游任务”通常是指根据图像和文本的信息来进行推理和回答问题的任务。“以自由形式文本表达的视觉概念的长尾”,是指有很多不常见的视觉概念,它们可以用各种不同的方式来用文本描述,但是它们的出现频率很低,而且很难用固定的词汇来表示。例如,如果用户输入的文本是“一只穿着西装的猴子在打电话”,它包含了猴子、西装和电话这三个对象,以及穿着和打电话这两个动作。这个视觉概念的长尾是指,这种组合在图像中很少出现,而且很难用一个固定的标签来表示,比如“猴子-西装-电话”。这样,如果一个多模态推理系统使用了一个预先训练的目标检测器,它可能无法识别出这个视觉概念,因为它可能不在目标检测器的词汇表中。这就导致了多模态推理系统的性能下降,因为它无法根据图像和文本的信息来进行推理和回答问题,所以可能无法完成下游任务。

​ 对上文通俗的理解就是,多模态推理系统中的对象检测通常用作黑盒来检测图像中概念的固定词汇,然后进行多模态对齐。这种“管道”方法 限制了与其他模式作为上下文的协同训练,并限制下游模型只能访问检测到的对象,而不能访问整个图像,这样的多模态推理系统 无法识别以自由格式文本表达的概念的新颖组合

​ 作者还提到了最近的考虑了文本条件对象检测问题的一些工作,但是作者认为这些检测器 不是端到端可微分 的,因此 无法与下游任务协同训练

​ "端到端可微分"是指整个系统的每个组成部分都是可微分的,这意味着对于系统的输出,可以计算相对于输入的梯度(导数)。这对于使用梯度下降等优化算法来训练模型非常重要,因为这样可以在整个系统中进行端到端的反向传播,从而更新模型参数以最小化损失函数。

主要贡献和创新点

​ 调制检测方法是一种用于多模态理解的技术,它可以根据文本查询来检测图像中的对象或区域。调制检测方法的基本思想是,将文本查询作为一个调制信号,对图像进行变换,从而增强与查询相关的区域,抑制与查询无关的区域。然后,使用一个检测器来输出与查询对应的框或掩码。

​ DETR 是一种单模态的目标检测方法,它只需要输入图像,而不需要文本查询。DETR 使用 Transformer 来建模图像中的全局依赖关系,而不是使用文本来调制图像。DETR 的目标是 **输出图像中所有的目标,**而不是 根据文本来输出特定的目标

​ 论文的第一个贡献是,它提出了一种端到端的文本调制检测系统,叫做 MDETR。这个系统是基于最新的 DETR 检测框架的,它可以根据自然语言查询来检测图像中的对象,而不需要预训练的对象检测器或固定的词汇表。这样,MDETR 就可以直接从文本中学习视觉概念,而不受限于中间表示或标注信息。这是一种 创新 的方法,因为它可以实现 真正的端到端多模态推理,而不需要任何模态间的对齐或转换。

在这里插入图片描述

图1:查询“粉红大象”的 MDETR 输出。颜色不是分割掩模,而是像素的真实颜色。该模型在训练中从未见过粉色或蓝色大象。

​ 论文的第二个贡献是,它证明了调制检测方法可以无缝地应用于解决短语基础和指代表达理解等任务。这些任务都是要求模型能够根据文本来理解和定位图像中的对象或区域。MDETR 在这些任务上使用了两种数据集,一种是合成的,叫做 CLEVR-Ref+ ,一种是真实的,叫做 RefCOCOg 。MDETR 在这两个数据集上都取得了新的最先进的性能,说明了它的泛化能力和鲁棒性。

​ 论文的第三个贡献是,它表明了良好的调制检测性能自然会转化为下游任务性能,例如在视觉问答、引用表达分割和少样本长尾目标检测方面实现有竞争力的性能。这些任务都是要求模型能够根据文本和图像的交互来回答问题、分割区域或检测对象。MDETR 在这些任务上使用了三种数据集,分别是 VQA 2.0 ,PhraseCut 和 LVIS 。MDETR 在这些数据集上都表现出了优秀的性能,说明了它的多任务学习能力和适应性。

主要方法和技术

MDETR 的架构

​ 图 2 描述了 MDETR 的架构。MDETR 使用了一个基于 Transformer 的架构,它由一个交叉编码器和一个解码器组成。交叉编码器使用 Transformer 的编码器-编码器结构,将文本和图像两种模态进行融合,从而共同推理文本和图像。解码器使用 Transformer 的编码器-解码器结构,将交叉编码器的输出作为输入,输出图像中的对象或区域的边界框和与文本中的单词或短语对应的位置分布。

在这里插入图片描述

图 2:MDETR 使用卷积主干来提取视觉特征,并使用 RoBERTa 等语言模型来提取文本特征。两种模式的特征都被投影到共享的嵌入空间,连接并馈送到变换器编码器-解码器,该变换器编码器-解码器预测对象的边界框及其在文本中的定位。

  • 对图像的处理,通过卷积神经网络(卷积主干)进行编码,并将其展平,即将图像特征转换为一个平面向量。为了保留空间信息,将图像中的二维位置嵌入(即位置编码)加入到展平后的向量中,以便模型能够更好地理解图像中不同位置的信息。

    对应图 2 中的 CNN。卷积神经网络在计算机视觉任务中被广泛用于提取图像的特征。这些特征可以在图像中的不同层次上捕捉到边缘、纹理等信息。在目标检测等任务中,这些特征经过卷积操作,然后通过一个或多个全连接层,最终被展平为一个一维向量。

  • 对文本的处理,使用预训练的 Transformer 语言模型对文本进行编码,生成与输入图像大小相同的隐藏向量序列。

    对应图 2 中的 RoBERTa。RoBERTa 是一个预训练的 Transformer 模型,专注于自然语言处理任务。它采用了与 BERT(Bidirectional Encoder Representations from Transformers)相似的架构,但通过修改训练方式和超参数来改进性能。在论文中,RoBERTa 用于对文本进行编码,生成隐藏向量序列。

  • 对图像和文本特征进行模态相关的线性投影,将它们映射到共享的嵌入空间,以便模型可以在这个共享的嵌入空间中理解图像和文本之间的关系。

    线性投影操作与图 2 中的 Linear 操作对应。Linear 操作通常用于进行线性变换,通过矩阵乘法和偏置项的加法,将输入数据映射到输出数据。线性投影操作的目的是将图像和文本特征映射到一个共享的嵌入空间,以便模型可以在这个共享的嵌入空间中理解图像和文本之间的关系。这有助于在后续的处理中实现对图像和文本的联合编码和理解。

    在图 2 中,矩形框(box)表示图像和文本特征在共享的嵌入空间中的融合或交互。

  • 将处理后的图像和文本特征向量在序列维度上连接成一个单一的序列,为后续处理提供输入。

    可以与图 2 中的 Concatenation(Concat)操作对应。Concatenation 操作通常用于将两个或多个向量在某个维度上连接在一起,形成一个更大的向量或序列。这种连接操作有助于模型同时考虑图像和文本信息,并将它们融合在一个共享的表示空间中,从而实现对图像和文本的联合理解。

  • 将生成的序列输入到一个称为交叉编码器的联合变压器编码器中,用于联合编码图像和文本信息。解码器的输出用于预测图像中实际对象的边界框。这是模型最终的目标,即从联合编码的图像和文本信息中提取并预测目标对象的位置信息。

损失函数

1. 框预测损失

MDETR 需要将模型预测的对象和真实的对象进行匹配,与 DETR 一样,使用二部图匹配来找到预测和地面实况目标之间的最佳匹配。二部图匹配是一种用来找到两个集合之间的最佳匹配的方法,它的目标是使得匹配的总成本最小。预测与目标框之间的 L1 和 GIoU 损失,就像在 DETR 中一样。

  • 预测与目标框之间的 L1 损失,它是一种用来 衡量两个边界框之间的差异 的函数,它的值越小,表示两个边界框越接近。

  • 预测与目标框之间的 GIoU 损失,它是一种用来 衡量两个边界框之间的重叠程度 的函数,它的值越大,表示两个边界框越重叠。

2. 软标记预测损失

​ 对于调制检测,与标准检测设置不同,作者 不关心为每个检测到的对象预测一个分类类别,而是预测原始文本中指代每个匹配对象的标记范围。软标记考虑到了标记位置的分布,而不是简单地对每个对象的分类结果进行硬标记(例如,对每个对象分配一个确定的类别),这意味着模型的任务是在文本中确定对象的位置范围。软标记分类损失如图 6 所示,这是一种非参数对齐损失。

在这里插入图片描述
图 6:软标记分类损失的图示。对于每个对象,模型预测输入序列中标记位置的分布。分布的权重应该均匀地分布在引用预测框的所有标记上。

​ 模型被训练以预测相应于对象的所有标记位置的均匀分布。例如,如果文本是“一只猫在沙发上睡觉”,那么模型应该预测出两个引用预测框,一个是猫,一个是沙发。对于猫这个对象,模型应该预测出一个分布,它的权重在“一只”和“猫”这两个标记上是相等的,而在其他标记上是零。对于沙发这个对象,模型应该预测出一个分布,它的权重在“沙发”和“上”这两个标记上是相等的,而在其他标记上是零。任何未与目标匹配的查询都被训练以预测“无对象”标签 ∅ ∅

3. 对比对齐损失

​ 对比对齐损失是一种参数化损失函数,强化了对齐的对象查询和标记之间的相似性。这额外的对比对齐损失确保了(视觉)对象的嵌入和其对应的(文本)标记在特征空间中比与不相关标记的嵌入更靠近。这一约束比软标记预测损失更强,因为它直接作用于表示,而不仅仅基于位置信息。

​ 更具体地说,考虑将最大标记数为 L L L 和最大对象数为 N N N。设 T i + T^+_i Ti+ 是给定对象 o i o_i oi 应与之对齐的标记集合,而 O i + O^+_i Oi+ 是与给定标记 t i t_i ti 对齐的对象集合。

​ 作者受 InfoNCE 的启发,所有对象的对比损失 通过每个对象的正标记数量进行标准化,写如下:
l 0 = ∑ i = 0 N − 1 1 ∣ T i + ∣ ∑ j ∈ T i + − l o g ( e x p ( o i T t j / τ ) ∑ k = 0 L − 1 e x p ( o i T t k / τ ) ) (1) l_0 = \sum^{N-1}_{i=0} \frac{1}{|T^+_i|} \sum_{j \in T^+_i} - log \left( \frac{exp(o^T_i t_j/\tau)}{\sum^{L-1}_{k=0}exp(o^T_it_k/\tau)} \right) \tag{1} l0=i=0N1Ti+1jTi+log(k=0L1exp(oiTtk/τ)exp(oiTtj/τ))(1)

​ 其中 τ \tau τ 是温度参数,论文中将其设置为 0.07。根据对称性,所有标记的对比损失(通过每个标记的正对象数量标准化)由下式给出:
l t = ∑ i = 0 L − 1 1 ∣ O i + ∣ ∑ j ∈ O i + − l o g ( e x p ( t i T o j / τ ) ∑ k = 0 N − 1 e x p ( t i T o k / τ ) ) (2) l_t = \sum^{L-1}_{i=0} \frac{1}{|O^+_i|} \sum_{j \in O^+_i} - log \left( \frac{exp(t^T_i o_j/\tau)}{\sum^{N-1}_{k=0}exp(t^T_io_k/\tau)} \right) \tag{2} lt=i=0L1Oi+1jOi+log(k=0N1exp(tiTok/τ)exp(tiToj/τ))(2)
​ 作者取这两个损失函数的平均值作为他们的对比对齐损失。对比对齐损失函数的作用是,让模型能够通过最小化损失值,来调整对象查询和标记的嵌入向量**,**使得对齐的对象查询和标记在嵌入空间中更加接近,而不对齐的对象查询和标记更加远离。

4. 总损失

​ MDETR 需要计算总损失,它是匹配后的所有对象的损失的平均值。总损失包括三个部分,分别是:

  • 框预测损失,它是匹配后的所有对象的 L1 损失和 GIoU 损失的和,它的目的是让模型能够准确地 预测出图像中的对象或区域的位置和大小
  • 软标记预测损失,它是匹配后的所有对象的软标记预测损失的和,它的目的是让模型能够准确地 预测出文本中的每个单词或短语对应的图像中的对象或区域
  • 对比对齐损失,它是一种参数化损失函数,它的目的是增强对齐的对象查询和标记之间的相似性。这种损失函数的作用是,让对齐的对象查询和标记在嵌入空间中更加接近,而让不对齐的对象查询和标记更加远离。

实验和结果

预训练模型

​ 使用预训练的 RoBERTa-base 作为文本编码器,它具有 12 个 Transformer 编码器层,每个层的隐藏维度为 768,多头注意力中有 12 个头。作者使用了 HuggingFace 的实现和权重。

​ 作者尝试了两个选项,最终选择探索 EfficientNet 家族作为骨干,使用的模型是通过 Noisy-Student 伪标记技术在大量未标记数据和 ImageNet 上训练的。作者选择了 EfficientNetB3,在 ImageNet 上的 Top 1 准确率为 84.1%,仅使用了 1200万个权重,以及 EfficientB5,在 3000 万个权重下达到了 86.1%的准确率。他们使用了 Timm 库提供的实现,并冻结了批标准化层。他们在 32 个 V100 GPU 上以有效批量大小为 64 进行了 40 个 epoch 的预训练,大约需要一周的时间进行训练。

预训练超参数

​ MDETR 遵循预训练然后微调的策略,首先在作者构建的合并数据集上进行 40 个 epoch 的训练,然后在相应的下游任务上进行微调。作者使用 AdamW 进行模型训练,这是 Adam 的一种变体,更适用于权重衰减。使用指数移动平均(EMA),衰减率为 0.9998,权重衰减为 1e−4。主干网络和 Transformer 的学习率分别为 1e−4 和 1e−5,持续 35 个 epoch 之后它们的学习率减小为原来的 1/10。对于语言模型的学习率,使用线性衰减和热身计划,它在总步数的前 1% 内线性增加到 5e−5,然后在训练的其余部分内线性减小回到 0。

下游任务

​ 作者在 4 个下游任务上评估了他们的方法:指称表达理解与分割、视觉问答和短语对齐。

​ 视觉问答的任务是给定一张图像和一个关于图像内容的问题,返回一个正确的答案。作者使用了 GQA 数据集,它包含了大量的图像、问题和答案,以及每个问题的类型和场景图。场景图是一种表示图像中对象、属性和关系的图结构。作者的方法是在预训练模型的基础上,对其进行微调,使其能够输出正确的答案和类型。作者的模型架构如图 4 所示,它包括了一个用于检测对象的解码器,以及一个用于预测问题类型和答案的查询。作者的模型使用了调制检测的技术,它可以根据问题的内容来调整对象的检测。作者的方法在 GQA 数据集上表现出了优异的效果,不仅超过了使用相同骨干网络的其他模型,而且超过了使用更大骨干网络和更多预训练数据的模型。

在这里插入图片描述

图 4:在 MDETR 预训练期间,模型被训练以检测问题中提到的所有对象。为了扩展到问题回答,除了将对象查询作为输入提供给变压器解码器外,还提供了特定于 QA 的查询。为不同的问题类型使用专门的头部。

短语对齐的任务是给定一些可能相关的短语,为每个短语找到对应的图像区域。作者使用了 Flickr30k entities 数据集,它包含了训练、验证和测试的划分,以及每个句子的短语和边界框的标注。作者将他们的方法与两种类型的现有方法进行了比较,一种是基于文本条件的检测模型,另一种是基于 Transformer 的视觉语言预训练模型。作者的方法在没有预训练的情况下,在验证集上的 ANY-BOX 设置中,相对于最先进的方法,在召回率的第一名方面提高了8.5个百分点。通过预训练,作者的方法在测试集上的 ANY-BOX 设置中,相对于最佳的模型,在召回率的第一名方面提高了12.1个百分点。

在这里插入图片描述

图 7:Flickr30k 数据集上的短语对齐示例

​ 指称表达分割的任务是给定一张图像和一个描述其中一个或多个对象的文本,返回一个表示这些对象位置的分割掩模。作者使用了 PhraseCut 数据集,它包含了来自 VG 的图像,以及每个指称表达的分割掩模。这些表达涉及了多种对象、属性和关系,使得任务很有挑战性。作者的方法分为两个阶段,第一阶段是在预训练模型的基础上,对其进行微调,使其能够输出正确的边界框;第二阶段是冻结网络的权重,只训练分割头,使其能够输出正确的分割掩模。作者使用了一个基于概率的方法来对边界框进行过滤和合并,根据它们是否与指称表达式匹配。作者的方法在该数据集上表现出了优异的效果,能够生成清晰的分割掩模。

在这里插入图片描述

图 8:phrasecut 数据集上的指称表达分割示例

​ 指称表达理解的任务是给定一张图像和一个描述其中一个对象的文本,返回一个表示该对象位置的边界框。作者提出了一个新的方法,不需要使用预先提取的边界框,而是直接预测边界框。作者使用了三个数据集,分别是 RefCOCO、RefCOCO+ 和 RefCOCOg,它们包含了不同类型的指称表达式。作者在预训练期间使用了多个对象的标注,而在微调和推理时只使用了一个对象的标注。作者使用了一个基于概率的方法来对边界框进行排名,根据它们是否与指称表达式匹配。在表 2 中报告结果,显示在所有数据集上相对于最先进水平的显著提高。

在这里插入图片描述

图 10:来自 RefCOCO、RefCOCO+ 和 RefCOCOg 数据集的示例。图(a)取自RefCOCO,图(b)取自RefCOCO+,图©和(d)取自RefCOCOg,其中表达式平均比 RefCOCO 和 RefCOCO+长得多,并且包含更多描述性语言。

在这里插入图片描述

表2:指称表达理解的准确性结果。CC 是指 Conceptual Captions [53],VG 是指 Visual Genome [24],SBU 是指 SBU Captions [41],COCO 是指 Microsoft COCO [30]。

不足和改进

​ 作者总结了 MDETR 的主要贡献,认为它是一种简单而有效的端到端多模态推理方法,它可以直接从文本中学习视觉概念,而不需要预训练的对象检测器或固定的词汇表。作者还展示了 MDETR 在多个下游任务和数据集上的优异性能,证明了它的有效性和优越性。

​ 关于 MDETR 的一些不足和改进方向如下:

  • MDETR 目前 只能处理单个文本查询和单张图像的情况,而不能处理多个文本查询或多张图像的情况。可以通过扩展模型的架构和损失函数来实现。

  • MDETR 目前 只能输出边界框,而不能输出更精细的掩码或关键点。可以通过引入更复杂的输出表示和损失函数来实现。

  • MDETR 目前 只能处理静态的图像,而不能处理动态的视频。可以通过 结合时序信息和注意力机制 来实现。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络之连接跟踪 conntrack

一 Linux网络之连接跟踪 conntrack k8s 有关conntrack的分析 ① 什么是连接跟踪 netfilter连接跟踪 conntrack 详述 思考:连接跟踪模块会对哪些协议进行跟踪?TCP、UDP、ICMP、DCCP、SCTP、GRE ② 为什么需要连接跟踪 没有连接跟踪有很多问题是不好解决的&a…

C语言-内存分配

内存分配 1. 引入 int nums[10] {0}; //对int len 10; int nums[len] {0}; //错是因为系统的内存分配原则导致的2. 概述 在程序运行时,系统为了 更好的管理进程中的内存,所以有了 内存分配机制。 分配原则: 2.1 静态分配 静态分配原…

解决top-k问题--堆排序

目录 TOP-K问题 堆排序 考虑以下情况: 1.在n个数里面找最大的一个数 2.在n个数里面找最大的两个数 3.在n个数中求前k大的数 为什么不用大根堆呢? 代码 时间复杂度 TOP-K问题 即求数据结合中前K个最大的元素或者最小的元素,一般情况下数…

使用Redis构建任务队列

文章目录 第1关:先进先出任务队列第2关:优先级任务队列第3关:定时任务队列 第1关:先进先出任务队列 编程要求 在Begin-End区域编写 add_task(task_name) 函数,实现将任务加入队列的功能,具体参数与要求如下…

论文阅读——Loss odyssey in medical image segmentation

Loss odyssey in medical image segmentation github:https://github.com/JunMa11/SegLossOdyssey 这篇文章回顾了医学图像分割中的20种不同的损失函数,旨在回答:对于医学图像分割任务,我们应该选择哪种损失函数? 首…

使用 Kettle 完成数据 ETL

文章目录 使用 Kettle 完成数据 ETL数据清洗数据处理 使用 Kettle 完成数据 ETL 现在我们有一份网站的日志数据集,准备使用Kettle进行数据ETL。先将数据集加载到Hadoop集群中,然后对数据进行清洗,最后加载到Hive中。 在本地新建一个数据集文…

解决vscode中html部分无法嵌套注释

不管是React项目还是Vue项目,相信你一定遇到过同样的问题,如果想要注释的结构内部也存在注释,那么编译器会报以下问题 使用 HTML-Comment 这个插件即可解决问题 选中需要注释的区域并根据系统输入快捷键,可以发现就算嵌套了注释…

【论文解读】角色动画的一致可控的图像到视频合成

论文:https://arxiv.org/pdf/2311.17117.pdf 代码:https://github.com/HumanAIGC/AnimateAnyone 图片解释:给定参考图像(每组中最左边的图像)的一致且可控的角色动画结果。我们的方法能够对任意角色进行动画处理&#…

人工智能原理复习--不确定推理

文章目录 上一篇不确定推理概述主观Bayes(贝叶斯)方法可信度方法证据理论下一篇 上一篇 人工智能原理复习–确定性推理 不确定推理概述 常识具有不确定性。 常识往往对环境有极强的依存性。 其中已知事实和知识是构成推理的两个基本要素,不确定性可以理解为在缺…

Makefile初学之谜之隐式规则

刚开始学习Make教程:https://makefiletutorial.vercel.app/#/docs/fancy-rules,里面有个sample: objects foo.o bar.o all.o all: $(objects)# These files compile via implicit rules foo.o: foo.c bar.o: bar.c all.o: all.call.c:echo "int…

python--自动化办公(Word)

python自动化办公之—Word python-docx库 1、安装python-docx库 pip install python-docx2、基本语法 1、打开文档 document Document() 2、加入标题 document.add_heading(总标题,0) document.add_heading(⼀级标题,1) document.add_heading(⼆级标题,2) 3、添加文本 para…

Spring IOC—基于XML配置和管理Bean 万字详解(通俗易懂)

目录 一、前言 二、通过类型来获取Bean 0.总述(重要) : 1.基本介绍 : 2.应用实例 : 三、通过指定构造器为Bean注入属性 1.基本介绍 : 2.应用实例 : 四、通过p命名空间为Bean注入属性 1.基本介绍 : 2.应用实例 : 五、通过ref引用实现Bean的相…

手机也能“敲”代码?

除了PC个人电脑外,很多电子产品也可以实现代码的编辑,比如智能手机。现在主流的手机操作系统只有两种,一种是大部分手机厂商选择的安卓系统,另外一种是苹果公司独创的ios操作系统。而Android系统是基于Linux开发的专属于移动设备的…

【Leetcode题单】(01 数组篇)刷题关键点总结03【数组的改变、移动】

【Leetcode题单】(01 数组篇)刷题关键点总结03【数组的改变、移动】(3题) 数组的改变、移动453. 最小操作次数使数组元素相等 Medium665. 非递减数列 Medium283. 移动零 Easy 大家好,这里是新开的LeetCode刷题系列&…

Java数据结构之《构造哈夫曼树》题目

一、前言: 这是怀化学院的:Java数据结构中的一道难度中等(偏难理解)的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题…

【蓝桥杯】翻硬币

翻硬币 思路&#xff1a; 其实有点贪心的意思&#xff0c;依次比较&#xff0c;不同就1&#xff0c;然后修改自己的字符串和下一个的字符串&#xff0c;再匹配。 #include<iostream> #include<string> using namespace std;string now,res;int main(void) {cin&g…

MQ - 消息系统

消息系统 1、消息系统的演变 在大型系统中&#xff0c;会需要和很多子系统做交互&#xff0c;也需要消息传递&#xff0c;在诸如此类系统中&#xff0c;你会找到源系统&#xff08;消息发送方&#xff09;和 目的系统&#xff08;消息接收方&#xff09;。为了在这样的消息系…

java高校实验室排课学生考勤系统springboot+vue

随着各高校办学规模的迅速扩大,学科专业的不断拓宽,传统的实验教学和实验室管理方法已经不能适应学校管理的要求,特别是化学实验室的管理,化学实验室仪器药品繁杂多样,管理任务繁重,目前主要使用人工记录方法管理,使用不便,效率低下,而且容易疏漏.时间一长将产生大量的文件和数…

【面试经典150 | 二分查找】搜索二维矩阵

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;二分查找 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等…

c# OpenCV 读取、显示和写入图像(二)

读取、显示和写入图像是图像处理和计算机视觉的基础。即使在裁剪、调整大小、旋转或应用不同的滤镜来处理图像时&#xff0c;您也需要先读取图像。因此&#xff0c;掌握这些基本操作非常重要。 imread()读取图像imshow()在窗口中显示图像imwrite()将图像保存到文件目录里 我们…
最新文章