【深度学习】BLIP: 用于统一的视觉-语言理解和生成的引导式语言图像预训练

news/2024/5/18 13:28:14 标签: 深度学习, 人工智能BLIP, 论文

BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation

BLIP:用于统一的视觉-语言理解和生成的引导式语言图像预训练

论文:https://arxiv.org/abs/2201.12086

代码:https://github.com/salesforce/BLIP

文章目录

  • Abstract
  • 1. Introduction
  • 2. 相关工作
  • 3. 方法
  • 4. 实验和讨论
  • 5. 与现有技术的比较
  • 6. 附加消融研究
  • 7. 结论

Abstract

视觉语言预训练(VLP)已经提高了许多视觉语言任务的性能。然而,大多数现有的预训练模型在理解型任务或生成型任务中只表现出色于一方。此外,性能的提高主要是通过扩大从网络收集的带有噪音的图像文本对数据集来实现的,这不是一个最佳的监督来源。在本文中,我们提出了BLIP,一个新的VLP框架,可以灵活地用于视觉语言理解和生成任务。BLIP通过引导式生成标题的方式有效地利用了网络中的噪音数据,其中一个标题生成器生成合成标题,而一个过滤器则删除噪音标题。我们在广泛的视觉语言任务中取得了最先进的结果,如图像文本检索(平均召回率@1提高了2.7%),图像字幕生成(CIDEr提高了2.8%)和视觉问答(VQA分数提高了1.6%)。此外,BLIP还在零样本方式下直接应用于视频语言任务时表现出强大的泛化能力。我们已发布了代码、模型和数据集。

1. Introduction

视觉语言预训练最近在各种多模态下游任务中取得了巨大成功。

然而,现有方法存在两个主要限制:(1)模型视角:大多数方法要么采用基于编码器的模型(Radford等人,2021;Li等人,2021a),要么采用编码器-解码器(Cho等人,2021;Wang等人,2021)模型。然而,基于编码器的模型不太容易直接用于文本生成任务(例如图像字幕生成),而编码器-解码器模型尚未成功应用于图像文本检索任务。

(2)数据视角:大多数最先进的方法(例如CLIP(Radford等人,2021),ALBEF(Li等人,2021a),SimVLM(Wang等人,2021))在从网络收集的图像文本对上进行预训练。尽管通过扩大数据集规模可以获得性能提升,但我们的论文表明,嘈杂的网络文本对于视觉语言学习来说并不是最佳选择。

为此,我们提出了BLIP:引导式语言图像预训练,用于统一的视觉语言理解和生成。BLIP是一种新的VLP框架,可以执行比现有方法更广泛的下游任务。它从模型和数据的角度分别引入了两个贡献:(a)多模态编码器-解码器混合(MED):一种用于有效多任务预训练和灵活迁移学习的新模型架构。MED可以作为单模态编码器、基于图像的文本编码器或基于图像的文本解码器运行。该模型与三个视觉语言目标共同进行预训练:图像文本对比学习、图像文本匹配和图像条件语言建模。

(b)标题生成和筛选(CapFilt):一种用于从嘈杂的图像文本对中学习的新数据引导方法。

我们将预训练的MED微调为两个模块:一个标题生成器,用于生成网络图像的合成标题,以及一个筛选器,用于从原始网络文本和合成文本中删除嘈杂的标题。

我们进行了大量的实验和分析,并得出以下关键观察结果。
• 我们展示了标题生成器和筛选器通过引导式生成标题共同实现了各种下游任务的显著性能提升。我们还发现更多样化的标题产生了更大的增益。

• BLIP在广泛的视觉语言任务上取得了最先进的性能,包括图像文本检索、图像字幕生成、视觉问答、视觉推理和视觉对话。我们还在直接将模型迁移到两个视频语言任务时实现了最先进的零样本性能:文本到视频检索和视频问答。

在这里插入图片描述
图2. BLIP的预训练模型架构和目标(相同参数以相同颜色表示)。我们提出了多模态编码器-解码器混合,这是一个统一的视觉语言模型,可以执行以下三种功能之一:(1)单模态编码器使用图像文本对比学习(ITC)损失进行训练,以对齐视觉和语言表示。 (2)基于图像的文本编码器使用额外的交叉注意力层来建模视觉语言交互,并通过图像文本匹配(ITM)损失进行训练,以区分正面和负面的图像文本对。 (3)基于图像的文本解码器将双向自注意力层替换为因果自注意力层,并与编码器共享相同的交叉注意力层和前馈网络。解码器通过语言建模(LM)损失进行训练,以生成给定图像的标题。

在这里插入图片描述

2. 相关工作

2.1 视觉语言预训练
视觉语言预训练(VLP)旨在通过在大规模图像文本对上对模型进行预训练,以提高下游视觉和语言任务的性能。由于获取人工标注文本的费用高昂,大多数方法(Chen等人,2020;Li等人,2020;2021a;Wang等人,2021;Radford等人,2021)使用从网络中爬取的图像和替代文本对(Sharma等人,2018;Changpinyo等人,2021;Jia等人,2021)。尽管使用了基于规则的简单过滤器,但网络文本中仍然存在噪音。然而,噪音的负面影响在扩大数据集的性能提升之下往往被忽视。我们的论文表明,嘈杂的网络文本对于视觉语言学习来说不是最佳选择,并提出了CapFilt,以更有效地利用网络数据集。

已经有许多尝试将各种视觉和语言任务统一到一个框架中(Zhou等人,2020;Cho等人,2021;Wang等人,2021)。最大的挑战是设计能够执行基于理解的任务(例如图像文本检索)和基于生成的任务(例如图像字幕生成)的模型架构。既有的基于编码器的模型(Li等人,2021a;b;Radford等人,2021)也不能在这两种类型的任务上都表现出色,而单一的统一编码器-解码器(Zhou等人,2020)也限制了模型的能力。我们提出的多模态编码器-解码器混合模型在各种下游任务上提供了更多的灵活性和更好的性能,同时保持了预训练的简单和高效性。

2.2 知识蒸馏
知识蒸馏(KD)(Hinton等人,2015)旨在通过从教师模型中提取知识来提高学生模型的性能。自蒸馏是KD的一种特殊情况,其中教师和学生具有相同的大小。已经证明自蒸馏对于图像分类(Xie等人,2020)以及最近的VLP(Li等人,2021a)是有效的。与大多数现有的KD方法不同,这些方法只是简单地强制学生与教师具有相同的类别预测,我们提出的CapFilt可以被解释为在VLP背景下执行KD的更有效方式,其中标题生成器通过语义丰富的合成标题提取知识,而筛选器通过移除噪音标题来提取知识。

2.3 数据增强
虽然数据增强(DA)在计算机视觉中被广泛采用(Shorten&Khoshgoftaar,2019),但对于语言任务来说,DA并不那么直接。最近,生成式语言模型已经用于为各种自然语言处理任务合成示例(Kumar等人,2020;Anaby-Tavor等人,2020;Puri等人,2020;Yang等人,2020)。与这些方法不同,这些方法侧重于低资源的仅语言任务,我们的方法展示了在大规模视觉语言预训练中合成标题的优势。

3. 方法

我们提出了BLIP,一个统一的VLP框架,用于从嘈杂的图像文本对中学习。本节首先介绍了我们的新模型架构MED及其预训练目标,然后描述了用于数据集引导的CapFilt。

3.1 模型架构
我们采用了视觉变换器(Dosovitskiy等人,2021)作为我们的图像编码器,它将输入图像分成多个块并将它们编码为嵌入序列,其中还有一个额外的[CLS]标记来表示全局图像特征。与使用预训练对象检测器进行视觉特征提取(Chen等人,2020)相比,使用ViT更加计算友好,而且已经被较新的方法采用(Li等人,2021a;Kim等人,2021)。

为了预训练具有理解和生成能力的统一模型,我们提出了多模态编码器-解码器(MED),这是一个多任务模型,可以在以下三种功能之一中运行:(1)单模态编码器,分别编码图像和文本。文本编码器与BERT(Devlin等人,2019)相同,其中将[CLS]标记附加到文本输入的开头以总结句子。

(2)基于图像的文本编码器,在文本编码器的每个变换块的自注意力(SA)层和前馈网络(FFN)之间插入了一个额外的交叉注意力(CA)层,以注入视觉信息。任务特定的[Encode]标记附加到文本上,[Encode]的输出嵌入用作图像文本对的多模态表示。

(3)基于图像的文本解码器,它将图像文本编码器中的双向自注意力层替换为因果自注意力层。使用[Decode]标记来表示序列的开头,使用一个表示序列结束的标记来表示序列的结束。

3.2 预训练目标
我们在预训练期间共同优化了三个目标,包括两个基于理解的目标和一个基于生成的目标。每个图像文本对只需要一次前向传播通过计算量较大的视觉变换器,以及三次前向传播通过文本变换器,其中不同的功能用于计算下面描述的三个损失。

图像-文本对比损失(ITC)激活了单模态编码器。它旨在通过鼓励正面图像文本对具有类似的表示来对齐视觉变换器和文本变换器的特征空间,以对抗负面对。已经证明这是一个有效的目标,用于改进视觉和语言理解(Radford等人,2021;Li等人,2021a)。我们遵循Li等人(2021a)的ITC损失,引入了一个动量编码器来产生特征,并从动量编码器创建软标签作为训练目标,以考虑负面对中的潜在正面。

图像-文本匹配损失(ITM)激活了基于图像的文本编码器。它旨在学习捕捉视觉和语言之间细粒度对齐的图像文本多模态表示。ITM是一个二进制分类任务,其中模型使用ITM头(线性层)来预测给定多模态特征的图像文本对是正面(匹配)还是负面(不匹配)。为了找到更具信息性的负例,我们采用了Li等人(2021a)的硬负例挖掘策略,其中在一个批次中具有更高对比相似性的负对更有可能被选中来计算损失。

语言建模损失(LM)激活了基于图像的文本解码器,旨在生成给定图像的文本描述。它优化交叉熵损失,以以自回归方式最大化文本的似然性。在计算损失时,我们应用了0.1的标签平滑。与广泛用于VLP的MLM损失相比,LM使模型具有将视觉信息转化为连贯标题的泛化能力。

为了在利用多任务学习的同时执行高效的预训练,文本编码器和文本解码器除了SA层之外的所有参数都是共享的。原因是编码和解码任务之间的差异最好由SA层捕捉。具体而言,编码器使用双向自注意力来构建当前输入标记的表示,而解码器使用因果自注意力来预测下一个标记。另一方面,嵌入层、CA层和FFN在编码和解码任务之间的功能类似,因此共享这些层可以提高训练效率并受益于多任务学习。

3.3 CapFilt
由于注释成本高昂,存在一定数量的高质量人工标注的图像文本对f(Ih; Th)g(例如COCO(Lin等人,2014))。最近的工作(Li等人,2021a;Wang等人,2021)利用了从网络自动收集的大量图像和替代文本对f(Iw; Tw)g。然而,替代文本通常不能准确描述图像的视觉内容,使其成为不太理想的学习视觉语言对齐的噪音信号。

我们提出了Captioning and Filtering(CapFilt),一种改进文本语料库质量的新方法。图3对CapFilt进行了说明。它引入了两个模块:一个标题生成器用于根据网络图像生成标题,一个筛选器用于删除嘈杂的图像文本对。标题生成器和筛选器都是从相同的预训练MED模型初始化,并在COCO数据集上分别进行微调。

微调是一个轻量级的过程。

具体来说,标题生成器是一个基于图像的文本解码器。它使用LM目标进行微调,以便根据图像解码文本。给定网络图像Iw,标题生成器生成与每个图像对应的合成标题Ts。

筛选器是一个基于图像的文本编码器。它使用ITC和ITM目标进行微调,以学习文本是否与图像匹配。筛选器会删除原始网络文本Tw和合成文本Ts中的嘈杂文本,其中如果ITM头将文本预测为与图像不匹配,则将其视为嘈杂文本。最后,我们将筛选后的图像文本对与人工标注的对组合成一个新的数据集,用于预训练一个新的模型。

4. 实验和讨论

在本节中,我们首先介绍预训练细节,然后对我们的方法进行详细的实验分析。

4.1 预训练细节
我们的模型是在PyTorch(Paszke等人,2019)中实现的,并在两个16-GPU节点上进行了预训练。图像变换器是从在ImageNet上预训练的ViT(Touvron等人,2020;Dosovitskiy等人,2021)初始化的,文本变换器是从BERTbase(Devlin等人,2019)初始化的。我们探索了两种ViT变体:ViT-B/16和ViT-L/16。除非另有说明,本文中报告的所有结果都使用ViT-B作为“BLIP”。我们使用批处理大小为2880(ViT-B)/ 2400(ViT-L)对模型进行了20轮预训练。我们使用带有0.05权重衰减的AdamW(Loshchilov&Hutter,2017)优化器。学习率在预热到3e-4(ViT-B)/ 2e-4(ViT-L)后,以0.85的速率线性衰减。在预训练期间,我们对图像进行了随机裁剪,分辨率为224×224,并在微调期间将图像分辨率增加到384×384。我们使用与Li等人(2021a)相同的预训练数据集,总共包括1400万张图像,包括两个人工标注数据集(COCO和Visual Genome(Krishna等人,2017))和三个网络数据集(概念字幕(Changpinyo等人,2021),概念12M(Changpinyo等人,2021),SBU字幕(Ordonez等人,2011))。我们还尝试了一个额外的网络数据集LAION(Schuhmann等人,2021),其中包含1.15亿张带有更多嘈杂文本的图像。有关数据集的更多详细信息可以在附录中找到。

4.2 CapFilt的效果
在表1中,我们比较了在不同数据集上进行预训练的模型,以展示CapFilt在下游任务中的有效性,包括微调和零-shot设置下的图像文本检索和图像字幕生成。

当仅应用标题生成器或筛选器到具有1400万张图像的数据集时,可以观察到性能改善。当两者一起应用时,它们的效果相辅相成,与使用原始网络文本相比,可以实现显著的改进。

CapFilt可以在更大的数据集和更大的视觉骨干网络下进一步提高性能,这验证了它在数据大小和模型大小方面的可扩展性。此外,通过使用ViT-L的大型标题生成器和筛选器,还可以改善基础模型的性能。
4.3 多样性对合成标题至关重要
在CapFilt中,我们使用核采样(Holtzman等人,2020)生成合成标题。核采样是一种随机解码方法,其中每个标记都是从累积概率大于阈值p的标记集中随机采样的(在我们的实验中p = 0.9)。在表2中,我们将其与波束搜索进行了比较,波束搜索是一种旨在生成概率最高的标题的确定性解码方法。尽管核采样更具噪声性,从筛选器的更高噪声比率可以看出,但它导致了明显更好的性能。我们假设原因是核采样生成了更多多样性和令人惊

讶的标题,其中包含了模型可以受益的更多新信息。另一方面,波束搜索倾向于生成数据集中常见的安全标题,因此提供了更少的额外知识。

4.4 参数共享和解耦
在预训练期间,文本编码器和解码器除了自注意力层之外,共享所有参数。在表3中,我们评估了使用不同参数共享策略进行预训练的模型,在这些模型中,预训练是在具有网络文本的1400万张图像上进行的。如结果所示,除了SA层之外共享所有层次会比不共享导致更好的性能,同时还减小了模型大小,从而提高了训练效率。如果共享SA层,由于编码任务和解码任务之间的冲突,模型的性能将下降。

在CapFilt期间,标题生成器和筛选器在COCO上都进行了端到端微调。在表4中,我们研究了标题生成器和筛选器是否以与预训练相同的方式共享参数的效果。在下游任务中,性能下降,我们主要归因于确认偏见。由于参数共享,标题生成器生成的嘈杂标题不太可能被筛选器过滤掉,这表现为较低的噪声比率(8%相对于25%)。

5. 与现有技术的比较

在本节中,我们将BLIP与现有的VLP方法在广泛的视觉语言下游任务上进行比较2。接下来,我们简要介绍每个任务和微调策略。更多细节可以在附录中找到。

5.1. 图像-文本检索
我们在COCO和Flickr30K(Plummer等人,2015)数据集上分别评估BLIP的图像到文本检索(TR)和文本到图像检索(IR)。我们使用ITC和ITM损失来微调预训练模型。为了提高推理速度,我们遵循Li等人(2021a)的方法,首先基于图像文本特征相似性选择k个候选项,然后根据它们的成对ITM分数对所选候选项进行重新排序。

我们设置COCO的k = 256,Flickr30K的k = 128。

如表5所示,与现有方法相比,BLIP在性能上取得了显著的改进。使用相同的1400万预训练图像,BLIP在COCO上的平均召回率@1上优于以前的最佳模型ALBEF +2.7%。我们还通过直接将在COCO上微调的模型传输到Flickr30K来执行零-shot检索。

结果如表6所示,其中BLIP也大幅超越了现有方法。

5.2. 图像字幕生成
我们考虑了两个图像字幕数据集:NoCaps(Agrawal等人,2019)和COCO,都是使用在COCO上使用LM损失微调的模型进行评估的。与Wang等人(2021)类似,我们在每个标题的开头添加了一个提示“a picture of”,这导致了稍微更好的结果。如表7所示,使用1400万预训练图像的BLIP在性能上大幅优于使用类似数量的预训练数据的方法。使用129M图像的BLIP达到了与使用200M图像的LEMON相媲美的性能。请注意,LEMON需要计算密集型的预训练对象检测器和更高分辨率(800×1333)的输入图像,因此推理时间明显比不需要检测器的BLIP慢,后者使用较低分辨率(384×384)的输入图像。

5.3. 视觉问题回答(VQA)
VQA(Antol等人,2015)要求模型在给定图像和问题的情况下预测答案。我们不将VQA视为多答案分类任务(Chen等人,2020;Li等人,2020),而是遵循Li等人(2021a)的方法,将其视为答案生成任务,从而实现了开放式VQA。

如图5(a)所示,在微调期间,我们重新排列了预训练模型,其中图像问题首先被编码为多模态嵌入,然后交给答案解码器。使用地面真实答案作为目标,对VQA模型进行了LM损失微调。

结果如表8所示。使用1400万图像,BLIP在测试集上优于ALBEF +1.64%。使用129M图像,BLIP在使用13倍更多预训练数据和更大的视觉骨干(具有额外卷积阶段)的SimVLM之上取得更好的性能。

5.4. 自然语言视觉推理(NLVR2)
NLVR2(Suhr等人,2019)要求模型预测一句话是否描述了一对图像。为了使模型能够在两个图像上进行推理,我们对我们的预训练模型进行了简单修改,这导致了比以前的方法(Li等人,2021a;Wang等人,2021)更具计算效率的体系结构。如图5(b)所示,对于图像文本编码器中的每个变换器块,存在两个交叉注意层来处理两个输入图像,并且它们的输出被合并并馈送到FFN。

两个CA层的初始化来自相同的预训练权重。合并层在编码器的前6层中执行简单的平均池化,在第6-12层中执行连接,然后是线性投影。在[Encode]标记的输出嵌入上应用MLP分类器。如表8所示,BLIP在除执行自定义预训练的ALBEF之外的所有现有方法上都取得

了更好的性能。有趣的是,对NLVR2的性能并不会因为额外的网络图像而受益太多,可能是由于网络数据和下游数据之间的领域差异。

5.5. 视觉对话(VisDial)
VisDial(Das等人,2017)在自然对话环境中扩展了VQA,模型需要根据图像问题对来预测答案,同时考虑对话历史和图像字幕。我们遵循辨别性设置,其中模型对一组答案候选项进行排名(Gan等人,2019;Wang等人,2020;Murahari等人,2020)。如图5©所示,我们将图像和字幕嵌入连接起来,并通过交叉注意来将它们传递给对话编码器。使用ITM损失对对话编码器进行微调,以区分问题的整个对话历史和图像字幕嵌入是否为问题的真实答案。如表9所示,我们的方法在VisDial v1.0验证集上取得了最新的性能。

5.6. 零-shot传输到视频-语言任务
我们的图像-语言模型在视频-语言任务上具有强大的泛化能力。在表10和表11中,我们执行零-shot传输到文本到视频检索和视频问题回答,其中直接评估在COCO检索和VQA上进行微调的模型。为了处理视频输入,我们均匀采样每个视频的n帧(检索为n = 8,QA为n = 16),并将帧特征连接成一个单一序列。请注意,这种简单的方法忽略了所有的时间信息。

尽管存在领域差异和缺乏时间建模,我们的模型在文本到视频任务上都实现了最先进的性能。对于文本到视频检索,零射击的BLIP甚至在召回@1上优于在目标视频数据集上进行微调的模型+12.4%。如果使用BLIP模型初始化具有时间建模的视频-语言模型(例如,用TimeSformer(Bertasius等人,2021)替代我们的ViT)并在视频数据上进行微调,还可以实现进一步的性能提升。

6. 附加消融研究

在本节中,我们对CapFilt进行了附加的消融实验。

CapFilt的改进不是由于更长的训练。

由于引导数据集包含比原始数据集更多的文本,因此使用引导数据集进行相同数量的纪元训练需要更长的时间。为了验证CapFilt的有效性不是由于更长的训练,我们复制了原始数据集中的网络文本,以便每个纪元具有与引导数据集相同数量的训练样本。如表12所示,使用带噪音的网络文本进行更长时间的训练并不会提高性能。

应该在引导数据集上训练新模型。引导数据集用于预训练一个新模型。我们调查了使用先前的预训练模型继续在引导数据集上进行训练的效果。表13显示继续训练没有帮助。

这一观察结果与知识蒸馏的通常实践一致,其中学生模型不能从老师那里初始化。

7. 结论

我们提出了BLIP,一个新的VLP框架,具有在各种下游视觉-语言任务中的最先进性能,包括基于理解和生成的任务。BLIP使用从大规模嘈杂的图像文本对中引入多样化的合成字幕和去除嘈杂字幕来引导多模态编码器-解码器模型。我们发布了我们的引导数据集,以促进未来的视觉语言研究。

还有一些潜在的方向可以进一步提升BLIP的性能:(1) 多轮的数据集引导;(2) 为了进一步扩大预训练语料库,每个图像生成多个合成字幕;(3) 通过训练多个不同的字幕生成器和过滤器以及在CapFilt中结合它们的力量来进行模型集成。我们希望我们的论文激发了未来的工作,重点放在模型和数据两个方面的改进上,这是视觉-语言研究的基础。


http://www.niftyadmin.cn/n/5047511.html

相关文章

深入理解Linux中信号处理过程

🔥🔥 欢迎来到小林的博客!!       🛰️博客主页:✈️林 子       🛰️博客专栏:✈️ Linux       🛰️社区 :✈️ 进步学堂       &#x1f6f0…

杀毒软件如何识别病毒43.240.74.X

计算机病毒最早出现在20世纪80年代,当时只存在与实验室中,未广泛传播。病毒的滋生与萌芽期是在80年代末。那一时期病毒攻击也比较单一,主要是感染磁盘引导扇区,或者是感染可执行文件。特征也比较明显。后续随着互联网的发展&#…

【每日一题Day336】LC146最近最少使用缓存 | 哈希表+链表

最近最少使用缓存【LC146】 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值…

python解释def __init__(self, *args, **kwargs)

def init(self, *args, **kwargs): 其含义代表什么? 这种写法代表这个方法接受任意个数的参数如果是没有指定key的参数,比如单单’apple’,‘people’,即为无指定,则会以list的形式放在args变量里面如果是有指定key的…

【Python基础】S01E01 变量与字符串

S01E01 变量与字符串 变量变量的命名规则 字符串字符串的表达方法字符串的基本操作 数整数与浮点数数中下划线常量 注释 变量 变量的命名规则 变量名只能包含字母、数字和下划线; 变量名能以字母或下划线开头,但是不能以数字开头; 变量名不能…

使用ElementUI完成登入注册的跨域请求提高开发效率

🎬 艳艳耶✌️:个人主页 🔥 个人专栏 :《Spring与Mybatis集成整合》​​​​​​​ ⛺️ 生活的理想,为了不断更新自己 ! 目录 ​编辑 1、前言 1.1.什么是ELementUI 2、完成登陆注册前端页面 2.1环境搭建 运行…

Fedora Linux 39 Beta 预估 10 月底发布正式版

Fedora 39 Beta 镜像于今天发布,用户可以根据自己的使用偏好,下载 KDE Plasma,Xfce 和 Cinnamon 等不同桌面环境版本,正式版预估将于 10 月底发布 Fedora 39 Beta 版本主要更新了 DNF 软件包管理器,并优化了 Anaconda …

linux之perf(6)report报告

Linux之perf(6)report统计 Author:Onceday Date:2023年9月23日 漫漫长路,才刚刚开始… 注:该文档内容采用了GPT4.0生成的回答,部分文本准确率可能存在问题。 参考文档: Tutorial - Perf Wiki (kernel.org)perf-re…