【LMM 003】生物医学领域的垂直类大型多模态模型 LLaVA-Med

论文标题:LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day
论文作者:Chunyuan Li∗, Cliff Wong∗, Sheng Zhang∗, Naoto Usuyama, Haotian Liu, Jianwei Yang Tristan Naumann, Hoifung Poon, Jianfeng Gao
作者单位:Microsoft
论文原文:https://arxiv.org/abs/2310.03744
论文出处:–
论文被引:75(12/31/2023)
论文代码:https://github.com/haotian-liu/LLaVA,824 star

Abstract

会话生成式人工智能在增强生物医学从业人员的能力方面前景广阔,但目前的研究主要集中在单模态文本上。多模态对话式人工智能利用公共网络中的数十亿图像-文本对,取得了快速进展,但这种通用领域的视觉语言模型在理解生物医学图像并与之对话方面仍显不足。在本文中,我们提出了一种低成本高效率的方法来训练视觉语言对话助手,它可以回答生物医学图像的开放式研究问题。其主要思路是利用从 PubMed Central 提取的大规模、广覆盖的生物医学图文描述数据集,使用 GPT-4 对来自描述的开放式指令数据进行自我指导,然后使用新颖的课程学习方法对大型通用域视觉语言模型进行微调。具体来说,该模型首先利用图像-描述对(image-caption pair)学习对齐生物医学词汇,然后利用 GPT-4 生成的指令遵循数据学习掌握开放对话语义,大致模拟了非专业人员逐步掌握生物医学知识的过程。这使得可以在 15 个小时内(使用 8 卡 A100)训练出大型生物医学语言和视觉助理(LLaVA-Med)。LLaVA-Med 具备出色的多模态会话能力,可以按照开放指令协助回答生物医学图像问题。在三个标准的生物医学视觉问题解答数据集上,微调后的 LLaVA-Med 在某些指标上优于以前的监督式先进技术。

1 Introduction

在一般领域中,并行图像-文本数据非常丰富,例如网络图像及其相关描述(captions)。正如多模态 GPT-4 [32] 和 LLaVA [24] 等开源项目所证明的那样,生成式预训练已被证明能有效利用这些并行数据进行自我监督的视觉语言建模。通过基于多模态输入对模型进行指令调优,使其与人类意图保持一致,由此产生的大型多模态模型(LMM)在图像理解和推理等各种面向用户的视觉语言任务中表现出很强的零样本任务完成性能,为开发通用多模态对话助手铺平了道路[2, 21, 9]。

虽然在一般领域取得了成功,但这种 LMM s 对生物医学场景效果较差,因为生物医学图像-文本对与一般 Web 内容有很大不同。因此,通用域视觉助手可能表现得像外行人,他会避免回答生物医学问题,或者更糟,产生不正确的响应或完整的幻觉。在生物医学视觉问答 (VQA) 中取得了很大进展,但以前的方法通常将问题表述为分类(例如,在训练集中观察到的不同答案之间),并且没有很好地配备开放式指令遵循。因此,尽管会话生成 AI 在生物医学应用方面显示出巨大潜力 [19, 30, 18],但当前的调查通常仅限于单模态文本。

本文介绍了生物医学大型语言和视觉助手(Large Language and Vision Assistant for BioMedicine,LLaVA-Med),这是首次尝试将多模态指令调优扩展到生物医学领域,用于生物医学多模态对话助手的端到端训练。在生物医学自然语言处理(NLP)应用[17 , 14 , 10 , 28]和生物医学视觉语言(VL)任务[15, 7, 38 , 49 , 8]中,针对特定领域的预训练已被证明是有效的。最近,PMC-15M[49]的建立使得大规模生物医学 VL 学习成为可能,PMC-15M 是一个广泛覆盖的数据集,包含从 PubMed Central1 提取的 1,500 万个生物医学图像-文本对。该数据集比下一个最大的公共数据集 MIMIC-CXR [15] 大两个数量级,并且涵盖了多种图像类型。LLaVA-Med 受到最近在指令调优(instruction-tuning)[34, 24]方面的工作启发,使用 GPT-4 从 PMC-15M 中的图像-文本对生成多样化的生物医学多模态指令遵循数据,并使用新颖的课程学习方法微调大型生物医学领域 VL 模型[24]。

具体来说,我们的论文有以下贡献:

  • Biomedical multimodal instruction-following data。我们提出了一个新颖的数据生成管道,通过从 PMC-15M 中抽取生物医学图像-文本对,并使用 GPT-4 仅从文本(成为预期输出)中创建指令,从而创建多样化(图像、指令、输出)实例。这不需要任何人工注释,并通过搭载 PMC-15,创建了一个极其多样化的可视化指令遵循数据集,涵盖了生物医学图像的所有研究成果。

  • LLaVA-Med。我们提出了一种新颖的课程学习方法(curriculum learning method),利用自身生成的生物医学多模态指令遵循数据集将 LLaVA [24] 适应于生物医学领域。具体来说,

    • 首先,对 LLaVA 进行微调,以便使用图像文本对对齐生物医学词汇(通用指令仅要求描述图像)。
    • 然后,使用自生成的指令遵循数据继续训练模型,以学习开放式会话语义。通过这种方式,使用 8 卡 A100 在 15 小时内完成了 LLaVA-Med 的训练。研究验证了特定领域指令调优的有效性,并揭示了将多模态会话助手应用于高价值垂直领域的最佳实践。在成熟的生物医学 VQA 数据集上,LLaVA-Med 的微调效果往往优于有监督的最先进技术(SoTA)。
  • Open-source。为促进生物医学多模态学习的研究,我们将向公众发布以下资产:生物医学多模态指令遵循数据集以及用于数据生成和模型训练的代码库。

2 Related Work

Biomedical Chatbots.

受 ChatGPT [31]/GPT-4 [32]的启发,以及开源指令调优大语言模型(LLMs)在通用领域的成功,人们开发了几种生物医学 LLM 聊天机器人,包括

  • ChatDoctor [47]
  • Med-Alpaca [12]
  • PMC-LaMA [45]
  • Clinical Camel [1]
  • DoctorGLM [46]
  • Huatuo [44]

它们使用开源的 LLM 进行初始化,并在定制的生物医学指令遵循数据集上进行微调。由此产生的 LLM 具有巨大的潜力,可在各种生物医学相关领域/环境中提供帮助,例如了解患者需求和提供明智建议。

据我们所知,Visual Med-Alpaca [39] 是目前唯一接受图像输入的多模态生物医学聊天机器人。尽管 Visual Med-Alpaca 和 LLaVA-Med 有着相似的输入输出数据格式,但它们在关键方面存在差异:

  • (i) 模型架构。LLaVA-Med 是一个端到端的神经模型,而 Visual Med-Alpaca 是一个将多个图像描述模型与 LLM 连接起来的系统,使用分类器来确定图像是否由生物医学字幕模型负责。文本提示随后将转换后的视觉信息与文本查询合并,使 Med-Alpaca 能够生成适当的回复。
  • (ii) 生物医学指令遵循数据。Visual Med-Alpaca 是在有限的生物医学主题领域的 54K 个样本上进行训练的,而 LLaVA-Med 则是在更多样化的样本集上进行训练的。

Biomedical Visual Question Answering.

根据生物医学图像建立能够回答问题的模型的自动化方法,可以为临床医生和患者提供支持。为了描述现有的生物医学 VQA 方法,我们对判别方法和生成方法进行了区分。就判别方法而言,VQA 被视为一个分类问题:模型从一组预定义的答案中进行预测。虽然判别方法性能良好,但它们处理的是封闭集预测[13],在推理中提供自定义答案集时需要减轻影响[22, 49, 8]。要实现开发能在野外回答开放问题的通用生物医学助手的目标,判别式方法是次优的。为此,人们开发了生成式方法来预测作为自由格式文本序列的答案 [5, 26, 41]。生成式方法用途更广,因为它们能自然地将封闭集问题作为候选答案为语言指令的特殊情况。

Model Architecture.

LLaVA-Med与[41]中的语言模型(LM s)前缀调整类似,都是通过一个新的可训练模块连接冻结图像编码器和因果关系 LM。在 [41] 中,使用三层 MLP 网络将视觉特征映射为视觉前缀,预训练的 LM 包括 GPT2-XL [37]、BioMedLM [42] 和 BioGPT [28],大小从 1.5B 到 2.7B 不等。相比之下,LLaVA-Med 使用线性投影和 7B LM [43 , 40]。最重要的是,[41]只考虑了标准的监督微调,并将精力集中在探索各种建模选择上。我们的主要贡献在于提出了一种新颖的数据生成方法,该方法使用 GPT-4,利用从 PubMed Central [49] 中提取的免费提供的广覆盖生物医学图像-文本对,对生物医学多模态指令遵循数据进行自我指导(self-instruct)。

3 Biomedical Visual Instruction-Following Data

目前缺乏多模态生物医学数据集来训练指令遵循助手。为了填补这一空白,我们通过机器-人工协同程序,从广泛存在的生物医学图像-文本对中创建了首个同类数据集。该数据集由概念对齐和指令遵循两部分组成,分别用于第 4 节所述的不同训练阶段。

Biomedical Concept Alignment Data.

对于生物医学图像 Xv 及其相关图像描述 Xc,我们抽取一个问题 Xq,要求描述该生物医学图像。通过 (Xv、Xc、Xq),我们创建了一个单轮指令遵循示例:

在这里插入图片描述

根据图像描述的长度,抽取的问题要么要求精确描述图像,要么要求详细描述图像。附录 A 提供了两份问题清单。实际上,在 PMC-15M 中,25% 的图像描述长度小于 30 个单词[49],因此我们以 30 个单词为分界点来决定选择哪个问题列表。我们从 PMC-15M 中抽取了 60 万对图片-文本。虽然这个数据集只提供了一个单一的任务指令,即图像描述,但它包含了来自原始 PMC-15M [49] 的多种多样且具有代表性的生物医学概念样本集。

Biomedical Instruction-Tuning Data.

为了使模型能够遵从各种指令,我们通过提示仅使用语言的 GPT-4,展示并策划了各种指令遵从数据,其中包括关于所提供生物医学图像的多轮对话。具体来说,在给定图片说明的情况下,我们在提示中设计指令,要求 GPT-4 以仿佛能看到图片的语气(尽管它只能看到文字)生成多轮问答。有时图片说明太短,GPT-4 无法生成有意义的问题和答案。为了提供更多有关图片的背景信息,我们还创建了一个提示,其中不仅包括图像描述,还包括提及图片的 PubMed 原始论文中的句子。我们还在提示中手动编辑了一些短片示例,以演示如何根据所提供的图像描述和上下文生成高质量的对话。有关提示和短片示例,请参见附录 B。为了收集图片说明及其上下文,我们对 PMC-15M 进行了过滤,以保留只包含一个情节的图片。从中,我们从五种最常见的成像模式中抽取了 60K 个图像-文本对: CXR(胸部 X 光)、CT(计算机断层扫描)、MRI(磁共振成像)、组织病理学和 gross(即宏观)病理学。然后,我们从 PubMed 原文中提取提及图像的句子,作为图像描述的附加上下文,其灵感来源于外部知识有助于泛化的观察结果 [20,25]

在这里插入图片描述

图 1 所示为指令遵循数据示例,图 2 为数据统计图。在迭代改进数据质量时,我们生成了三个版本的指令数据:

  • (i) 60K-IM。将内联提及(IM)作为上下文的前述数据集。类似大小的数据集(60K 个样本),在自我指令生成中不包含 IM。
  • (ii) 60K。在自构造生成中没有IM的类似大小(60K个样本)的数据集。
  • (iii) 10K。不含 IM 的较小数据集(10 个样本)。这些数据集用于在实验中消除我们的数据生成策略及其对训练有素的 LLaVA-Med 的影响。

在这里插入图片描述

4 Adapting Multimodal Conversational Models to the Biomedical Domain

我们采用 LLaVA(一种通用域多模态对话模型[24])作为初始通用域 LM,并根据生物医学域不断训练该模型。采用相同的网络结构,其中线性投影层连接视觉编码器和语言模型。对于 LLaVA-Med 模型的训练,我们采用了两个阶段的程序,如图 3 所示。

在这里插入图片描述

Stage 1: Biomedical Concept Feature Alignment.

为了在概念覆盖率和训练效率之间取得平衡,我们将 PMC-15M 筛选为 600K 个图像-文本对。我们采用天真扩展法将这些图像-文本对转换为指令遵循数据:指令只是提出了描述图像的任务。对于每个样本,给定语言指令和图像输入后,我们要求模型预测原始图像描述。在训练中,我们冻结视觉编码器和 LM 权重,只更新投影矩阵。这样,大量新的生物医学视觉概念的图像特征就能与预训练 LM 中的文本词嵌入保持一致。这一阶段可以理解为将对齐后的图像-文本词库扩展到生物医学领域。

Stage 2: End-to-End Instruction-Tuning.

我们只冻结视觉编码器权重,并继续更新投影层和 LM 的预训练权重。为了训练模型以对话方式遵从各种指令并完成任务,我们在第 3 节收集的生物医学语言-图像指令遵从数据的基础上对模型进行了微调,从而开发了一个生物医学聊天机器人。正如稍后描述的实验所证明的那样,现阶段的 LLaVA-Med 模型不仅能作为生物医学视觉助手与用户互动,而且在成熟的生物医学 VQA 数据集上进行评估时,还能实现良好的零样本任务迁移性能。

Fine-tuning to Downstream Datasets.

针对一些特定的生物医学场景,需要开发高精度的特定数据集模型,以提高助手的服务质量。我们在三个生物医学 VQA 数据集[27]上进行两阶段训练后,对 LLaVA-Med 进行了微调,这三个数据集涵盖了不同的数据集规模和不同的生物医学主题。以生物医学图像为上下文,提供多个自然语言问题,助手以自由格式文本回答封闭集问题和开放集问题,并在每个封闭集问题的提示中构建候选答案列表。

Discussion.

我们讨论了 LLaVA-Med 的三个有利特性/意义:

  • i)开发成本低廉。我们的目标是以较低的开发成本提供负担得起的合理解决方案,而不是为了获得最佳性能而扩大数据/模型的规模:在 8 个 40G A100 GPU 上完成第 1 和第 2 阶段分别需要 7 和 8 个小时(详细数字见表 5)。
  • ii)适用于多个领域。虽然本文的重点是生物医学领域,但所提出的微调程序可以推广到游戏和教育等其他垂直领域,在这些领域中,需要新概念和领域知识来构建一个有用的助手。与文献[11]中 “不要停止预训练” 的论点类似,我们考虑采用一种可扩展的管道,从大量无标签数据中创建特定领域的指令数据,并提倡 “不要停止指令调优”,以构建定制的 LMM。
  • iii)服务成本低。一般 LMM 的模型规模可能非常庞大,服务成本也可能过高,而定制 LMM 则具有服务成本低的独特优势。
  • iv)平滑的模型适应。网络架构允许我们从 BioMedCLIP [49] 初始化视觉编码器,或从 Vicuna [43] 初始化语言模型,这可能会带来更高的性能。不过,从 LLaVA 平滑适配到聊天机器人,模型的行为将从普通人转变为专业助理,能够提供有帮助的特定领域响应。

5 Experiments

我们通过实验研究了两个关键部分,即生成的多模态生物医学指令遵循数据的质量和 LLaVA-Med 的性能。我们考虑了两个研究评估环境:

  • 1)作为开放式生物医学视觉聊天机器人,LLaVA-Med 的性能如何?
  • 2)在标准基准上,LLaVA-Med 与现有方法相比如何?需要说明的是,在整个实验过程中,我们只使用了纯语言的 GPT-4。

5.1 Biomedical Visual Chatbot

为了评估 LLaVA-Med 在生物医学多模态对话方面的性能,我们构建了一个包含 193 个新问题的评估数据集。对于这个测试数据集,我们从 PMC-15M 中随机选取了 50 对未见图像和图像描述,并生成两种类型的问题:对话和详细描述。对话数据是使用与第二阶段相同的自指导数据生成管道收集的。详细描述问题是从一个固定的问题集[24]中随机选择的,以诱导详细描述回答。

我们利用 GPT-4 来量化给定图像上下文和图像描述时模型对问题答案的正确性。GPT-4 会做出参考预测,为教师模型设定答案上限。然后,我们从另一个 LMM 中生成对同一问题的回答。在给出两位助手(候选 LMM 和 GPT-4)的回答、问题、图片说明和图片上下文后,我们要求 GPT-4 对两位助手的回答的有用性、相关性、准确性和详细程度进行评分,并按 1 到 10 的比例给出总分,分数越高表示整体表现越好。GPT-4 还被要求对评估进行全面解释,以便我们更好地理解模型。然后,我们利用 GPT-4 的参考分数计算相对分数,进行归一化处理。

在这里插入图片描述

结果见表 1。仅进行第一阶段训练的 LLaVA-Med 作为聊天机器人是不够的,因为它失去了遵循不同指令的能力,尽管生物医学概念的覆盖范围有所扩大。采用完整的两阶段训练的 LLaVA-Med 性能始终优于普通领域的 LLaVA,而采用更大的指令数据(从 10K 到 60K 样本)进行训练则会带来更高的性能。当在自我指导中考虑内联提及时,生成的数据 60K-IM 略微提高了聊天能力。这些结果证明了数据收集策略在生物医学教学中的有效性以及数据集资产的价值。总体而言,最佳 LLaVA-Med 的性能与 GPT-4 的 50.2% 不相上下。请注意,GPT-4 是在不理解图像的情况下,通过考虑真实的图像描述和黄金内联提及来生成响应的。虽然 LMM 与 GPT-4 之间的比较并不公平,但 GPT-4 是一种稳定可靠的评估工具。

在这里插入图片描述

表 2 举例说明了不同聊天机器人的生物医学视觉对话。LLaVAMed 用生物医学知识准确地回答了问题,而 LLaVA 则表现得像一个外行人,根据常识产生了幻觉。由于多模态 GPT-4 尚未公开,因此我们采用纯语言 GPT-4 进行比较。我们将金色图像描述和内联提及作为上下文输入 GPT-4,它通过以对话方式重新组织信息来生成知识性响应。

5.2 Performance on Established Benchmarks

Dataset Description.

我们在三个生物医学 VQA 数据集上对 LLaVA-Med 进行了训练和评估。表 3 总结了详细的数据统计。

  • VQA-RAD [16] 包含 3515 对由临床医生生成的 QA 和 315 幅放射图像,这些图像均匀分布在头部、胸部和腹部。每张图像都与多个问题相关联。问题分为 11 类:异常、属性、模式、器官系统、颜色、计数、物体/条件存在、大小、平面、位置推理和其他。一半的答案是封闭式的(即 "是/否 "类型),其余则是开放式的,有单词或短语答案。

  • SLAKE [23] 是一个用于医学 VQA 的语义标注知识增强数据集。它由 642 幅放射图像和 7000 多个由经验丰富的医生标注的不同 QA 对组成,其中的问题可能涉及外部医学知识(由提供的医学知识图谱解决),图像与丰富的可视化标注相关联,包括语义分割掩码和对象检测边界框。此外,与目前可用的数据集相比,SLAKE 包含更丰富的模式,涵盖更多人体部位,包括大脑、颈部、胸部、腹部和盆腔。请注意,SLAKE 是中英文双语数据集。与现有方法相比,我们只考虑了英文子集。

  • PathVQA [13] 是一个病理图像数据集。该数据集共包含 4998 张病理图像和 32,799 个 QA 对。每幅图像都有多个问题,涉及位置、形状、颜色、外观等多个方面。这些问题分为两类,种类繁多:一类是开放式问题,如为什么、是什么、怎么做、在哪里等;另一类是封闭式问题。

Evaluation Metrics.

对于封闭式问题,我们报告准确率。对于开放式问题,我们使用召回率来评估地面实况标记在生成序列中出现的比例。在文献中,训练集中的唯一答案被视为候选答案,模型可以从中选择答案来预测测试问题的答案。由于我们不对开放集问题的答案提供任何约束,因此我们的表述更接近于开放集的性质,但本质上更难。

Comparisons with SoTA.

我们在表 4 (a) 中将 LLaVA-Med 与一般领域的 LLaVA 和现有的代表性方法进行了比较。首先,LLaVA-Med 的所有变体都优于 LLaVA。虽然语言模型初始化与 LLaVA 或 Vicuna 的差异不大,但 BioMed CLIP 的视觉编码器初始化略优于通用域 CLIP。其次,在 VQA-RAD 和 PathVQA 的封闭集问题上,LLaVA-Med 的微调性能高于监督 SoTA。这验证了 LLaVA-Med 在提供明确指令(例如,是或否)的情况下,在遵循指令完成生物医学任务方面的强大能力。第三,对于开放集问题,LLaVA-Med 在 SLAKE 上实现了 SoTA,而在其他数据集上的表现有限,尤其是与现有方法相比。这可能是因为开放集生物医学问题可能是模棱两可的,而不会限制其例外答案选项。

Ablation Studies.

为了研究我们在训练管道中策划的指令数据和超参数的影响,我们在表 4 (b) 中报告了不同模型变体的性能。有几项发现得到了证实:

  • i)LLaVA-Med 的性能一直远远优于 LLaVA,这表明我们的生物医学领域特定适应性非常有效。与微调设置相比,LLaVA-Med 在零样本的性能差距更大,这表明各种场景中部署一个模型时,LLaVA-Med 显然是比 LLaVA 更好的选择。
  • ii)在第一阶段进行更长时间的训练可以提高零样本迁移的能力,但仅有第一阶段还不够,因为第一阶段的单一图像描述指令可能会促使模型失去遵循不同指令的能力
  • iii)第 2 阶段的指令遵循数据至关重要,当指令数据量从 10K 增加到 60K 时,性能普遍得到改善。60K-IM 数据分别提供了最佳的零样本平均性能和微调性能,验证了在数据创建过程中将内联提法视为外部知识的有效性。
  • iv)在下游数据集上进行更长时间的微调,直到 9 个 epoch,有利于提高性能,特别是在第 2 阶段进行 3 个 epoch 训练的检查点上。将语言模型的大小从 7B 增加到 13B,可以提高整体的零样本性能和微调性能。我们建议实践者参考表 5 中的运行时间,选择适当的质量成本权衡。

Case Study I: Zero-shot on Chinese Questions.

对于在 60K-IM 数据上训练的 LLaVA-Med,我们提供了 SLAKE 数据集上的中文问题。虽然 LLaVA-Med 的训练不包括中文教学数据,但我们在表 6 中显示,LLaVA-Med 能够正确理解中文问题并回答正确答案,这可能得益于 LLaMA/Vicuna 中学习到的多语言知识。现有模型在跨语言零样本迁移时会失效。

6 Conclusions

我们介绍了 LLaVA-Med,这是一个用于生物医学领域的大型语言和视觉模型。为了创建该模型,我们采用自指导(self-instruct)方法创建了高质量的生物医学语言图像指令遵循数据集,并利用纯语言 GPT-4 和外部知识建立了数据整理管道。LLaVA-Med 利用领域知识展示了强大的卓越聊天能力,并在三个 VQA 数据集上通过后续微调在某些指标上优于之前的监督 SoTA。

我们相信,LLaVA-Med 是向建立有用的生物医学视觉助手迈出的重要一步,但我们也注意到,LLaVA-Med 受限于许多 LMM 常见的幻觉和薄弱的深度推理。未来的工作方向是提高质量和可靠性。

A Data

Instructions for brief image description.

用于简要描述图像内容的说明列表见表 7。它们的含义与自然语言差异相同。

在这里插入图片描述

Instructions for detailed image description.

用于详细描述图像内容的说明列表见表 8。它们的含义与自然语言差异相同。

在这里插入图片描述

B Prompts

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

2001-2021年各省高速公路里程数据

2001-2021年全国及各省高速公路里程数据 1、时间:2001-2021年 2、指标:高速公路里程 3、范围:全国及30个省市 (不含西藏) 4、来源:各省NJ、省TJGB、第三产业TJNJ (无缺失) 5、指…

Bytebase:统一数据库 CI/CD 解决方案 | 开源日报 No.128

bytebase/bytebase Stars: 7.9k License: NOASSERTION Bytebase 是一个数据库 CI/CD 解决方案,为开发人员和 DBA 提供统一的工具来管理不同数据库系统的开发生命周期。其主要功能包括标准化操作流程、SQL 代码审查、GitOps 集成以及数据访问控制等。关键特性和核心…

【JWT】JWT实战应用

学习参考:BV1gk4y177DS ------------------------------------------------------------------------------------------------------- # 一、前置知识点 - Java Web - Spring/SpringMVC/SpringBoot - Spring Security # 二、JWT介绍 ## 2.1 概念 官网:https://jwt.i…

带大家做一个,易上手的家常蒜酱鲍鱼

超市有个福利鲍鱼 就买回来弄一下 搞一个整个的蒜 蒜去皮切末 三四个干辣椒切小末 切一点葱花混进去 鲍鱼去壳 去内脏&牙齿 将鲍鱼切块 因为鲍鱼是正经不好入味的东西 起锅烧油 下入 葱蒜干辣椒 翻炒出味 然后倒入鲍鱼进行翻炒 翻炒均匀后 倒入 一勺生抽 半勺老抽 …

Python pycharm编辑器修改代码字体

在pycharm编辑器下修改代码字体,可以按照以下步骤: 点开上图所示的菜单, 再点击File->Settings,进入设置页面。 我们找到Editor下的Font并点选,然后我们就可以在右侧修改字体相关配置了。 这里建议使用等宽字体&…

27 UVM queue

uvm_queue类构建一个动态队列,该队列将按需分配并通过引用传递。 uvm_queue类声明: class uvm_queue #( type T int ) extends uvm_object 1 uvm_queue class hierarchy 2 uvm_queue class Methods 3 UVM Queue Example 在下面的示例中,…

Excel中部分sheet页隐藏并设置访问密码

1、新建sheet1 2、新建sheet2 3、隐藏sheet2 4、保护工作簿、输密码 5、密码二次确认 6、隐藏的sheet2已经查看不了 7、想要查看时,按图示输入原密码即可 8、查看sheet2内容

理解SQL中not in 与null值的真实含义

A not in B的原理是拿A表值与B表值做是否不等的比较, 也就是a ! b. 在sql中, null是缺失未知值而不是空值。 当你判断任意值a ! null时, 官方说, “You cannot use arithmetic comparison operators such as , <, or <> to test for NULL”, 任何与null值的对比都将返…

微服务(11)

目录 51.pod的重启策略是什么&#xff1f; 52.描述一下pod的生命周期有哪些状态&#xff1f; 53.创建一个pod的流程是什么&#xff1f; 54.删除一个Pod会发生什么事情&#xff1f; 55.k8s的Service是什么&#xff1f; 51.pod的重启策略是什么&#xff1f; 可以通过命令kub…

光伏逆变器MPPT的作用、原理及算法

MPPT是逆变器非常核心的技术&#xff0c;MPPT电压在进行光伏电站设计时一项非常关键的参数。 一、什么是MPPT&#xff1f; &#xff08;单块光伏组件的I-V、P-V曲线&#xff09; 上图中&#xff0c;光伏组件的输出电压和电流遵循I-V曲线(绿色)、P-V曲线(蓝色)&#xff0c;如果…

QT基础知识

QT基础知识 文章目录 QT基础知识1、QT是什么2、Qt的发展史3、为什么学习QT4、怎么学习QT1、工程的创建(环境的下载与安装请百度&#xff09;2、创建的工程结构说明3、怎么看帮助文档1、类使用的相关介绍2. 查看所用部件&#xff08;类&#xff09;的相应成员函数&#xff08;功…

uni-app模版(扩展插件)

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

Python如何把类当做字典来访问及浅谈Python类命名空间

Python如何把类当做字典来访问 Python把类当做字典来访问 定义一个类将它实例化&#xff0c;我们可以通过obj.属性来访问类的属性&#xff0c;如果想获取类的所有实例变量&#xff0c;我们可以使用obj.__dict__来访问&#xff0c;如下&#xff1a; class A:def __init__(self)…

CUMT--Java复习--核心类

目录 一、装箱与拆箱 二、“”与equals 三、字符串类 1、String、StringBuffer、StringBuilder的区别 2、String类 3、StringBuffer类 4、StringBuilder类 四、类与类之间关系 一、装箱与拆箱 基本类型与对应封装类之间能够自动进行转换&#xff0c;本质就是Java的自…

Java位运算及移位运算

java中能表示整数数据类型的有byte、short、char、int、long&#xff0c;在计算机中占用的空间使用字节描述&#xff0c;1个字节使用8位二进制表示。 数据类型字节数二进制位数表示范围默认值byte18-27 – 27-10char2160 – 216-1\u0000 (代表字符为空 转成int就是0)short216-…

【超图】SuperMap iClient3D for WebGL/WebGPU —— 坐标系位置 —— Cartesian2

作者&#xff1a;taco 说到关于地理必然逃不开位置的关系。借用百度百科的内容来说地理学&#xff08;geography&#xff09;&#xff0c;是研究地球表层空间地理要素或者地理综合体空间分布规律、时间演变过程和区域特征的一门学科。所以位置&坐标系必然逃不掉了。那么在S…

Axure骚操作:【制作可暂停与不可暂停进度加载条】

目录 一、不可暂停进度条 1.1 前期准备 1.2 效果假想 1.3 适用场景 1.4 实现步骤 &#xff08;1&#xff09;除按钮外的元件设置隐藏 &#xff08;2&#xff09;给按钮添加交互 &#xff08;3&#xff09;给变量值文本标签添加交互 &#xff08;4&#xff09;给进度条矩…

混凝土支撑模板的安装技巧有哪些?

在建筑工程中&#xff0c;混凝土支撑模板的正确安装对于确保结构的安全和工程的顺利进行至关重要。以下是一些实用的安装技巧&#xff0c;可以帮助施工人员更有效地安装混凝土支撑模板&#xff1a; 1. 熟悉设计和施工图纸 在安装前&#xff0c;彻底熟悉设计和施工图纸是非常重…

深度学习 | Transformer模型及代码实现

Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型&#xff0c;现在比较火热的 Bert 也是基于 Transformer。Transformer 模型使用了 Self-Attention 机制&#xff0c;不采用 RNN 的顺序结构&#xff0c;使得模型可以并行化训练&#xff0c;而且能够拥有全局信息…

回溯法解决工作分派问题

解决这个问题的关键有两个: 1.t数组用来在回溯过程暂时存储工作分配关系 2.ans数组用来保存最终答案 3."恢复现场"操作 4.一维数组st,表示该工作是否已经被选 5.solve第k层递归表示第k个人,for循环罗列的是工作.这样,比k表示工作,for循环枚举人更加符合我们的直…