目录
2 Vision-Language Instruction Tuning
2.2 Training and Evaluation Protocols
2.3 Instruction-aware Visual Feature Extraction
2.4 Training Dataset Balancing
3.2 Ablation Study on Instruction Tuning Techniques
3.4 Instruction Tuning vs. Multitask Learning
3.5 Finetuning InstructBLIP on Downstream Tasks
原文链接:http://arxiv.org/abs/2305.06500
GitHub:https://github.com/salesforce/LAVIS/tree/main/projects/instructblip
在预训练和指令调优管道的驱动下,出现了可以解决各种语言领域任务的通用语言模型。然而,由于额外的视觉输入会增加任务差异,因此构建通用视觉语言模型具有挑战性。尽管视觉语言预训练已得到广泛研究,但视觉语言指令调优的探索相对较少。在本文中,我们基于预训练的 BLIP-2 模型对视觉语言指令调优进行了系统全面的研究。我们收集了各种 26 个公开可用的数据集,将它们转换为指令调优格式,并将它们分为两个集群,用于保持指令调优和保持零样本评估。此外,我们还引入了指令感知视觉特征提取,这是一种使模型能够提取针对给定指令定制的信息特征的关键方法。由此产生的 InstructBLIP 模型在所有 13 个保留数据集中实现了最先进的零样本性能,大大优于 BLIP-2 和更大的 Flamingo。当对单个下游任务进行微调时,我们的模型也会带来最先进的性能(例如,ScienceQA IMG 的准确率为 90.7%)。此外,我们定性地展示了 InstructBLIP 相对于并发多模态模型的优势。所有 InstructBLIP 模型都是开源的。
长期以来,人工智能 (AI) 的各个领域都渴望建立可以泛化到各种任务的统一模型。在自然语言处理 (NLP) 中,指令调优在实现这一目标方面取得了可喜的成功。通过在自然语言指令描述的各种任务上微调大型语言模型 (LLM),指令调整使模型能够处理和遵循新指令。最近,指令调整的 LLM 已被用于视觉语言任务。例如,BLIP-2 有效地调整了冻结指令调整的 LLM 以理解视觉输入,这在遵循图像到文本生成的指令方面展示了初步能力。
然而,与 NLP 任务不同,视觉语言任务由于来自各个领域的额外视觉输入而在本质上更加多样化。这使得构建一个可以泛化到广泛的视觉语言任务的统一模型变得更具挑战性。以前的方法要么执行多任务训练,要么直接求助于 LLM 固有的泛化能力。然而,尽管使用统一的输入输出格式,多任务训练仍无法充分弥合任务之间的差异。另一方面,针对纯文本指令进行调整的 LLM 在 NLP 任务的零样本泛化方面更有效,但在视觉语言任务中表现不尽如人意。
为了应对上述挑战,本文提出了 InstructBLIP,这是一种视觉语言指令调优框架,它使通用模型能够通过统一的自然语言界面解决广泛的视觉任务。 InstructBLIP 是从一个预训练的 BLIP-2 模型初始化的,该模型由一个图像编码器、一个 LLM 和一个连接两者的 Q-Former 组成。在指令调优期间,我们微调 Q-Former,同时保持图像编码器和 LLM 冻结。我们的论文做出了以下主要贡献:
InstructBLIP 旨在解决视觉语言指令调优中的独特挑战,并系统地研究模型对未见数据和任务的泛化能力的提高。在本节中,我们首先介绍指令调优数据的构建,然后介绍训练和评估协议。然后,我们分别从模型和数据的角度描述了两种提高指令调优性能的技术。最后我们介绍实现细节。
为了在考虑其可访问性的同时确保指令调优数据的多样性,我们收集了大量公开可用的视觉语言数据集,并将它们转换为指令调优格式。如图 2 所示,最终的集合涵盖了 11 个任务类别和 28 个数据集,包括图像字幕,带有阅读理解的图像字幕,视觉推理,图像问答,基于知识的图像问答 ,带有阅读理解的图像问答,图像问题生成(从 QA 数据集反演),视频问答、视觉会话问答、图像分类和 LLaVA-Instruct-150K。我们在附录 C 中包含了每个数据集的详细描述和统计数据。
对于每项任务,我们精心制作了 10 到 15 个不同的自然语言指令模板。这些模板作为构建指令调整数据的基础,这些数据阐明了任务并描述了目标。对于本质上偏爱短响应的公共数据集,我们在其相应的一些指令模板中使用诸如 short 和 briefly 之类的术语,以降低模型过度拟合以始终生成短输出的风险。对于 LLaVA-Instruct-150K 数据集,我们没有合并额外的指令模板,因为它是按照指令格式自然构建的。指令模板的完整列表可以在附录 D 中找到。
为了涵盖广泛的训练任务,同时为全面的零样本评估保留足够数量的未见数据,我们将 26 个数据集分为 13 个保留数据集和 13 个额外数据集,用黄色和白色表示,如图 2. 我们使用保留数据集的训练集进行指令调优,并利用它们的验证或测试集进行保留数据集的评估。
对于额外数据集的评估,我们的目标是了解指令调整如何提高模型在未见数据上的零样本泛化性能。在本文中,我们定义了两种类型的保留数据:1)在训练期间未暴露给模型但其任务存在于保留集群中的数据集; 2) 在训练过程中完全看不见的数据集及其相关任务。由于保留数据集和保留数据集之间的图像分布发生变化,解决第一类保留评估并非易事。对于第二类,我们把视觉推理、视频问答、视觉对话问答、图像分类等几项任务完整地展示出来。
仔细选择数据集以避免数据污染(没有评估数据出现在跨不同数据集的保留训练集群中)。在指令调整期间,我们为每个数据集统一混合所有保留的训练集和样本指令模板。这些模型使用标准语言建模损失进行训练,以直接生成给定指令的响应。此外,对于涉及场景文本的数据集,我们在指令中添加 OCR 标记作为补充信息。
现有的zero-shot图像到文本生成方法,包括 BLIP-2,在提取视觉特征时采用指令不可知的方法。也就是说,LLM 的视觉输入不知道指令,这会损害模型跨任务的灵活性。相比之下,指令感知视觉模型可以增强模型学习和遵循不同指令的能力。考虑以下示例:1)给定相同的图像,指示模型完成两个不同的任务; 2)给定两张不同的图像,指示模型完成相同的任务。在第一个示例中,指令感知视觉模型可以从针对指令定制的同一图像中提取不同的特征,从而在解决不同任务时呈现更多信息特征。在第二个示例中,指令感知视觉模型可以利用指令中包含的常识来提取两个不同图像的特征,从而实现图像之间更好的知识传递。
InstructBLIP 通过充分利用 BLIP-2 模型中的 Q-Former 架构,提出了一种指令感知视觉特征提取方法。如图 3 所示,Q-Former 旨在从冻结图像编码器的输出中提取视觉特征。具体来说,一组可学习的查询嵌入通过交叉注意层与冻结图像编码器交互。然后将这些查询的输出特征作为输入视觉提示投射到冻结的 LLM。 Q-Former 在 BLIP-2 论文之后分两个阶段进行了预训练,通过它学习提取 LLM 可以消化的文本对齐视觉特征。在推理过程中,在视觉提示之后附加一条指令,以指导 LLM 执行指定的不同任务。
在 InstructBLIP 中,指令文本不仅作为 LLM 的输入,还作为 QFormer 的输入。该指令通过 Q-Former 的自注意力层与查询交互,这会影响查询以提取图像特征,这些图像特征更能提供指令所描述的任务信息。因此,LLM 接收到更有用的视觉信息以完成任务。在表 2 中,我们证明了指令感知视觉特征提取为保持和保持评估提供了重要的性能改进。
由于训练数据集数量众多且每个数据集的大小存在显着差异,将它们均匀混合可能会导致模型在较小的数据集上过度拟合而在较大的数据集上欠拟合。为了缓解此类问题,我们建议通过平方根平滑对数据集的大小(即训练样本的数量)进行采样。通常,给定大小为 的数据集,在训练过程中从数据集 d 中选择数据样本的概率表示为:
。除了这个加权公式之外,我们还对某些数据集的权重进行手动调整以提高收敛性。这是必要的,因为各种数据集和任务的内在差异需要不同级别的训练强度,即使它们具有相似的大小。具体来说,我们降低了A-OKVQA(多选)的权重,增加了OKVQA的权重。在表 2 中,我们表明数据平衡策略提高了保留评估和保留泛化的整体性能。
在推理期间,我们采用两种略有不同的生成方法来评估不同的数据集。对于大多数数据集,例如图像字幕和开放式 VQA,直接提示指令调优模型生成响应,随后将其与基本事实进行比较以计算指标。另一方面,对于分类和多选 VQA 任务,我们在之前的工作之后采用词汇排序方法。具体来说,我们仍然提示模型生成答案,但将其词汇限制为候选列表。然后,我们计算每个候选者的对数似然,并选择具有最高值的那个作为最终预测。此排名方法适用于 ScienceQA、IconQA、A-OKVQA(多项选择)、HatefulMemes 和 Visual Dialog 数据集。此外,对于二元分类,正负标签被扩展到更广泛的词汇集,以更有效地适应模型的语言建模概率质量(例如,yes和true代表正,no和false代表负)。
对于视频问答任务,我们为每个视频样本使用四个统一采样的帧。每个帧都由图像编码器和 Q-Former 单独处理,并且它们生成的查询嵌入在馈送到 LLM 之前被连接在一起。
Architecture. 我们在 LAVIS 库中实现了 InstructBLIP。由于 BLIP-2 的模块化架构设计带来的灵活性,我们可以快速调整模型以合并各种 LLM。在我们的实验中,我们采用了四种具有相同图像编码器 (ViTg/14) 但不同冻结 LLM 的 BLIP-2 变体,包括 FlanT5-XL (3B)、FlanT5-XXL (11B)、Vicuna-7B 和 Vicuna -13B。 FlanT5 是一种基于编码器-解码器 Transformer T5 的指令调优模型。另一方面,Vicuna 是最近发布的从 LLaMA 指令调整的仅解码器 Transformer。在视觉语言指令调整期间,我们从预训练的 BLIP-2 的checkpoints初始化模型,并且仅微调 Q-Former 的参数,同时保持图像编码器和 LLM 冻结。由于原始的 BLIP-2 模型不包括 Vicuna 作为 LLM,我们按照与 BLIP-2 相同的程序对 Vicuna 进行预训练。
Training and Hyper-parameters. 我们对所有模型进行最多 60K 步的指令调优,并每 3K 步验证一次模型的性能。对于每个模型,选择一个最佳 checkpoint 并将其用于所有数据集的评估。对于 3B、7B 和 11/13B 模型,我们分别使用 192、128 和 64 的批量大小。使用 AdamW 优化器,β1 = 0.9,β2 = 0.999,权重衰减 0.05。此外,我们在最初的 1K 步骤中对学习率进行线性预热,从 增加到
,然后进行余弦衰减,最小学习率为 0。所有模型都使用 16 Nvidia A100 (40G) 进行训练) GPU 并在两天内完成。
我们首先在 13 个保留数据集上评估 InstructBLIP 模型。我们将 InstructBLIP 与之前的 SOTA 模型 BLIP-2 和 Flamingo 进行了比较。如表 1 所示,我们在所有数据集上都获得了新的zero-shot SOTA 结果。 InstructBLIP 在所有 LLM 中始终以显着优势超越其原始主干 BLIP-2,证明了视觉语言指令调整的有效性。例如,与 BLIP-2 FlanT5XL 相比,InstructBLIP FlanT5XL 产生了 15.0% 的平均相对改进。此外,指令调优提高了视频 QA 等看不见的任务类别的zero-shot泛化。InstructBLIP 在 MSRVTT-QA 上比之前的 SOTA 实现了高达 47.1% 的相对改进,尽管从未接受过时间视频数据的训练。最后,我们最小的具有 4B 参数的 InstructBLIP FlanT5XL 在所有六个共享评估数据集上优于 Flamingo-80B,平均相对改进 24.8%。
对于可视化对话数据集,我们选择报告标准化贴现累积增益 (NDCG) 指标的平均倒数排名 (MRR)。这是因为 NDCG 倾向于通用和不确定的答案,而 MRR 更喜欢某些响应,从而使 MRR 更好地与zero-shot评估场景保持一致。
为了研究指令感知视觉特征提取(第 2.3 节)和数据集平衡策略(第 2.4 节)的影响,我们通过在指令调整过程中分别删除它们中的每一个来进行消融研究。如表 2 所示,视觉特征中缺乏指令意识会显着降低所有数据集的性能。这种性能下降在涉及空间视觉推理(例如 ScienceQA)或时间视觉推理(例如 iVQA)的数据集中更为严重,其中 Q-Former 的指令输入可以引导它更多地关注信息量更大的图像嵌入。关于数据平衡策略,它的移除会导致不稳定的训练模式,因为不同的数据集在截然不同的训练步骤中达到最佳性能。因此,这种不稳定性会损害整体性能。
除了对公共基准进行系统评估外,我们还使用更多样化的图像和说明进一步定性检查 InstructBLIP。如图 1 所示,InstructBLIP 展示了其进行复杂视觉推理的能力。例如,它可以从视觉场景中合理地推断出可能发生了什么,并通过从视觉证据(棕榈树)中推断场景的位置来推断灾难的类型。此外,InstructBLIP 能够将视觉输入与嵌入的文本知识联系起来,并生成信息丰富的响应,例如介绍一幅名画。此外,InstructBLIP 展示了理解视觉表示背后更深层次的隐喻含义的能力。最后,我们展示了 InstructBLIP 可以进行多轮对话,在做出新响应时有效地考虑对话历史。
在附录 B 中,我们将 InstructBLIP 与并发多模式模型(GPT-4、LLaVA、MiniGPT4)进行了比较。尽管所有模型都能够生成长格式响应,但 InstructBLIP 的输出通常包含更恰当的视觉细节并展示逻辑连贯的推理步骤。重要的是,我们认为长篇回复并不总是可取的。例如,在图 6 中,InstructBLIP 通过自适应调整响应长度直接解决用户的意图,而 LLaVA 和 MiniGPT-4 生成长且不太相关的句子。 InstructBLIP 的这些优势是使用多样化指令调优数据和有效架构设计的结果。
与指令调优直接类似的是多任务学习,这是一种广泛使用的方法,涉及同时训练多个数据集,目的是提高每个数据集的性能。为了研究在指令调优中观察到的零样本泛化的改进是主要来自指令的格式还是仅仅来自多任务处理,我们在相同的训练设置下对这两种方法进行了比较分析。
在 [45] 之后,我们考虑了两种多任务训练方法。在第一种方法中,模型是在没有说明的情况下使用训练数据集的普通输入输出格式进行训练的。在评估期间,仍然向模型提供指令,指示要执行的特定任务。然而,图像字幕是个例外,因为模型在仅接收图像作为输入时获得更好的分数。对于第二种方法,我们通过在训练期间将 [Task:Dataset] 标识符添加到文本输入来进一步调整指令。例如,我们为 VQAv2 数据集添加 [Visual question answering:VQAv2]。在评估期间,我们探索指令和此标识符。特别是,对于保留数据集的标识符,我们只使用任务名称,因为模型永远不会看到数据集名称。
结果如图 4 所示,包括 BLIP-2 零样本、多任务训练和指令调优。所有这些模型都基于 BLIP-2 FlanT5XL 主干,并遵循第 2 节中描述的相同训练配置。总的来说,我们可以从结果中得出两个见解。首先,指令调整和多任务学习在保留数据集上表现出相似的性能。这表明该模型可以比较好地适应这两种不同的输入模式,只要它已经使用此类数据进行了训练。另一方面,在未见过的保留数据集上,指令调优比多任务学习有了显着改进,而多任务学习的性能仍然与原始 BLIP-2 相当。这表明指令调优是增强模型零样本泛化能力的关键。
我们进一步微调 InstructBLIP 模型以研究其在学习特定数据集方面的性能。与大多数以前增加输入图像分辨率并在下游任务中微调视觉编码器的方法(例如 Flamingo、BLIP-2)相比,InstructBLIP 在指令调整期间保持相同的图像分辨率(224×224),并在期间保持视觉编码器冻结微调。这显着减少了可训练参数的数量,从 1.2B 减少到 188M,从而大大提高了微调效率。
结果如表 3 所示。与 BLIP-2 相比,InstructBLIP 在所有数据集上都具有更好的微调性能,这验证了 InstructBLIP 作为用于特定任务微调的更好的权重初始化模型。 InstructBLIP 在 ScienceQA (IMG)、OCR-VQA、A-OKVQA 上设置了新的最先进的微调性能,并且 PaLM-E在 OKVQA 上的性能优于 562B 参数。
此外,我们观察到基于 FlanT5 的 InstructBLIP 在多项选择任务中表现出色,而基于 Vicuna 的 InstructBLIP 通常在开放式生成任务中表现更好。这种差异主要归因于它们冻结的 LLM 的能力,因为它们都使用相同的图像编码器。虽然 FlanT5 和 Vicuna 都是指令调优的 LLM,但它们的指令数据有很大不同。 FlanT5 主要在包含许多多选 QA 和分类数据集的 NLP 基准上进行微调,而 Vicuna 在开放式指令跟踪数据上进行微调。
指令调整已被证明可以提高语言模型对未知任务的泛化性能。一些方法通过将现有的 NLP 数据集转换为指令格式来收集指令调优数据,其他方法使用 LLM(例如 GPT3 [5])生成指令数据。
通过向 LLM 注入视觉信息,指令调整的 LLM 已适应图像到文本的生成。 BLIP-2 使用冻结的 FlanT5 模型,并训练 Q-Former 提取视觉特征作为 LLM 的输入。 MiniGPT4 使用与 BLIP-2 相同的预训练视觉编码器和 Q-Former,但使用 Vicuna 作为 LLM 并使用比BLIP-2。 LLaVA 直接将视觉编码器的输出作为输入投射到 LLaMA/Vinuca LLM,并根据 GPT-4 生成的视觉语言对话数据对 LLM 进行微调。 mPLUG-owl 使用来自 LLaVA 的文本指令数据和视觉语言指令数据执行低秩适应 以微调 LLaMA 模型。一项单独的工作是 MultiInstruct,它在没有预训练的 LLM 的情况下执行视觉语言指令调整,导致竞争力下降。
如本文所示,InstructBLIP 提供了比现有模型性能更强的指令调优模型。 InstructBLIP 还对视觉语言指令调整的各个方面进行了全面分析,验证了其在泛化到不可见任务方面的优势。
在本文中,我们介绍了 InstructBLIP,这是一种针对通用视觉语言模型的简单而新颖的指令调优框架。我们对视觉语言指令调整进行了全面研究,并展示了 InstructBLIP 模型以最先进的性能泛化到各种未见过的任务的能力。定性示例还展示了 InstructBLIP 在指令遵循方面的各种能力,例如复杂的视觉推理、基于知识的图像描述和多轮对话。此外,我们表明 InstructBLIP 可以作为下游任务微调的增强模型初始化,实现最先进的结果。我们希望 InstructBLIP 能够激发通用多模式 AI 及其应用的新研究。
以下是一些可能遇到的其他同步错误::0xE0000021:需要密码来同步 OneNote首先,请确保从 Mac 应用商店安装了最新版本的 OneNote。选择“Apple 菜单”>“软件更新”。应用商店将打开,并显示所安装的 macOS 应用的任何更新。在更新列表中查找 OneNote for Mac,然后单击“更新”。接下来,尝试在 macOS 中重置 iCloud 密钥链。在“查找工具”..._onenote同步正在等待更新
ld: file not found: @rpath/libgcc_s.1.1.dylib for architecture x86_64ld: file not found: @rpath/libquadmath.0.dylib for architecture x86_64_ld: file not found: @rpath/libquadmath.0.dylib for architecture x86_64
People in Silverland use square coins. Not only they have square shapes but also their values are square numbers. Coins with values of all square numbers up to 289 (=17^2), i.e., 1-credit coins, 4-cre..._hdu square coins
爬取东方财富网的部分股票信息(2)目标:爬取东方财富网的部分股票的名称、代码、涨跌幅、融资余额、融资融券余额、股东户数编程语言:Python 3.7开发IDE:Visual Studio 2019这一次我们来爬取股票的股东户数,因为股东户数在另一个页面中,所以我选择重新建一个项目来专门爬取股东户数。还是上次的开头,随便选一只股票,进入到它的股东研究页面。常规操作先来一遍,检查显示有股东户数的表格,发现数据都在一个id为“Table0”的“table”标签里面。然后在网页源代码里搜“Tab
出现unable to create process using 错误原因,.py的默认打开方式pycharm解决方法,右键随便一个py文件,打开方式,选中python安装文件夹下的python.exe,勾中默认打开方式。再用命令行创建项目django-admin.py startproject testdj
Linq to SQL很好用,可惜只支持Microsoft SQL Server 和Microsoft SQL ServerCompact Edition,目前比较成熟的免费解决方法是DBLinq(PS:ALinq超贵,实际上很多类似的小东西都超贵),它可以提供provider实现Linq to MySQL, Linq to SQLite, Linq to Oracle,Linq to Pos..._mysql.data.mysqlclient 支持 linq 吗
参考user guide Excercise 2.12目的:显示流线并且按照速度大小显示箭头大小工具:paraview 5.7 windows串行版本算例:disk_out_ref.ex2在官网可以下载,包括user guidehttps://www.paraview.org/Wiki/The_ParaView_Tutorial添加streamline filter (左上角)将s..._paraview带箭头的流线
短信炸弹危害:短时间内接收数条短信,致使手机卡顿死机等,另外也对手机使用者生活带来不必要的烦恼;某公司的短信下发接口被大规模利用,带来严重经济损失。问题:通过爆破的方式向服务器频繁请求数据短信下发接口,达到攻击的效果。修改建议:短信加条数限制;短信加频率限制。测试方法:对于短信炸弹的验证,可以化归为对发短信接口的压力测试(并行测试),则测试方法为压力测试短信接口。测试工具:jmete...
Thanks Peter Corke for his great work of Robotics Toolbox .OS: Win10 x64 Matlab: R2016b Toolbox Release: 10.2We highly recommand to learn to use the Robotics System Toolbox designed by MathWor_python robotic toolbox-python
solc:solidity的编译器solidity编写的以太坊智能合约可通过命令行编译工具solc来进行编译,成为以太坊虚拟机中的代码。solc编译后最终部署到链上形成我们所见到的各种智能合约。作为一个solidity命令行编译工具,我们来看看官网都怎么说solc。so...
01 背景知识字符集在了解宽字节注入之前,我们先来看一看字符集是什么。字符集也叫字符编码,是一种将符号转换为二进制数的映射关系。几种常见的字符集:ASCII编码:单字节编码 latin1编码:单字节编码 gbk编码:使用一字节和双字节编码,0x00-0x7F范围内是一位,和 ASCII 保持一致。双字节的第一字节范围是0x81-0xFE UTF-8编码:使用一至四字节编码,0x......_宽字节
https://gameinstitute.qq.com/community/detail/106613次表面散射,英文全称Subsurface Scattering,简称SSS。指的是光线射入半透明材质,在内部发生散射后再透射出来的光线传播过程。真实世界中拥有次表面散射的材质有蜡烛、大理石、玉石以及人的皮肤等。要模拟物理上真实的次表面散射是很复杂的一件事,比较经典的次表面散射模型有BSSRDF..._sss