南通网站开发/网站推广优化公司
文章主要是对BLIP2 (使用冻结图像编码器和大型语言模型的Bootstrapping语言图像预训练)论文的阅读笔记,也对BLIP(用于统一视觉语言理解和生成的Bootstrapping语言图像预训练)算法进行了简单的介绍。
文章:
- BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
- BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
一、BLIP:用于统一视觉语言理解和生成的Bootstrapping语言图像预训练
关键贡献:使用Capitator(Cap)为网络图像生成合成字幕,并使用Filter(Filt)删除有噪声的字幕。
背景
- 大多方法基于编码器或者编码-解码器结构,编码器模型不太容易直接转移到文本生成任务,但是编码解码框架并未成功应用在图像文件检索任务中。
- 过去的CLIP中,文本-图像对的数据是从网上收集得到的,但是网络文本对于视觉语言预训练(VLP)是次优的。
两个贡献:
(a)编码器-解码器的多模式混合(MED):一种用于多任务预训练和灵活迁移学习的模型架构。
- 三种模式:单模式编码器、基于图像的文本编码器、基于图像的文字解码器。
- 三个预训练视觉语言目标:图像文本对比学习、图像文本匹配、图像语言。
(b) 字幕和过滤(CapFilt):从噪声图像-文本对中学习,进行数据增强,用于对MED微调。
- 字幕器:生成给定网络图像的合成字幕
- 过滤器:从原始网络文本和合成文本中去除噪声字幕
模型架构
BLIP预训练架构——基于编码器-解码器的多模式混合视觉语言模型
图2. BLIP的预训练模型架构和目标(相同的参数具有相同的颜色)。提出了编码器-解码器的多模式混合,可以在三个功能之一中操作:(1)用图像-文本对比(ITC)损失来训练单模式编码器,以对齐视觉和语言表示。(2) 基于图像的文本编码器使用额外的交叉注意力层来建模视觉-语言交互,并使用图像-文本匹配(ITM)损失进行训练,以区分正面和负面的图像-文本对。(3)基于图像的文本解码器用因果自注意层取代了双向自注意层,并与编码器共享相同的交叉注意层和前馈网络。解码器使用语言建模(LM)损失进行训练,以生成给定图像的字幕。
3.1 模型架构
提出了编码器-解码器的多模式混合,这是一个多任务视觉语言模型,可以在以下三个功能中选择进行操作:
- 单模式编码器,分别对图像和文本进行编码。文本编码器与BERT相同,其中[CLS]标记被附加到文本输入的开头以总结句子。图像编码器使用 ViT。
- 基于图像的文本编码器,通过在自注意(SA)层和文本编码器的每个变换器块的前馈网络(FFN)之间插入一个额外的交叉注意(CA)层来注入视觉信息。特定于任务的[Encode]标记被附加到文本,并且[Encode]的输出token被用作图像-文本对的多模式表示。
- 以图像为基础的文本解码器,使用因果自注意层取代了基于图像的文本编码器中的双向自注意层。[Decode]标记用于发出序列开始的信号,序列结束标记用于发出其结束的信号。
3.2 预训练目标
联合优化了三个目标,包括两个基于理解的目标和一个基于生成的目标,每个图像-文本对只需要一次前向通过计算量较大的视觉转换器,三次前向通过文本转换器:
- Image-Text Contrastive Loss (ITC) :集成 ALBEF 中的 ITC损失。通过鼓励正面图像文本对具有相似的表示,负面图像文本相反,对齐视觉变换器和文本变换器的特征空间
- Image-Text Matching Loss (ITM) :旨在学习图像-文本多模态表示,捕捉视觉和语言之间的细粒度对齐。ITM是一个二分类任务,给定其多模态特征,其中模型使用ITM头(线性层)来预测图像文本对是正(匹配)还是负(不匹配)
- Language Modeling Loss (LM) :旨在生成给定图像的文本描述。优化交叉熵损失,该损失训练模型以自回归方式最大化文本的可能性
3.3 CapFilt
背景:
- 有图像-文本对(Ih,Th)类似 COCO 的标注数据集较少
- CLIP中使用的网络收集的图片文本对通常不能准确地描述图像的视觉内容,这使得它们成为一个嘈杂的信号,对于学习视觉语言对齐来说是次优的。
图3. BLIP的学习框架。介绍了一种为网络图像生成合成字幕的字幕器,以及一种去除噪声图像-文本对的过滤器。字幕器和过滤器从相同的预训练模型初始化,并在小规模人工注释数据集上单独微调。bootstrapped数据集用于预训练新模型。
- 字幕器和过滤器都是从相同的预训练MED模型初始化的,并在COCO数据集上单独微调。微调是一个轻量级的过程。
- 字幕器是一个基于图像的文本解码器。它与LM目标进行了微调,以解码给定图像的文本。给定网络图像Iw,字幕制作者生成每个图像具有一个字幕的合成字幕Ts。
- 过滤器是一个基于图像的文本编码器。它与ITC和ITM目标进行了微调,以了解文本是否与图像匹配。过滤器去除原始网络文本Tw和合成文本Ts中的噪声文本,其中,如果ITM头预测文本与图像不匹配,则认为文本是噪声的。
- 最后将过滤后的图像-文本对与人类注释的对相结合,形成一个新的数据集,用于预训练新的模型。
二、BLIP2 :使用冻结图像编码器和大型语言模型的Bootstrapping语言图像预训练
图1 BLIP-2框架概述。按照两阶段策略预先训练了一个轻量级查询变换器 Q-Former,以弥补模态差距。第一阶段从冻结图像编码器中引导视觉语言表示学习。第二阶段从冻结的LLM引导视觉到语言的生成性学习,从而实现零样本指示的图像到文本生成。
BLIP2 优势
- 两阶段训练(表征学习阶段和生成学习阶段)有效利用冻结的预训练图像模型和语言模型,视觉问答、图像字幕和图像文本检索三个任务上取得了 SOTA
- 由 LLM (如 OPT、FlanT5) 提供支持,BLIP-2 可以被提示执行遵循自然语言指令的 zero-shot 图像到文本生成,这实现了诸如视觉知识推理、视觉对话等新兴功能
- 由于使用了冻结的单模态模型和轻量级的Q-Former,BLIP-2比现有技术的计算效率更高。比如,BLIP-2 在 zero-shot VQAv2 上比 Flamingo 高 8.7%,可训练参数减少了 54 倍
模型实现
Q-Former的实现
图2 (左)Q-Former和BLIP-2第一阶段视觉语言表征学习目标的模型架构。共同优化了三个目标,这三个目标强制执行查询(一组可学习token),以提取与文本最相关的视觉表示。(右)控制查询文本交互的每个目标的自注意掩码策略。
3.1 模型架构
Q-Former由两个变换器子模块组成,它们共享相同的自注意层:(1)与冻结图像编码器交互的用于视觉特征提取的图像变换器;(2) 既可以作为文本编码器又可以作为文本解码器的文本变换器。具体实现如下:
- 创建了一组可学习的Query token作为图像变换器的输入。
- Query通过自注意力层相互交互,并通过交叉注意层(每隔一个transformer块插入)与冻结的图像特征交互。
- Query还可以通过相同的自注意层与文本进行交互。根据预训练任务的不同,应用不同的自注意掩码来控制Query-文本交互。
- 用BERTbase的预训练权重初始化Q-Former,交叉注意力层是随机初始化的。Q-Former总共包含188M个参数。请注意,Query被视为模型参数。
实验中使用了32个Query,其中每个Query的维度为768(与Q-Former的隐藏维度相同)。使用Z来表示输出Query表示。Z的大小(32×768)远小于冻结图像特征的大小(例如,ViT-L/14的257×1024)。这种瓶颈架构与预训练目标一起工作,迫使查询提取与文本最相关的视觉信息。
3.2 从冻结图像编码器中进行视觉语言表示学习
在表示学习阶段,将Q-Former连接到冻结图像编码器,并使用图像-文本对进行预训练。受BLIP的启发,共同优化了三个共享相同输入格式和模型参数的预训练目标。每个目标在Query和文本之间使用不同的注意力mask策略来控制它们的交互(见图2)。
三个预训练目标:
-
图像-文本对比学习(ITC)学习对齐图像表示和文本表示,以使它们的相互信息最大化。它通过对比正对与负对的图像文本相似性来实现这一点。将来自图像转换器的输出查询表示Z与来自文本转换器的文本表示t对齐,其中t是[CLS]标记的输出嵌入。由于Z包含多个输出token(每个查询一个),首先计算每个查询输出与t之间的成对相似性,然后选择最高的一个作为图像-文本相似性。为了避免信息泄露,使用了一个单峰值自注意掩码,其中查询和文本不允许相互看到。由于使用了冻结图像编码器,与端到端方法相比,可以为每个GPU拟合更多的样本。因此可以使用in-batch negative,而不是BLIP中的动量队列。
-
基于图像的文本生成(ITG)损失训练 Q-Former在给定输入图像作为条件的情况下生成文本。由于Q-Former的架构不允许冻结图像编码器和文本token之间的直接交互,因此生成文本所需的信息必须首先由查询提取,然后通过自注意层传递给文本token。因此,查询被迫提取视觉特征,以捕获有关文本的所有信息。使用多模式因果自注意掩码来控制查询-文本交互,类似于UniLM中使用的掩码。查询可以相互关注,但不能关注文本标记。每个文本标记都可以处理所有查询及其以前的文本标记。 还将[CLS]令牌替换为新的[DEC]标记,作为通知解码任务的第一个文本token。
-
图像-文本匹配(ITM) 学习图像和文本表示之间的细粒度对齐。这是一项二元分类任务,要求模型预测图像-文本对是正(匹配)还是负(不匹配)。使用双向自注意掩码,所有查询和文本都可以相互关注。 输出查询嵌入Z来捕获多模式信息。将每个输出查询嵌入到一个两类线性分类器获得一个logit,并将所有查询的logits平均,作为输出匹配分数。采用了李等人的hard negative挖掘策略来创建信息negatives pairs。
3.3.从冻结LLM中引导视觉到语言生成学习
生成预训练阶段,将Q-Former(附带冻结图像编码器)连接到冻结LLM,以获取LLM的生成语言能力。如图3所示。
- 使用全连接(FC)层将输出查询嵌入Z线性投影到与LLM的文本嵌入相同的维度中。
- 将投影的Query嵌入预处理为输入文本嵌入。它们起到了软视觉提示的作用,将LLM置于Q-Former提取的视觉表示之上。
由于Q-Former已经过预训练,可以提取语言信息性的视觉表示,因此它有效地充当了一个信息瓶颈,将最有用的信息提供给LLM,同时去除不相关的视觉信息。这减轻了LLM学习视觉语言对齐的负担,从而缓解了灾难性的遗忘问题。
两种类型的LLM:
- 基于解码的LLM:在语言模型丢失的情况下进行预训练,其中冻结的LLM的任务是根据Q-Former的视觉表示生成文本。
- 基于编码器-解码器的LLM:使用前缀语言模型损失进行预训练,将文本分为两部分。前缀文本与视觉表示连接,作为LLM编码器的输入。后缀文本被用作LLM解码器的生成目标。
图3 BLIP-2对语言生成预训练的第二阶段, 从冻结的大型语言模型(LLM)中引导生成。(顶部)引导基于解码器的LLM(例如OPT)。(底部)引导基于编码器-解码器的LLM(例如FlanT5)。全连接层从Q-Former的输出维度适应所选LLM的输入维度。
3.4.模型预训练
预训练数据
- 使用与BLIP相同的预训练数据集,包括COCO、Visual Genome、CC3M、CC12M、SBU和来自LAION400M数据集的115M张图像。采用BLIP中的CapFilt方法为网络图像创建合成字幕。
- 具体地,用BLIPlarge字幕模型生成10个字幕,并基于CLIP-ViT-L/14模型生成的图像-文本相似性对合成字幕与原始网络字幕进行排序。将每个图像的前两个字幕作为训练数据,并在每个预训练步骤随机抽取一个。
经过预训练的图像编码器和LLM
- 对于冻结图像编码器,探索了两种最先进的预训练视觉转换器模型:(1)CLIP的ViT-L/14和(2)EVA-CLIP的ViT-g/14。删除了ViT的最后一层,并使用了倒数第二层的输出特性,这会带来稍好的性能。
- 对于冻结语言模型,探索了基于解码器的LLM的无监督训练的OPT模型族,以及基于编码器-解码器的LLMs的指令训练的FlanT5模型族。
训练前设置
- 第一阶段进行了250k步的预训,在第二阶段进行了80k步的预训。
- 在第一阶段中对ViT-L/ViT-g使用2320/1680的batch,在第二阶段中对OPT/FranT5使用1920/1520的batch。
- 在预训练期间,将冻结的ViTs和LLMs参数转换为FP16。预训练比现有的大规模VLP方法更便于计算。
- 所有模型都使用相同的预训练超参数集。
- 使用AdamW优化器,设置β1=0.9,β1=0.98,重量衰减为0.05。
- 使用余弦学习率衰减,峰值学习率为1e-4,线性预热为2k步。
- 第二阶段的最低学习率为5e-5。
- 使用大小为224×224的图像,并通过随机调整大小的裁剪和水平翻转进行增强。
实验结果
4.1.指示的零样本图像到文本生成
图4 使用BLIP-2模型w/ViT-g和FlanT5XXL的指示零样本图像到文本生成的精选示例,其中显示了广泛的功能,包括视觉对话、视觉知识推理、视觉共感推理、故事讲述、个性化图像到文本的生成等。
表1 BLIP-2在各种零样本视觉语言任务中的结果概述。与以前最先进的型号相比。BLIP-2在视觉语言预训练期间实现了最高的零样本性能,同时所需的可训练参数数量大大减少。。
表2 与最先进的零样本视觉问答方法进行比较
对表二的观察结果:更强的图像编码器或更强的LLM都会带来更好的性能。这一观察结果验证了BLIP-2是一种通用的视觉语言预训练方法,可以有效地在视觉和自然语言领域快速发展。这一观察结果得到了几个事实的支持:
- ViT-g在OPT和FlanT5方面都优于ViT-L。
- 在同一LLM系列中,较大的型号优于较小的型号。
- FlanT5是一种指令调谐LLM,在VQA上优于无监督训练的OPT。
图5 视觉语言表征学习对视觉对语言生成性学习的影响。如果没有表征学习,Q-Former就无法弥补模态缺口,导致零样本VQA的性能显著降低。
4.2.图像字幕
- 为图像字幕任务微调BLIP-2模型,该任务要求模型为图像的视觉内容生成文本描述。
- 使用提示“a photo of”作为LLM的初始输入,并在语言建模丢失的情况下训练模型生成标题。
- 在微调过程中保持LLM冻结,并与图像编码器一起更新Q-Former的参数。
- 结果如表3所示。与现有方法相比,BLIP-2在NoCaps上有了显著的改进,实现了最先进的性能,展示了对域外图像的强大泛化能力。
表3与NoCaps和COCO Caption上最先进的图像字幕方法的比较。所有方法都优化了微调过程中的交叉熵损失。其中C: CIDEr,S:SPICE,B@4:BLEU@4.
4.3.视觉问答
- 给定带注释的VQA数据,微调了Q-Former和图像编码器的参数,同时保持LLM冻结。
- 对开放式答案生成损失进行了微调,其中LLM接收Q-Former的输出和问题作为输入,并被要求生成答案。
- 为了提取与问题更相关的图像特征,在问题上附加了Q-Former条件。具体地说,问题标记被作为输入提供给Q-Former,并通过自注意层与查询交互,这可以引导Q-Former的交叉注意层关注信息更丰富的图像区域。
- 表4展示了BLIP-2在开放式生成模型中的结果。
表4 与最先进的模型进行比较,这些模型经过微调,可用于视觉问答。
4.4.图像文本检索
- 由于图像文本检索不涉及语言生成,直接对第一阶段的预训练模型进行微调,不使用LLM。具体而言,使用与预训练相同的目标(即ITC、ITM和ITG)在COCO上与Q-Former一起微调图像编码器。 结果如表5所示。与现有的零样本图像文本检索方法相比,BLIP-2实现了最先进的性能。
- ITC和ITM损失对于图像文本检索至关重要,因为它们直接学习图像文本相似性。表6显示了ITG的损失有利于图像文本检索。这一结果支持了在表示学习目标中的设计:ITG损失迫使查询提取与文本最相关的视觉特征,从而改善视觉语言对齐。
表5与最先进的图像-文本检索方法进行比较,在COCO上进行微调,并将零样本传输到Flickr30K。
Limitation
-
由于图文数据集大多数是一对一的匹配,所以很难让模型建立上下文的联系,主要是因为LLM模型的局限性(最近的LLM可以在给定少量例子的情况下进行上下文学习,但LLM无法从中学习单个序列中多个图像-文本对之间的相关性)Flamingo论文使用了一个来源紧密的交错图像和文本数据集(M3W),每个序列有多个图像和文本对。类似的数据集的创建也是未来工作的目标。
-
由于各种原因,BLIP-2的图像到文本生成可能会产生不令人满意的结果,包括LLM的知识不准确、激活了不正确的推理路径,或者没有关于新图像内容的最新信息(见图7)。
-
由于使用了冻结模型,BLIP-2继承了LLM的风险,例如输出攻击性语言、传播社会偏见或泄露私人信息。补救方法包括使用说明来指导模型的生成或在删除有害内容的过滤数据集上进行训练。
图6 使用BLIP-2型号w/ViT-g和FlanT5XXL生成指示的零样本图像到文本的输出示例不正确,分别是错误的建立联系,错误的推断依据,过时的知识库
图7 VQA微调的模型架构,其中LLM接收Q-Former的输出和问题作为输入,然后预测答案。还可以将该问题作为Q-Former的条件,使得提取的图像特征与该问题更相关。
表6 基于图像的文本生成(ITG)损失通过强制查询来提取与语言相关的视觉特征来提高图像文本检索性能
相关文章:

BLIP和BLIP2
文章主要是对BLIP2 (使用冻结图像编码器和大型语言模型的Bootstrapping语言图像预训练)论文的阅读笔记,也对BLIP(用于统一视觉语言理解和生成的Bootstrapping语言图像预训练)算法进行了简单的介绍。 文章:…...

微信小程序开发实战 ⑨(TabBar)
作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 Ǵ…...

微前端探秘:初始微前端、现有方案和未来趋势
初识微前端 微前端是什么 概念: 微前端是指存在于浏览器中的微服务。 微前端是一种类似于微服务的架构,它将微服务的理念应用于浏览器端,即将单页面前端应用由单一的单体应用转变为把多个小型前端应用聚合为一体的应用。这就意味着前端应用…...

运维(SRE)成长之路-第2天 文本编辑工具之神VIM
vi和vim简介 在Linux中我们经常编辑修改文本文件,即由ASCII, Unicode 或其它编码的纯文字的文件。之前介绍过nano,实际工作中我们会使用更为专业,功能强大的工具 文本编辑种类: 全屏编辑器:nano(字符工具…...

45从零开始学Java之详解static修饰符、静态变量和静态方法
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在前一篇文章中,壹哥给大家讲解了abstract关键字,从而我们掌握了抽象类与抽象…...

电商超卖,从业务到设计
编辑导语:超卖这一概念的定义可以从不同层面进行阐述,比如平台层面、渠道层面、仓库层面等。而假设因超卖导致订单难以履行,则容易让用户体验“打折”。为什么有时电商超卖的现象会发生?可以从哪些角度来降低超卖导致的风险&#…...

【MySQL】表的约束
表的约束 表的约束1. 空属性2. 默认值3. 列描述4. zerofill(自动补零)5. 主键—primary key5.1 复合主键 6. 自增长—auto_increment7.唯一键 --- unique8. 外键 --- foreign key…reference9. 综合案例 表的约束 真正约束字段的是数据类型,…...

【计算机网络】第一章 概述(下)
文章目录 第一章 概述1.5 计算机网络的性能指标1.5.1 速率1.5.2 带宽1.5.3 吞吐量1.5.4 时延 1.6 计算机网络体系结构1.6.1 常见的体系结构1.6.2 分层的必要性1.6.4 体系结构中的专用术语 1.8 习题 第一章 概述 1.5 计算机网络的性能指标 常用的 计算机网络 的性能指标有以下 …...

化工园区人员全过程轨迹化安全解决方案
1、项目背景 化工园区化工厂是生产安全重点单位,对人员定位管理需求强烈。对人员定位主要需求是:一般区域人数统计、人员轨迹、重点区域人员实时精准定位。 华安联大安全化工园区人员全过程轨迹化安全解决方案通过人员实时定位管理、移动轨迹追溯、险情…...

Java泛型中的T、E、K、V、?通配符,你确定都了解吗?
目录 前言 泛型带来的好处 泛型中通配符 小结 前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操…...

Jenkins部署及使用
Jenkins 1.定义 1.Jenkins是一款开源CI/CD软件,用于自动化各种任务,包括构建、测试和部署软件 1.CI/CD 1.CI:持续集成(Continuous Integration) 1.协同开发是目前主流的开发方式,一般由多位开发人员同时处理同一个应用的不同模块…...

UML类图(二)
相信希望,相信自己 上一章简单介绍了 设计模式的原则(一), 如果没有看过,请观看上一章 本文参考文章: 常见UML符号详解 UML (Unified modeling language) 统一建模语言,是一种用于软件系统分析和设计的语言工具, 它用于帮助软件开发人员进行…...

【IoU全总结】GIoU, DIoU, CIoU, EIoUFocal, αIoU, SIoU,WIoU【基础收藏】
🥑 Welcome to Aedream同学 s blog! 🥑 并不存在效果一定优秀的IoU,需要结合自己的网络、数据集试验。 不想深究原理可直接跳转总结。文内公式均为手打,非图片,方便查看 文章目录 L1 Loss,L2Loss࿰…...

docker 安装 mysql
第一步,安装docker ,确保centos环境符合要求,有网 yum install docker -y 第二步:拉取mysql 首先可以先查询支持的mysql: search # 拉取镜像 docker pull mysql # 或者 docker pull mysql:latest # 以上两个命令是一致的&…...

Java 流程控制之 for 循环
Java语言中的for循环是一种常用的循环结构,用于重复执行一段代码,直到指定的条件不再成立。在本篇博客中,我们将深入探讨Java中的for循环,包括其语法、用法和示例。 一、for循环的基本语法 for循环的基本语法如下: …...

Kubernetes那点事儿——暴露服务之Ingress
Kubernetes那点事儿——暴露服务之Ingress 前言一、ingress负载均衡器Ingress Controller路由规则Ingress 二、Ingress Controller三、案例 前言 在 k8s 集群中,如果我们将服务暴露出来,提供访问,可以使用Nodeport方式,但是Nodepo…...

八股文总结
文章目录 项目介绍1.不动产项目项目难点机器学习算法调研图像提取算法调研数据集-ImageNetXceptionVGGInceptionDensenetMobilenet 系统流程图 2.图书项目技术栈ShiroMybatisMyBatis:Mybatis Plus: 面试问题 Java基础基本数据类型反射接口和抽象类异常代理模式1. 静态代理2. 动…...

【浅学 MyBatis 】
MyBatis 笔记记录 一、MyBatis基础1. MyBatis介绍及快速入门2. 相关API介绍2.1 Resources2.2 SqlSessionFactory&&SqlSessionFactoryBuilder2.3 SqlSession 3. 映射配置文件4. 核心配置文件4.1 规范写法4.2 参数和返回类型_起别名 5. 引入Log4j 二、MyBatis进阶1. 接口…...

Windows版Redis安装
最近电脑重装了系统,很多常用的软件、应用都没有了,所以需要重新装,所以想借此机会把一些安装比较复杂的应用的安装过程,重新记录一下,方便后续, 安装 Redis默认只有Linux的版本,但是微软为了更…...

Flume面试题二十道
什么是Apache Flume? 参考答案:Apache Flume是一个可靠、分布式、可扩展的日志收集和聚合系统。它用于将大量的日志数据从不同的源(如Web服务器、应用程序日志)传输到目标(如Hadoop、HBase)中进行存储和分析…...

单链表OJ题:LeetCode--138.复制带随即指针的链表
朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第138道单链表OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏:数据结构与算法 个 人…...

Chapter7: SpringBoot与数据访问
尚硅谷SpringBoot顶尖教程 1. JDBC 1.1 依赖及配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency><groupId>mysql</groupId…...

【Sqlite3】maraidb和sqlite3部分命令操作区别
maraidb和sqlite3部分命令操作区别记录 1.安装sqlite3 在实现我的视频点播系统项目时,我尝试封装了两种数据库的调用逻辑 mysql(maraidb)sqlite3 这里封装sqlite3的原因是,sqlite3主要针对的就是嵌入式数据库,其性能…...

Linux中新建用户使用sudo问题
文章目录 sudo问题 sudo问题 sudo:权限提示指令,当使用sudo这条指令时,会将普通用户的权限提升为root权限 但是在命令行新建用户,这个用户使用sudo指令对一条指令提权是用不了的 这个用户没有在sudoers file这个文件中ÿ…...

Sentinel源码分析-ProceesorSlotChain调用链及树状资源节点
Sentinel 实现流控,隔离,降级等功能,本质要做两件事: 数据统计: 统计某个资源的访问数据(QPS,RT(响应时间),异常比例)等信息规则判断: 判断流控规…...

springboot 连接 kafka集群(kafka版本 2.13-3.4.0)
springboot 连接 kafka集群 一、环境搭建1.1 springboot 环境1.2 kafka 依赖 二、 kafka 配置类2.1 发布者2.1.1 配置2.1.2 构建发布者类2.1.3 发布消息 2.2 消费者2.2.1 配置2.2.2 构建消费者类2.2.3 进行消息消费 一、环境搭建 1.1 springboot 环境 JDK 11 Maven 3.8.x spr…...

Nacos配置中心使用(Spring Cloud版)
目标 向项目中集成Nacos配置。原项目是一个SpringBoot项目。这里假设我们无法修改原有项目的SpringBoot版本。 注意 在不动SpringBoot版本的前提下,根据SpringBoot的版本,确定Spring Cloud和Nacos版本。Nacos版本其实就是Spring Cloud Alibaba版本。在…...

STM32F407硬件I2C实现MPU6050通讯(CUBEIDE)
STM32F407硬件I2C实现MPU6050通讯 文章目录 STM32F407硬件I2C实现MPU6050通讯cubeide设置写操作与读操作函数实现复位,读取温度,角度等函数封装mpu6050.cmpu6050.h代码分析 DMP移植1.修改头文件路径为自己的头文件路径2.修改I2C读写函数为自己mcu平台的读…...

HTML5 语义元素(一)页面结构
本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>、<aside>、<figure>、<figcaption>、<footer>、<header>、<main>、<nav>、<section>等元素。 目录 1. 语义元素介绍 1.…...

嵌套滚动实践:onInterceptTouchEvent与NestedScrolling【实用为准】
嵌套滚动:内外两层均可滚动,比如上半部分是一个有限的列表,下半部分是WebView,在内层上半部分展示到底的时候,外部父布局整体滚动内部View,将底部WevView拉起来,滚动到顶部之后再将滚动交给内部…...