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

news2024/11/27 17:53:03

论文标题: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.coloradmin.cn/o/1349234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-app 前后端调用实例 基于Springboot 下拉刷新实现

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

UDS诊断(ISO14229-1) 11服务

文章目录 功能简介应用场景请求和响应1、请求2、子功能3、肯定响应4、否定响应 报文示例UDS中常用 NRC参考 功能简介 11服务,即 ECUReset(ECU重置)服务,用来控制MCU进行重启,重启分为硬件重启和软件重启。 应用场景…

事件循环的理解

1.单线程 Js是一个单线程的语言,代码只能一行一行去执行,遇到同步的代码就直接执行了,如果遇到异步的代码怎么办? 不可能等到异步的代码执行完,在去执行后面同步的代码。 2.主线程 遇到同步的代码,就在主线程里面直接执行了。 3.任务队列 遇到异步的…

Vue中使用JavaScript中的requestAnimationFrame动画循环实现循环滚动效果-demo

效果 requestAnimationFrame是一个由浏览器提供的 JavaScript 方法,用于在下一次浏览器重绘之前执行指定的回调函数。它接受一个回调函数作为参数,并返回一个整数值,可以用于取消动画循环。 使用 requestAnimationFrame 可以创建平滑的动画效…

【AIGC-图片生成视频系列-5】I2V-Adapter:一种用于视频扩散模型的通用图像生成视频适配器

目录 一. 项目与贡献概述 二. 方法详解 a. 整体框架图 b. 帧相似性先验 三. 一般化图像生成动画结果 四. 基于个性化 T2I 模型的动画结果 五. 结合ControlNet动画结果 六. 项目论文和代码 七. 个人思考与总结 在快速发展的数字内容生成领域,焦点已从文本到…

C#中的Attribute详解(下)

C#中的Attribute详解(下) 一、Attribute本质二、Attribute实例化三、Attribute实例化的独特之处四、元数据的作用五、自定义Attribute实例六、Attribute的附着目标七、附加问题 一、Attribute本质 从上篇里我们可以看到,Attribute似乎总跟pu…

Linux基础知识点(五-信号)

一、信号的基本概念 1.1 信号的概念 信号(signal),又称为软中断信号,用于通知进程发生了异步事件,它是Linux系统响应某些条件而产生的一个事件,它是在软件层次上对中断机制的一种模拟,是一种异…

12.29最小生成数K算法复习(注意输入输出格式),校园最短路径(通过PRE实现路径输出,以及输入输出格式注意)

7-2 最小生成树-kruskal算法 分数 15 const int maxn 1000; struct edge {int u, v, w; }e[maxn]; int n, m, f[30]; bool cmp(edge a, edge b) {return a.w < b.w; } int find(int x) {if (f[x] x) {return x;}else {f[x] find(f[x]);return f[x];} } //int arr[100…

简单FTP客户端软件开发——VMware安装Linux虚拟机(命令行版)

VMware安装包和Linux系统镜像&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1UwF4DT8hNXp_cV0NpSfTww?pwdxnoh 提取码&#xff1a;xnoh 这个学期做计网课程设计【简单FTP客户端软件开发】需要在Linux上配置 ftp服务器&#xff0c;故此用VMware安装了Linux虚拟机&…

数据结构模拟实现LinkedList双向不循环链表

目录 一、双向不循环链表的概念 二、链表的接口 三、链表的方法实现 &#xff08;1&#xff09;display方法 &#xff08;2&#xff09;size方法 &#xff08;3&#xff09;contains方法 &#xff08;4&#xff09;addFirst方法 &#xff08;5&#xff09;addLast方法 …

python开发的app有哪些,python如何开发小软件

这篇文章主要介绍了python开发的app有哪些&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获&#xff0c;下面让小编带着大家一起了解一下。 Python 无处不在&#xff0c;可以说是现代的 C 编程语言&#xff0c;你可以在任何地…

JavaScript的三种引入的方式

目录 (一).什么是JS1.1JS的特点1.2JS的组成 (二).JS引用的三种方式2.1标签引用&#xff08;或嵌入式)2.2文件引用&#xff08;外链式&#xff09;2.3行内式 (三).JS三种引用方式的优缺点1.行内方式&#xff1a;2.标签引用&#xff08;或嵌入式&#xff09;&#xff1a;3.文件引…

Codeforces Round 900 (Div. 3)(A-F)

比赛链接 : Dashboard - Codeforces Round 900 (Div. 3) - Codeforces A. How Much Does Daytona Cost? 题面 : 思路 : 在序列中只要找到k&#xff0c;就返回true ; 代码 : #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)…

[Redis实战]分布式锁

四、分布式锁 4.1 基本原理和实现方式对比 分布式锁&#xff1a;满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁&#xff0c;只要大家使用的是同一把锁&#xff0c;那么我们就能锁住线程&#xff0c;不让线程进行&#xf…

机械过滤器(石英砂过滤器)和多介质过滤器的区别 工作原理动画

​ 1&#xff1a;机械过滤器多介质石英砂过滤器介绍 机械过滤器&#xff1a;预处理水质的关键设备 机械过滤器&#xff0c;也被称为压力式过滤器&#xff0c;是纯水制备过程中不可或缺的预处理设备。它在水处理系统中扮演着重要的角色&#xff0c;能够有效地去除水中的悬浮物…

Ubuntu(WSL)创建用户并赋予权限

查看当前用户 创建新用户 1&#xff09;执行如下命令创建新用户 sudo adduser mysql57 // mysql57 为新用户名&#xff0c;可自定义 2&#xff09;若待创建用户已存在&#xff0c;则先删除已存在用户&#xff0c;然后创建新用户 // 删除用户名 userdel mysql57// 删除组…

lambda表达式和包装器

正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 我们在使用库里的排序算法时如果排序的是自定义类型或者库里默认的排序不能满足我们则需求&…

2.2 设计FMEA步骤二:结构分析

2.2.1 目的 设计结构分析的目的是将设计识别和分解为系统、子系统、组件和零件,以便进行技术风险分析。其主要目标包括: 可视化分析范围结构化表示:方块图、边界图、数字模型、实体零件识别设计接口、交互作用和间隙促进顾客和供应商工程团队之间的协作(接口责任)为功能分…

PyTorch官网demo解读——第一个神经网络(4)

上一篇&#xff1a;PyTorch官网demo解读——第一个神经网络&#xff08;3&#xff09;-CSDN博客 上一篇我们聊了手写数字识别神经网络的损失函数和梯度下降算法&#xff0c;这一篇我们来聊聊激活函数。 大佬说激活函数的作用是让神经网络产生非线性&#xff0c;类似人脑神经元…

Delphi6函数大全4-SysUtils.pas

Delphi6函数大全4-SysUtils.pas首部 function FormatFloat(const Format: string; Value: Extended): string; $[SysUtils.pas功能 返回浮点数类型以指定格式字符串Format转换成字符串说明 FormatFloat(,.00, 1234567890) 1,234,567,890.00参考 function …