微软发布医学多模态大模型LLaVA-Med | 基于LLaVA的医学指令微调

图片

Title: LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day
PDF: https://arxiv.org/pdf/2306.00890v1.pdf
Code: https://aka.ms/llava-med

导读

单模态文本在生物医学领域的研究已经取得了显著的成果,而多模态对话人工智能则通过利用来自公共网络的数十亿个图像-文本对取得了快速进展。然而,这些通用领域的视觉-语言模型在理解和对话生物医学图像方面仍然缺乏复杂性。 因此,本文提出了一种成本效益高的方法,用于训练一种能够回答生物医学图像开放性研究问题的视觉-语言对话助手。

其关键思想是利用从PubMed Central提取的大规模、广覆盖的生物医学图题数据集,使用GPT-4从图题中自我指导生成开放性指令遵循数据,并使用一种新颖的课程学习方法对大型通用领域的视觉-语言模型进行微调。具体而言,该模型首先通过图题对齐学习生物医学词汇,然后使用GPT-4生成的指令遵循数据来掌握开放性对话语义,广泛模拟外行人逐渐习得生物医学知识的过程。 这使得我们能够在不到15小时的时间内(使用八个A100显卡)训练出一种用于生物医学的大型语言和视觉助手(LLaVA-Med)。

LLaVA-Med表现出优秀的多模态对话能力,并能根据开放性指令辅助回答关于生物医学图像的问题。在三个标准生物医学视觉问答数据集上,微调LLaVA-Med在某些指标上优于先前的监督式最先进方法。为了促进生物医学多模态研究,我们将发布我们的指令遵循数据和LLaVA-Med模型。

技术交流

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。

好的文章离不开粉丝的分享、推荐,资料干货、资料分享、数据、技术交流提升,均可加交流群获取,群友已超过500人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:mlc2060,备注:来自CSDN + LLM
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:
LLM

引言

在通用领域中,图像-文本数据非常丰富,例如网络图像及其相关的标题。生成式预训练已经被证明是利用这种平行数据进行自监督视觉-语言建模的有效方法,例如多模态GPT-4 和开源项目LLaVA 。通过根据多模态输入的人类意图调整模型,所得到的大型多模态模型(LMMs)在各种以用户为导向的视觉-语言任务(如图像理解和推理)中表现出强大的零样本任务完成性能,为开发通用的多模态对话助手铺平了道路。

然而,虽然在通用领域取得了成功,但是这样的LMMs在生物医学领域的效果较差,因为生物医学图像-文本对与通用网络内容截然不同。 结果是,通用领域的视觉助手可能表现得像一个外行人,不会回答生物医学问题,或者更糟糕的是产生错误的回答或完全的虚构。生物医学视觉问答(VQA)已经取得了很大进展,但以前的方法通常将问题建模为分类(例如,在训练集中观察到的不同答案之间的分类),并且对于开放性指令遵循的任务准备不足。因此,尽管生成式对话AI已经展示了在生物医学应用方面的巨大潜力,但当前的研究通常仅限于单模态文本。

在本文中,我们提出了用于生物医学领域的大型语言和视觉助手(LLaVA-Med),这是首次尝试将多模态指令调整扩展到生物医学领域,进行端到端的训练以开发生物医学多模态对话助手。 已经证明,针对生物医学自然语言处理(NLP)应用和生物医学视觉-语言(VL)任务进行领域特定的预训练是有效的。最近,通过创建来自PubMed Central的1500万个生物医学图像-文本对的广泛覆盖数据集PMC-15M,大规模的生物医学VL学习已成为可能。该数据集比下一个最大的公共数据集MIMIC-CXR大两个数量级,并且涵盖了多种类型的图像。受最近的指令调整工作的启发,LLaVA-Med使用GPT-4根据PMC-15M中的图像-文本对生成多样的生物医学多模态指令遵循数据,并使用一种新颖的课程学习方法对大规模生物医学领域的VL模型进行微调。具体来说,本文贡献如下:

  • 生物医学多模态指令遵循数据。我们提出了一种新颖的数据生成流程,通过从PMC-15M中采样生物医学图像-文本对,并使用GPT-4仅使用文本生成指令(作为预期输出)来创建多样的(图像、指令、输出)实例。这不需要任何手动注释,并且通过依赖于PMC-15的数据集,创建了一个极其多样化的视觉指令遵循数据集,涵盖了生物医学图像的完整研究结果的全谱。

  • LLaVA-Med。我们提出了一种新颖的课程学习方法,将LLaVA调整到生物医学领域,使用我们自动生成的生物医学多模态指令遵循数据进行微调。具体而言,我们首先使用图像-文本对(使用通用指令简单要求图像的描述)对LLaVA进行微调以对齐生物医学词汇。然后,我们使用自动生成的指令遵循数据继续训练模型以学习开放性对话语义。通过这种方式,我们能够在不到15小时的时间内使用八个A100显卡训练出LLaVA-Med。我们的实证研究验证了领域特定指令调整的有效性,并揭示了将多模态对话助手应用于高价值垂直领域的最佳实践和有趣的发现。在已建立的生物医学VQA数据集上,微调LLaVA-Med的性能通常优于监督式最先进方法。

  • 开源。为了促进生物医学多模态学习的研究,我们将向公众发布以下资源:生物医学多模态指令遵循数据集以及数据生成和模型训练的代码库。

生物医学视觉指令数据

为了使模型能够遵循多样的指令,我们通过仅使用语言的GPT-4来生成多轮关于所提供的生物医学图像的对话指令。具体而言,给定一个图像标题,我们设计了一个提示,要求GPT-4生成多轮的问题和回答,语气上表现得好像它能够看到图像(尽管它只能访问文本)。有时候,图像标题太短,GPT-4无法生成有意义的问题和答案。为了提供关于图像的更多上下文,我们还创建了一个提示,除了标题外,还包括提到图像的原始PubMed论文的句子。我们还手动攥写了一些少样本示例,以演示如何根据提供的标题和上下文生成高质量的对话。从中,我们从五种最常见的成像模态(胸部X射线,计算机断层扫描,磁共振成像,组织病理学和宏观病理学)中抽样了6万个图像文本对。

图片

图1

GPT-4生成的指令遵循数据实例。上图:该图和标题是从PubMed Central的全文文章中提取的,同时还提取了对该图的引用(在文章中提到该图的地方)。下图:使用仅文本(标题和引用)由GPT-4生成的指令遵循数据。

图片

图2

生物医学多模态指令遵循数据的数据统计:(a,b) 指令和回复的根动词-名词对,图中的内圈表示输出回复的根动词,外圈表示直接名词。© 图像和问答对在五个领域上的分布,每个领域展示一张图像。

上图1显示了指令遵循数据的一个示例,上图2显示了数据统计。在不断改进数据质量的过程中,我们生成了三个版本的指令数据:(i) 60K-IM。考虑内联提及(IM)作为上下文的数据集。 (ii) 60K。与60K-IM大小相似(60K个样本),但在自我生成指令时不考虑IM。 (iii) 10K。一个较小的数据集(10个样本),没有IM。它们用于实验中对我们的数据生成策略及其对经过训练的LLaVA-Med的影响进行消融实验分析。

图片

图片

图片

方法

图片

图3

本文使用LLaVA作为初始的通用领域多模态对话模型,并将模型连续训练到生物医学领域。本文采用相同的网络架构,其中线性投影层连接视觉编码器和语言模型。对于LLaVA-Med模型的训练,采用了两阶段训练过程,如上图3所示。

生物医学概念特征对齐-stage1

为了在概念覆盖率和训练效率之间取得平衡,我们从PMC-15M中筛选出了60万个图像文本对。通过一种简单的扩展方法,这些对被转换为了指令跟随数据:指令只是简单地描述图像的任务。对于每个样本,给定语言指令和图像输入,我们要求模型预测原始标题。在训练中,我们保持视觉编码器和语言模型权重冻结,只更新投影矩阵。通过这种方式,可以将大量新颖的生物医学视觉概念的图像特征与预训练语言模型中的文本词嵌入对齐。这个阶段可以理解为将匹配的图像-文本标记的词汇扩展到生物医学领域。

端到端指令微调-stage2

我们只保持视觉编码器权重不变,继续更新投影层和语言模型的预训练权重。为了训练模型以跟随各种指令并以对话方式完成任务,我们在收集的生物医学语言-图像指令跟随数据上对模型进行微调,开发了一个生物医学聊天机器人。正如后面将要描述的实验所示,此阶段的LLaVA-Med模型不仅能够作为生物医学视觉助手与用户互动,还能在评估已建立的生物医学VQA数据集时实现良好的zero-shot任务转移性能。

微调至下游任务

对于一些特定的生物医学场景,需要开发高度准确且特定于数据集的模型,以提高模型性能。在两个阶段的训练之后,我们对LLaVA-Med进行微调,使用了三个生物医学VQA数据集,涵盖了不同的数据集大小和多样化的生物医学主题。给定一个生物医学图像作为上下文,提供多个自然语言问题,模型针对闭集和开集问题以自由文本形式进行回答,并为每个闭集问题的提示构建了一个候选答案列表。

实验结果

生物医学视觉聊天性能评估

图片

表1. 多模态聊天指令跟随能力的性能比较,通过GPT-4评估得出的相对分数

仅进行第一阶段训练的LLaVA-Med作为聊天机器人是不够的,因为它失去了理解多样化指令的能力,尽管在生物医学概念覆盖方面有所改进。经过完整的两阶段训练的LLaVA-Med持续优于一般领域的LLaVA,并且使用更大的指导数据(从10K到60K样本)会导致更高的性能。当在自我指导中考虑内联提及时,生成的数据60K-IM稍微提高了聊天能力。结果证明了生物医学指令跟随数据收集策略的有效性以及数据集的价值。总体而言,对于最佳的LLaVA-Med,它与GPT-4的50.2%性能相匹配。需要注意的是,GPT-4通过考虑真实标题和黄金内联提及来生成回答,而不理解图像。尽管LMM(大型多模态模型)和GPT-4之间不是公平的比较,但GPT-4是一个一致可靠的评估工具

图片

表2. 医学视觉聊天和推理能力的示例比较

LLaVA-Med以生物医学知识准确回答问题,而LLaVA则像一个普通人一样产生错误的幻想。由于多模态GPT-4不可公开获得,我们使用仅限于语言的GPT-4进行比较。我们将标题和内联内容作为上下文输入到GPT-4中,它通过重新组织对话方式中的信息来生成有知识的回应。

基准性能评估

图片

与先前的最先进监督方法的比较。对于开放式问题,先前的方法仍然将问题表述为在训练集中的不同答案之间的分类,这可能会高估它们的泛化能力,因为这些数据集的特殊之处在于测试答案几乎总是出现在训练中。加粗表示LLaVA-Med达到了新的最优结果。

图片

不同阶段训练中使用不同训练轮数的实验研究。“FT”代表微调(Fine-Tuning)。60K-IM表示使用inline生成的指令数据。灰色行是使用不同指令数据训练的LLaVA-Med的zero-shot性能,它们被选择在子表(a)中显示。

图片

zero-shot中的中文问题示例。尽管LLaVA-Med的训练数据本身不包括中文,但它能够正确理解中文问题。

结论

本文提出了一个用于生物医学领域的大规模语言和视觉模型LLaVA-Med。为了创建这个模型,本文使用自我指导self-instruction的方法创建了高质量的生物医学语言-图像指导数据集。LLaVA-Med展示了强大的领域知识和出色的聊天能力,并在某些指标上优于先前的有监督方法在三个VQA数据集上的性能。虽然LLaVA-Med是朝着构建一个有用的生物医学视觉助手迈出的重要一步,但LLaVA-Med在幻觉和深入推理方面仍然存在局限性,这是许多LMMs共同的弱点。

写在最后

如果您也对人工智能和计算机视觉全栈领域感兴趣,欢迎与我交流,一起探讨更多有趣的话题!

[编辑本段]Turbo C2.0    介绍      Turbo C2.0不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。使用Turbo C2.0无需独立地编辑、编译和连接程序,就能建立并运行C语言程序。因为这些功能都组合在Turbo 2.0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。    基本配置要求   Turbo C 2.0可运行于IBM-PC系列微机,包括XT,AT及IBM 兼容机。此时要求DOS2.0或更高版本支持,并至少需要448K的RAM,可在任何彩、单色80列监视器上运行。支持数学协处理器芯片,也可进行浮点仿真,这将加快程序的执行。 [编辑本段]Turbo C 2.0的主要文件的简单介绍   INSTALL.EXE 安装程序文件   TC.EXE 集成编译   TCINST.EXE 集成开发环境的配置设置程序   TCHELP.TCH 帮助文件   THELP.COM 读取TCHELP.TCH的驻留程序README 关于Turbo C的信息文件   TCCONFIG.EXE 配置文件转换程序MAKE.EXE   项目管理工具TCC.EXE   命令行编译TLINK.EXE   Turbo C系列连接器TLIB.EXE   Turbo C系列库管理工具C0?.OBJ 不   同模式启动代码C?.LIB   不同模式运行库GRAPHICS.LIB   图形库EMU.LIB   8087仿真库FP87.LIB 8087库   *.H Turbo C头文件   *.BGI 不同显示器图形驱动程序   *.C Turbo C例行程序(源文件)   其中:上面的?分别为:T Tiny(微型模式)S Small(小模式)C Compact(紧凑模式)M Medium(中型模式)L Large(大模式)H Huge(巨大模式)    Turbo C++ 3.0   “Turbo C++ 3.0”软件是Borland公司在1992年推出的强大的——C语言程序设计与C++面向对象程序设计 的集成开发工具。它只需要修改一个设置选项,就能够在同一个IDE集成开发环境下设计和编译以标准 C 和 C++ 语法设计的程序文件。 [编辑本段]C 语言   C语言起始于1968年发表的CPL语言,它的许多重要思想都来自于Martin Richards在1969年研制的BCPL语言,以及以BCPL语言为基础的与Ken Thompson在1970年研制的B语言。Ken Thompson用B语言写了第一个UNIX操作系统。M.M.Ritchie1972年在B语言的基础上研制了C语言,并用C语言写成了第一个在PDP-11计算机上研制的UNIX操作系统。1977年出现了独立于极其的C语言编译文本《看移植C语言编译程序》,从而大大简化了把C语言编译程序移植到新环境中所做的工作,这本身也就使UNIX的日益广泛使用,C语言也迅速得到推广。   1983年美国国家标准化协会(ANSI)根据C语言问世以来的各种版本,对C语言的发展和扩充制定了新的标准,成为ANSI C。1987年ANSI又公布了新标准————87ANSI C。   目前在微型计算机上使用的有Microsoft C、Quick C、Turbo C等多种版本。这些不同的C语言版本,基本部分是相同的,但是在有关规定上有略有差异。   C 语言发展如此迅速, 而且成为最受欢迎的语言之一, 主要因为它具有强大的功能。许多著名的系统软件, 如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C 语言加上一些汇编语言子程序, 就更能显示C 语言的优势了,象PC- DOS ,WORDSTAR等就是用这种方法编写的。归纳起来C 语言具有下列特点:   1. C是中级语言   它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。   2. C是结构式语言   结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C 语言是以函数形式提供给用户的, 这些函数可方便的调用, 并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。   3. C语言功能齐全   C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的。   4. C语言适用范围大   C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。   C语言的优点很多,但是也存在一些缺点,如运算优先级太多,运算能力方面不像其它高级语言那样强,语法定义不严格等。但是这些都不能阻止C语言成为一门广受欢迎的计算机编程语言
Turbo C2.0 介绍   Turbo C2.0不仅是一个快捷、高效的编译程序,同时还有一个易学、易用的集成开发环境。使用Turbo C2.0无需独立地编辑、编译和连接程序,就能建立并运行C语言程序。因为这些功能都组合在Turbo 2.0的集成开发环境内,并且可以通过一个简单的主屏幕使用这些功能。 基本配置要求   Turbo C 2.0可运行于IBM-PC系列微机,包括XT,AT及IBM 兼容机。此时要求DOS2.0或更高版本支持,并至少需要448K的RAM,可在任何彩、单色80列监视器上运行。支持数学协处理器芯片,也可进行浮点仿真,这将加快程序的执行。 主要文件的简单介绍   INSTALL.EXE 安装程序文件   TC.EXE 集成编译   TCINST.EXE 集成开发环境的配置设置程序   TCHELP.TCH 帮助文件   THELP.COM 读取TCHELP.TCH的驻留程序README 关于Turbo C的信息文件   TCCONFIG.EXE 配置文件转换程序MAKE.EXE   项目管理工具TCC.EXE   命令行编译TLINK.EXE   Turbo C系列连接器TLIB.EXE   Turbo C系列库管理工具C0?.OBJ 不   同模式启动代码C?.LIB   不同模式运行库GRAPHICS.LIB   图形库EMU.LIB   8087仿真库FP87.LIB 8087库   *.H Turbo C头文件   *.BGI 不同显示器图形驱动程序   *.C Turbo C例行程序(源文件)   其中:上面的?分别为:T Tiny(微型模式)S Small(小模式)C Compact(紧凑模式)M Medium(中型模式)L Large(大模式)H Huge(巨大模式)
### 回答1: 在 TURBO C 2.0 中,您可以使用 biosdisk() 函数来格式化软盘。 下面是一段代码示例: ``` #include <stdio.h> #include <dos.h> int main() { // 定义扇区的大小 unsigned int sector_size[3] = {512, 512, 1024}; // 定义填充字节 unsigned char fill_char[3] = {0xF6, 0xF6, 0x48}; // 格式化磁道 700 的前三个扇区 for (int i = 0; i < 3; i++) { int result = biosdisk(2, 0, 70, 0, i + 1, 1, sector_size[i], fill_char[i]); if (result != 0) { printf("格式化扇区 %d 失败,返回码: %d\n", i + 1, result); } } return 0; } ``` 请注意,在使用 biosdisk() 函数之前,需要包含 dos.h 头文件。 希望这能帮到您! ### 回答2使用TURBO C 2.0语言,可以通过以下代码格式化软盘的70磁道0面,并分别格式化3个扇区,大小分别为512字节、512字节和1024字节。其中,前两个扇区使用F6填充,第三个扇区使用48填充。 ```c #include<stdlib.h> #include<stdio.h> #include<dos.h> void formatFloppyDisk(){ union REGS regs; regs.h.ah = 0x0;// To format a floppy disk, we set AH=0 regs.h.dl = 0;// Drive number (0=A, 1=B, etc.) regs.x.cx = 0;// Track number to format regs.h.dh = 0;// Head number regs.h.al = 0;// Sector size (0=default, 1=512 bytes, 2=1024 bytes, 3=2048 bytes etc.) int FILL_BYTE = 0;// The byte value to fill the sectors with during formatting int NUM_SECTORS = 3;// Number of sectors to format // To format 70th track 0th head regs.x.ax = 0x1301; // 0x13 = Reset disk system, 01H = Reset only specified drive int86(0x13, &regs, &regs); // BIOS interrupt to reset disk system for (int i=0; i<NUM_SECTORS; i++){ regs.x.ax = 0x3101; // 0x31 = Write Format, 01H = Format only current track regs.x.bx = 0x0001; // 0x00 = Drive A:, 01H = Head 1, 0 = Generate ID Field depending on the disk in the drive 1 = Keep the ID Field all zeros regs.x.cx = 0x0170; // Track number=70(0-79 range) regs.h.dh = 0x00; // Head number=0 or 1 regs.h.al = 0x02; // Control byte=always zero regs.x.dx = i+1; // Sector number starting from 1 regs.x.si = 0x0000; // segment and offset of read/write buffer regs.x.di = 0x0000; // segment and offset of result if(i == 2){ FILL_BYTE = 0x48; // Fill the third sector with 48 regs.x.ax = 0x3102; // 0x31 = Write Format, 02H = Format sequential tracks immediately following the one being formatted }else{ FILL_BYTE = 0xF6; // Fill the first two sectors with F6 } regs.h.ah = FILL_BYTE; // Fill the sector with specified byte int86(0x13, &regs, &regs); // BIOS interrupt to format the specified sector } } int main(){ formatFloppyDisk(); return 0; } ``` 上述代码使用了INT 0x13,即BIOS中断服务例程,来执行软盘格式化操作。通过设置寄存器的不同参数,可以指定要格式化的磁道、面、扇区大小和填充字节。在这个例子中,我们格式化了软盘70磁道0面的3个扇区,前两个扇区使用F6填充,第三个扇区使用48填充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值