万字长文解读深度学习——多模态模型BLIP2
🌺历史文章列表🌺
深度学习——优化算法、激活函数、归一化、正则化
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
万字长文解读深度学习——卷积神经网络CNN
万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN
万字长文解读深度学习——Transformer
深度学习——3种常见的Transformer位置编码【sin/cos、基于频率的二维位置编码(2D Frequency Embeddings)、RoPE】
万字长文解读深度学习——GPT、BERT、T5
万字长文解读深度学习——ViT、ViLT、DiT
DiT(Diffusion Transformer)详解——AIGC时代的新宠儿
万字长文解读深度学习——CLIP、BLIP
万字长文解读深度学习——AE、VAE
万字长文解读深度学习——GAN
万字长文解读深度学习——训练、优化、部署细节
推荐阅读:
BLIP2-图像文本预训练论文解读
【多模态】BLIP-2模型技术学习
文章目录
- 回顾BLIP
- BLIP的问题及BLIP2的优化
- 1. 模块化架构设计
- 2. 引入 Q-Former 模块
- 3. 分阶段训练策略
- 4. 减少计算开销
- BLIP2
- 架构
- 表征学习阶段 Representation Learning Stage
- 生成式预训练阶段 Generative Pre-training Stage
回顾BLIP
论文:BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation
BLIP 是旨在改进图像-文本联合学习的效率多模态模型,特别是通过生成任务和对比学习结合的方式,在低监督甚至无监督情况下提升模型性能。BLIP 的创新点在于它通过多任务预训练和自引导学习(bootstrapping)机制,能够以更少的数据达到更好的性能表现。
BLIP 的架构设计包含图像编码器、文本编码器、视觉文本编码器、视觉文本解码器。它结合了对比学习和生成式任务,以自引导的方式提升模型性能。
BLIP的问题及BLIP2的优化
在 BLIP 的基础上,BLIP2 进行了以下几项主要优化,这些优化显著提升了模型的性能、计算效率和适配性:
1. 模块化架构设计
- BLIP 的问题:
- BLIP 的图像编码器、文本编码器、视觉文本编码器和解码器之间的紧密耦合关系,是造成训练成本高、灵活性不足的重要原因。
- BLIP 的架构限制了视觉编码器和语言模型的选择,适配性不足。
- BLIP2 的优化:
- 采用模块化设计,将模型分为三个模块:
- 视觉编码器(Image Encoder):用于提取图像的底层视觉特征(支持复用已有的预训练视觉模型,如 CLIP 或 ViT)。
- Q-Former(Querying Transformer):用于从视觉特征中提取与语言相关的多模态嵌入。
- 预训练语言模型(LLM, Large Language Model):用于处理生成任务,如文本生成或问答任务。
- 模块化设计使得 BLIP2 可以复用现有的强大视觉模型(如 CLIP、ViT)和语言模型(如 GPT、OPT),无需端到端联合训练,大大降低了开发和训练成本。
- 采用模块化设计,将模型分为三个模块:
2. 引入 Q-Former 模块
- BLIP 的问题:
- BLIP 直接将视觉特征与语言模型对接,特征提取过程可能包含冗余信息,导致对齐效率较低。
- BLIP2 的优化:
- 引入了 Q-Former,这是一个轻量级的变换器模块,用于从视觉特征中提取与语言模态相关的嵌入表示:
- 用于从视觉编码器生成的高维视觉特征中提取与语言模态相关的低维嵌入表示,从而实现高效的图像-文本对齐。
- Q-Former 的加入显著提升了图像-文本对齐的效果,同时减少了计算负担。
- 引入了 Q-Former,这是一个轻量级的变换器模块,用于从视觉特征中提取与语言模态相关的嵌入表示:
3. 分阶段训练策略
- BLIP 的问题:
- BLIP 需要联合训练四个组件,优化难度大,训练时间长,硬件需求高。
- BLIP2 的优化:
- 分阶段训练策略:
- 第一阶段:图像-语言对齐:
- 使用视觉编码器和Q-Former。但是冻结视觉编码器的权重(如 CLIP 或 ViT 的预训练模型),仅训练 Q-Former 模块,通过对比学习和图文匹配任务优化视觉-语言的对齐表示。
- 训练 Q-Former 模块,让其能够从视觉编码器生成的高维特征中提取与语言模态相关的信息。实现视觉模态和语言模态的对齐,构建统一的多模态嵌入表示。
- 第二阶段:文本生成任务:
- 使用Q-Former和将预训练语言模型。但是冻结的预训练语言模型(如 GPT 或 OPT),仅训练 Q-Former 来适应生成任务。
- 使用 Q-Former 提取的多模态嵌入作为语言模型的输入,适配预训练语言模型(如 GPT、OPT 等)进行文本生成任务。
- 第一阶段:图像-语言对齐:
- 这种策略避免了对大型语言模型的联合训练,显著降低了训练成本。
- 分阶段训练策略:
4. 减少计算开销
- BLIP 的问题:
- 计算成本高,特别是在需要训练大型语言模型时,对硬件资源需求较高。
- BLIP2 的优化:
- 通过模块化设计和冻结预训练模型参数,计算需求集中在轻量级的 Q-Former 模块上,减少了大规模计算开销。
- 与 BLIP 相比,BLIP2 的训练速度更快,资源需求更低,适合在资源有限的环境中使用。
BLIP2
论文:BLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models
上一节已经给出了问题及其解决方案,下面将介绍详细的实现。其改进主要体现在在架构和训练过程的优化。
架构
BLIP本质上是在训练一个全新的视觉-语言模型,该过程成本大。为了解决这个问题,本文提出的方法是基于现有高质量视觉模型(frozen冻结)及语言大模型(frozen冻结)进行联合训练,同时为减少计算量及防止遗忘,论文对预训练模型进行frozen。为了实现视觉和语言的对齐,作者提出Querying Transformer (Q- Former) 预训练。
模型的架构实现为·冻结的预训练图像编码器 + Q-Former + 冻结的预训练大型语言模型
,如下图:
图 1. BLIP-2 框架概述:我们通过预训练一个轻量级的查询变换器(Querying Transformer),采用两阶段策略来弥合模态间的差距。第一阶段从冻结的图像编码器中引导视觉-语言表征学习【论文中图2】。第二阶段从冻结的大型语言模型(LLM)中引导视觉到语言的生成式学习【论文中图3】,从而实现零样本的指令化图像到文本生成(更多示例请参见图 4)。
Q-Former的核心结构如下:
Q-Former 是 BLIP-2 中用于视觉-语言交互的核心部分。它用于视觉输入(图像)和语言输入(文本)之间的相互理解和转换。图中将其分成了两个部分:图像 Transformer(左半部分)和文本 Transformer(右半部分),它们共享相同自注意力层self attention,使用 B E R T b a s e BERT_{base} BERTbase的预训练权重初始化QFormer,并且随机初始化交叉注意层。Q-Former总共包含1.88亿个参数。
Learned Queries被视为模型参数。在我们的实验中,我们使用了32个查询,其中每个查询具有768维(与Q-Former的隐藏维相同)。我们使用Z来表示输出查询表示。Z的大小(32 × 768)远小于冻结图像特征的大小(例如,ViT-L/14的大小为257 × 1024)。这种瓶颈结构与我们的预训练目标一起工作,迫使查询提取与文本最相关的视觉信息。
-
图像 Transformer(左半部分)红框:
- 图像 Transformer 负责与Frozen Image Encoder交互,融合Learned Queries和Input Image中的信息,提取图像特征,
-
文本 Transformer(右半部分)绿框:
- 文本 Transformer 主要用于处理输入的文本信息(Learned Queries和Input Text)。它既可以作为一个文本编码器,也可以作为文本解码器,用来生成或理解图像相关的文本内容。
在上图中,有三个输入,分别是Learned Queries、Input Image 和 Input Text 是三个重要的组成部分,它们在 Q-Former 模块中共同作用,进行图像-文本融合和交互。下面是它们的详细解释:
-
Learned Queries (学习到的查询)
-
Learned Queries 是 Q-Former 中的一种机制,指的是模型通过训练学习得到的一组“查询向量”。这些查询向量用于从图像和文本中提取信息,帮助模型聚焦于最相关的部分。它们是一个动态学习的参数,在训练过程中更新和优化,以便更好地捕捉图像和文本之间的关系。
-
在 BLIP-2 中,Learned Queries 主要通过交互式方式提取图像和文本的交叉信息。它们在图像和文本的交互过程中充当“桥梁”,帮助模型理解图像和文本之间的关联。
-
作用:在 Q-Former 中,Learned Queries 的作用是引导图像和文本信息的融合,并决定哪些信息是最重要的。它们帮助 Q-Former 精确地匹配图像和文本,从而生成更准确的描述或进行正确的推理。
-
-
Input Image (输入图像)
-
Input Image 是 BLIP-2 模型中的输入之一,指的是输入给模型的原始图像数据。这些图像数据会通过 Frozen Image Encoder(一个预训练的图像编码器)进行编码,转换为高维的视觉特征表示。
-
在 Q-Former 中,图像通过编码器转换为一个固定的特征表示,然后与 Learned Queries 和 Input Text 进行交互。这些图像特征是图像和文本匹配任务的基础,帮助模型理解图像的内容。
-
作用:图像输入提供了模型所需的视觉信息,帮助模型理解并生成与图像相关的文本描述或回答相关问题。
-
-
Input Text (输入文本)
-
Input Text 是 BLIP-2 模型的另一个输入,指的是输入给模型的文本数据。通常,这个文本数据是描述图像的文字信息。这些文字数据会通过 Frozen Text Encoder(一个预训练的文本编码器)进行编码,转换为低维的文本特征表示。
-
在 Q-Former 中,文本会经过 Text Encoder(文本编码器)处理,转化为文本的表示。文本与图像的特征表示通过 Learned Queries 相互作用,共同生成最终的输出(如图像描述、问题答案等)。
-
作用:文本输入提供了模型所需的语言信息,帮助模型理解和生成与图像相关的语言输出。通过与图像特征的融合,文本输入使得模型能够在视觉-语言任务中进行推理和生成。
-
表征学习阶段 Representation Learning Stage
表征学习阶段【冻结的预训练图像编码器 + Q-Former】,在冻结的图像编码器中引导视觉-语言表征学习。使用图像-文本对进行预训练,目标是训练Q-Former,使得查询可以学习提取最能提供文本信息的视觉表示。
预训练过程如下图:
图 2. (左)Q-Former 和 BLIP-2 第一阶段视觉-语言表示学习目标的模型架构。我们联合优化了三个目标,这些目标通过一组可学习的嵌入(queries)来提取与文本最相关的视觉表示。(右)针对每个目标的自注意力掩码策略,用于控制查询与文本的交互。
-
左图(Q-Former 和 BLIP-2 第一阶段的模型架构),上图红框:
- 输入图像通过 冻结的Image Encoder(图像编码器) 提取初始视觉特征。
- 视觉特征与一组可学习的查询(Learned Queries,作为嵌入)通过 Q-Former 模块交互(可学习的查询通过 自注意力(Self Attention) 层相互作用,并且通过 交叉注意力(Cross Attention) 层与frozen图像特征相互作用)。
- 和BLIP一样,BLIP2使用3个目标函数来训练模型,并且它们共享相同的输入格式和模型参数。每个目标函数通过不同的注意力掩码(attention mask)策略来控制查询和文本的交互和影响。
- 模型目标分为三个子任务:
- 图像文本对比学习(ITC)——在隐空间对齐图片编码和文本编码
- 图文匹配(ITM)——二分类任务,让模型判断图文是否一致
- 基于图像文本生成(ITG)——下一词预测,让模型学会给定图片输出caption
-
右图(注意力掩码策略):
- 描绘了 Q-Former 不同任务的注意力掩码机制,用于控制查询和文本的交互模式:
- 双向自注意力掩码(Bi-directional Self-Attention Mask):
- 用于图像-文本匹配任务(Image-Text Matching)。
- 允许查询和文本令牌之间的全连接交互。
- 多模态因果自注意力掩码(Multi-modal Causal Self-Attention Mask):
- 用于基于图像的文本生成任务(Image-Grounded Text Generation)。
- 查询令牌可以访问文本令牌(包括过去和当前),但文本令牌仅关注其过去的令牌,保证生成的因果性。
- 单模态自注意力掩码(Uni-modal Self-Attention Mask):
- 用于图像-文本对比学习任务(Image-Text Contrastive Learning)。
- 查询令牌与文本令牌的交互被掩盖,仅进行单模态内部的学习。
- 双向自注意力掩码(Bi-directional Self-Attention Mask):
- 描绘了 Q-Former 不同任务的注意力掩码机制,用于控制查询和文本的交互模式:
论文中实验了两种预训练图像编码器:
- ViT-L/14 from CLIP
- ViT-G/14 from EVA-CLIP
生成式预训练阶段 Generative Pre-training Stage
这个阶段使用【Q-Former + 冻结的预训练大型语言模型】,在冻结的预训练大型语言模型中引导视觉到语言的生成式学习。经过第一阶段的预训练,Q-Former有效地充当了信息瓶颈,将最有用的信息提供给LLM,同时删除不相关的视觉信息。这减少了LLM学习视觉语言对齐的负担,从而减轻了灾难性的遗忘问题。
预训练过程如下如下图:
图 3. BLIP-2 的第二阶段视觉到语言生成预训练: 从冻结的大型语言模型(LLMs)中引导生成能力。顶部:从基于解码器的大型语言模型(例如 OPT)中引导。 底部:从基于编码器-解码器的大型语言模型(例如 FlanT5)中引导。 全连接层的作用是将 Q-Former 的输出维度调整为所选语言模型的输入维度。
论文中实验了两种LLM:
- 无监督训练的OPT作为Decoder-based LLM,使用语言建模损失(language modeling loss)进行预训练,冻结的 LLM 的任务是根据 Q-Former 的视觉表示生成文本,也就是说直接根据图像生成文本;
- 基于指令训练的FlanT5作为Encoder-Decoder-based LLM,使用前缀语言建模损失进行预训练(prefix language modeling loss)预训练,将文本分成两部分,前缀文本perfix test与视觉表示连接起来作为 LLM 编码器的输入,后缀文本用作 LLM 解码器的生成目标,也就是说根据前缀文本+图像生成后缀连续的文本。
无监督训练的 OPT 作为 Decoder-based LLM:
- OPT(Open Pre-trained Transformer) 是一种基于解码器的语言模型,通常用于自回归文本生成任务。在 BLIP-2 中,OPT 作为解码器使用,结合 Q-Former的视觉表示来生成文本。
- 训练方式:OPT 使用 语言建模损失(language modeling loss)进行无监督训练。语言建模损失的目标是预测文本序列中的下一个词,典型的任务是让模型根据已有的文本预测下一个词或字符。在 BLIP-2中,任务是让 OPT 根据输入的视觉表示(来自 Q-Former 的输出)生成与图像相关的文本。
OPT作为解码器,它根据视觉输入生成完整的文本描述,进行 图像到文本的生成。适合用于 图像到文本的直接生成 任务。基于指令训练的 FlanT5 作为 Encoder-Decoder-based LLM:
- FlanT5 是一个指令调优版本的 T5(Text-to-Text Transfer Transformer),在其基础上进行了特定任务的优化,使其能够更好地处理各种指令任务。在 BLIP-2 中,FlanT5 作为编码器-解码器模型,其设计允许模型同时进行编码和解码。
- 训练方式:FlanT5 使用 前缀语言建模损失(prefix language modeling loss)进行训练。这种损失函数的核心思想是将输入分为两个部分:
- 前缀文本(prefix text):这部分文本与 视觉表示 结合,作为 FlanT5 编码器的输入。
- 后缀文本(suffix text):这部分文本作为解码器的目标,用于生成与前缀文本相对应的文本内容。
- 在训练过程中,模型的任务是根据输入的前缀文本和图像表示来生成后缀文本。也就是说,模型通过 前缀文本+视觉表示 来生成 后续的文本描述。能够处理 更复杂的多模态任务,适合需要 图像和文本交互理解 的任务。
相关文章:
万字长文解读深度学习——多模态模型BLIP2
🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总 万字长…...
postman使用正则表达式提取数据实战篇!
之前篇章中postman多接口关联使用的是通过JSON提取器的方式进行提取。 除了JSON提取器提取数据外还可通过另一种方式——正则表达式来提取数据。 1、使用正则表达式提取器实现接口关联,match匹配 正则匹配表达式将需要提取的字段key:value都放入表达式中ÿ…...
Docker for Everyone Plus——Unbreakable!
修改一下telnet的端口配置,访问第二小问,sudo -l命令允许提权执行的命令: 发现多了这两个限制--security-optno-new-privileges,表明docker run命令必须带上--security-optno-new-privileges参数,这可以防止通过suid机…...
龙迅#LT6912适用于HDMI2.0转HDMI+LVDS/MIPI,分辨率高达4K60HZ,支持音频和HDCP2.2
1. 描述 LT6912是一款高性能的HDMI2.0转HDMI和LVDS和MIPI转换器。 HDMI2.0 输入和输出均支持高达 6Gbps 的数据速率,为4k60Hz视频提供足够的带宽。此外,还支持 HDCP2.2 进行数据解密(无数据 加密)。 对于 LVDS 输出,…...
Linux自动化部署方法(Linux Automated Deployment Method)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…...
Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1
Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后,打开mac终端,进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…...
2024-2025 ICPC, NERC, Southern and Volga Russian Regional Contest(cf)(个人记录)
A: 思路:一开始有点懵逼,理解错题意了}, 由于是顺序分配,因此前面的人可以选择的条件更多,后面的人更少,我们从后向前遍历即可 #include<bits/stdc.h>using namespace std;typedef long long ll; ty…...
009 STM32 HAL库介绍
STM32 HAL库(Hardware Abstraction Layer)是STMicroelectronics为STM32系列微控制器提供的一套硬件抽象层库,它旨在简化STM32的开发过程,提高代码的可移植性和可维护性。HAL库通过提供一组统一的API接口,使得开发者无需…...
Java的常识
程序员分类 初级程序员(大学毕业一年以内)大概月薪:2-5K 初中级程序员(工作经验2-3年)大概月薪:6-10K 中级程序员(工作经验4-5年)大概月薪:10-15K 高级程序员(工作经验5++)大概月薪:15K++ 普通公司对于程序员的月薪资天花板25K 工作实景 微信小程序、手机APP、写…...
FreeRTOS——列表及列表项
目录 一、概念及其应用 1.1列表List_t 1.2列表项ListItem_t 1.3迷你列表项MiniListItem_t 二、相关API 三、实现原理 3.1列表初始化 3.2列表项初始化 3.3插入列表项 3.4尾插列表项 3.5列表项的删除 3.6列表的遍历 一、概念及其应用 作为多任务的核心,列…...
ChatGPT 网络安全秘籍(三)
第五章:安全意识和培训 在这一章中,我们将深入探讨网络安全培训和教育的迷人领域,强调了 OpenAI 的大型语言模型(LLMs)在增强和丰富这一关键过程中可以发挥的重要作用。我们将踏上一段旅程,发现 ChatGPT 如…...
深度学习与知识图谱嵌入的结合:从理论到实践
知识图谱嵌入方法主要包括两大类: 方法类型描述矩阵分解类方法基于传统矩阵分解思想,将知识图谱的三元组表示为多个矩阵,并通过分解获得低维向量表示。神经网络方法结合深度学习技术,通过神经网络自动学习知识图谱中实体和关系的…...
Java集成Sa-Token进行认证与授权
引言 软件开发过程中都必须要有的一个功能,那就是认证与授权,经过大佬们的不断更新迭代,使得如今实现认证与授权功能变得相对简单,也许你并不能真正的接触到认证与授权这一功能,除非你接触的项目是从0到1的,…...
【附录】Rust国内镜像设置
目录 前言 (1)设置环境变量 (2)安装Rust (3)设置crates镜像 前言 本节课来介绍下如何在国内高速下载安装Rust和Rust依赖,由于网络原因,我们在安装Rust和下载项目依赖时都很慢&am…...
Rust编程语言代码详细运行、编译方法
以下是针对不同类型的 Rust 代码(以常见的命令行程序为例)详细的运行方法: 前提条件 在运行 Rust 代码之前,确保你已经在系统上安装了 Rust 编程语言环境。如果尚未安装,可以通过以下步骤进行安装: 访问…...
Unity ShaderLab 实现交互地毯
实现思路: 将一个位置坐标值传入到shader的顶点着色器中,和这个值位置相同的顶点沿着法线的y轴方向偏移,然后计算这个值与顶点的距离,在这个范围内的顶点,和凸起的点的位置做插值操作。 Shader Graph实现如下&#x…...
Scala模式匹配——高阶用法
(一)scala的模式匹配 (1)常量 (2)变量 (3)构造器 (4)序列 (5)元组 (6)类型 (7)…...
【简单好抄保姆级教学】javascript调用本地exe程序(谷歌,edge,百度,主流浏览器都可以使用....)
javascript调用本地exe程序 详细操作步骤结果 详细操作步骤 在本地创建一个txt文件依次输入 1.指明所使用注册表编程器版本 Windows Registry Editor Version 5.00这是脚本的第一行,指明了所使用的注册表编辑器版本。这是必需的,以确保脚本能够被正确解…...
C#热更原理与HybridCLR
一、Mono的诞生 在Mono之前,C#虽然很好,但是只在windows家族平台上使用,就这点C#与Java就无法比。于是微软公司向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。意味着只要你遵守CLI(Common Lang…...
arcgis for js点击聚合要素查询其包含的所有要素
功能说明 上一篇讲了实现聚合效果, 但是点击聚合效果无法获取到该聚合点包含的所有点信息 这一篇是对如何实现该功能的案例 实现 各属性说明需要自行去官网查阅 官网案例 聚合API 没空说废话了, 加班到12点,得休息了, 直接运行代码看效果就行, 相关重点和注意事项都在代码注…...
k8s Init:ImagePullBackOff 的解决方法
kubectl describe po (pod名字) -n kube-system 可查看pod所在的节点信息 例如: kubectl describe po calico-node-2lcxx -n kube-system 执行拉取前先把用到的节点的源换了 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF {"re…...
HASH256开源代码计算错误问题
计算量超500KB报错 OTA升级中可能会涉及到CRC、hash校验等算法,小编从网上抄到了HASH256的源码,拿来使用的时候却发现了一个问题,当源文件约大于500KB的时候会发现其计算出的hash值出现错误。 经过实际测试得知,当源文件大于约50…...
对象流—ObjectInputStream 和 ObjectOutputStream
对象流(ObjectInputStream和ObjectOutputStream)是Java中用于读写对象的流,可以将对象直接写入到流中,或者从流中读取对象。 ObjectOutputStream将对象序列化为字节流,可以将对象写入文件或网络流中。ObjectInputStream则将字节流反序列化为…...
【Fargo】27:ffmpeg ffprobe 和python分析h264文件并绘制
从帧和包两个层面进行分析。帧级别分析 ffprobe 可以读取264文件信息 -Y9KP MINGW64 /d/XTRANS/thunderbolt/ayame/zhb-bifrost/player-only (main) $ ffprobe test.h264 ffprobe version N-116778-g7e4784e40c-20240827 Copyright (c) 2007-2024 the FFmpeg developersbuilt …...
Debezium Engine监听binlog实现缓存更新与业务解耦
飞书文档 解决缓存与数据源数据不一致的方案有很多, 各有优缺点; 1.0、旁路缓存策略, 直接同步更新 读取流程: 查询缓存。如果缓存命中,则直接返回结果。如果缓存未命中,则查询数据库。将数据库查询到的数据写入缓存,并设置一个…...
mysql_题库详解
1、如何创建和删除数据库? 1)创建数据库 CREATE DATABASE 数据库名; 2)删除数据库 drop database 数据库名; 2、MyISAM与InnoDB的区别? 1)事务:MyISAM 不支持事务 InnoDB 支持 2)行锁/表锁&a…...
docker查询是否运行
您可以通过运行以下命令来检查Docker是否正在运行: docker info 或者: docker ps 如果Docker正在运行,docker info将显示Docker的详细信息,而docker ps将列出当前运行的容器。如果Docker没有运行,这些命令将会返回错误…...
【AI日记】24.11.29 kaggle 比赛 Titanic-2 | 鼓励自己
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 核心工作 内容:学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster,学习机器学习课程备注:入门比赛有很多 notebook 适合我这种新手学习,尤其是那…...
SVG无功补偿装置MATLAB仿真模型
“电气仔推送”获得资料(专享优惠) 模型简介 SVG(又称ASVG 或STATCOM)是Static Var Generator 的缩写,叫做静止无功发生器。也是做无功补偿的,比SVC 更加先进。其基本原理是将自换相桥式电路通过电抗器或…...
2039:【例5.6】冒泡排序
【题目描述】 编程输入n(1≤n≤20)个小于1000非负整数,然后自动按从大到小的顺序输出。(冒泡排序) 【输入】 第一行,数的个数n; 第二行,n个非负整数。 【输出】 由大到小的n个非负整数,每个数占一行。 【输…...
yum源问题的解决方案
linux课堂作业 问题描述 yum 直接安装tree的问题截图 这个错误表明你的系统没有正确注册到 Red Hat Subscription Management(这个问题不用管),也没有配置有效的 YUM 软件仓库,因此无法安装或更新软件包。 解决方案(…...
一文解析Kettle开源ETL工具!
ETL(Extract, Transform, Load)工具是用于数据抽取、转换和加载的软件工具,用于支持数据仓库和数据集成过程。Kettle作为传统的ETL工具备受用户推崇。本文就来详细说下Kettle。 一、Kettle是什么? Kettle 是一款开源的 ETL&#x…...
微积分复习笔记 Calculus Volume 2 - 3.1
The first 2 chapters of volume 2 are the same as those in volume 1. Started with Chapter 3. 3.1 Integration by Parts - Calculus Volume 2 | OpenStax...
linux环境搭建
1、**连接外网** ssh在192.168.4.x上运行sudo ip link set ens160 down ssh切换到192.168.3.x(外网ip),运行sudo ip route add default via 192.168.2.1 dev ens192 onlink //连接外网 使用完外网后 ssh在192.168.3.x上运行sudo ip link set ens160 up ssh在1…...
黑马程序员Java笔记整理(day05)
1.面向对象编程 2.用法 3.对象是什么 4.对象在计算机中是啥 5.无参与有参构造器 小结: 6.this的作用 7.小结 8.封装 9.小结 10.实体类 11.小结 12.static 13.小结 14.static修饰方法 15.static应用前景 16.几个注意事项 17.java中可以直接用类的名字创建数组,如: M…...
DM达梦管理工具拖出空白区块,无法关闭
1. 出现问题:DM达梦管理工具拖出空白区块,无法关闭。 2. 解决方法 新建查询页,把查询页拖到空白区块里,完全覆盖空白区块。之后空白区块会变成查询页,右上角会出现叉号,点击叉号关闭就行。 3. 后记 达梦…...
Linux系统 异常控制流
文章目录 前言异常1. **中断(interrupt)**2. **陷阱和系统调用(trap)**3. **故障(fault)**4. **终止(abort)** 进程与信号非本地跳转 前言 下面内容大部分来自《深入理解计算机系统…...
Linux环境下配置neo4j图数据库
1.下载安装包 openjdk-11.0.1_linux-x64_bin.tar.gz neo4j-community-4.2.19-unix.tar.gz 2.之前配置好的配置文件 neo4j.conf 3.安装 3.1-jdk11的安装(jdk1.8不够用) 解压缩 tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz修改系统环境变量 打开pro…...
python打包深度学习虚拟环境
今天师兄让我把环境打包发给他,我才知道可以直接打包深度学习虚拟环境,这样另一个人就不用辛辛苦苦的去装环境了,我们都知道有些论文他需要的环境很难装上。比如装Apex,装 DCN,mmcv-full 我现在把3090机子上的ppft虚拟…...
关于IDE的相关知识之一【使用技巧】
成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于ide使用技巧的相关内容! 关于…...
Redis开发03:常见的Redis命令
1.输入以下命令,启动redis。 sudo service redis-server start 如果你是直接安装在WSL的,搜索栏搜索Ubuntu或者点击左下角Windows图表找到U那一栏,直接打开Ubentu,输入账密后,输入“sudo service redis-server start”…...
[OS] A4-前菜介绍
从你的描述来看,这段话是给你的一些 预备知识 和 mkfs工具的使用 提示,帮助你了解如何构建和管理文件系统,特别是关于 xv6 文件系统的一些基本操作。 我会通过比喻和通俗化的方式逐步解释: 预备知识:xv6 文件系统的基…...
2024农历年余下的数模比赛名单已出炉!
数学建模比赛季又来了!作为一名资深的数学建模辅导老师,我想对你们说:这不仅是挑战智商的时候,也是展现团队合作力、数据分析能力和逻辑思维的最佳舞台!💡 如果你是建模新手,或者想让自己的比赛…...
在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress
首先,要想手机端应用能成功请求后端,两个设备至少需在同一个局域网内,且IP地址互通; 因为ajax是http(s)://IP地址端口号的方式请求,但是iisExpress默认是localhost如何解决,并没有IP地址,所以手…...
2.安装docker、docker compose
1. 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm22. 设置阿里云docker-ce镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3. docker-ce 安装 yum install -y docker-ce4. docker-compo…...
windows中idea选择bash作为控制台指令集,但是系统环境变量未在其中生效处理
1. 引言 在windows系统中安装node 以及npm时配置其环境,使用window环境变量的配置方式在系统环境变量设置的地方设置了环境变量如下图1-1,设置后在idea中的控制台通过 echo $PATH 查看环境变量发先跟系统中配置的不一致,而且node -v npm -v指…...
如何通过 ADB 安装 xapk
Android开发这么久,今天发现还能这么操作!😂 记录通过ADB安装xapk、apks的两种方式: 1.ADB命令安装使用APK-Splits技术分包的应用程序 这位大佬的方式步骤较为繁琐,不过兼容性应该较好,亲测成功安装。 2.How to install xapk, apks, or multiple-apks via adb? 这个…...
Docker使用教程
Docker 是一个开源的容器化平台,用于开发、打包和分发应用程序。它允许将应用及其依赖环境打包成容器,从而实现跨平台的便捷部署。下面是一个简单的 Docker 使用教程,涵盖从安装到基本命令的使用。 1. 安装 Docker Windows / MacOS 访问 D…...
我的创作纪念日
一、机缘 成为创作者的初衷是从学习C/C语法与数据结构过程中获得的灵感。在日常学习和项目实践中,我发现这些知识既丰富又复杂,对初学者而言尤为困难。因此,我决定通过博客记录自己的学习过程、解决思路以及代码实现,帮助更多人在…...
软件质量保证——单元测试之白盒技术
笔记内容及图片整理自XJTUSE “软件质量保证” 课程ppt,仅供学习交流使用,谢谢。 程序图 程序图定义 程序图P(V,E),V是节点的集合(节点是程序中的语句或语句片段),E是有向边的集合…...