多模态论文笔记——CogVLM和CogVLM2

大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。

在这里插入图片描述

文章目录

    • CogVLM
      • 论文
      • 背景
        • VLMs 的任务与挑战
        • 现有方法及其局限性
          • 浅层对齐方法(Shallow Alignment Methods)
          • 深度融合方法(Deep Fusion Methods)
        • CogVLM 的创新点
      • 模型架构
      • 视觉专家模块
        • 架构
        • 工作流程
          • 输入拆分
          • 注意力计算
          • FFN层
      • 训练细节
        • 1. 预训练阶段
          • 预训练第一阶段:图像描述损失函数
          • 预训练第二阶段:图像描述损失函数 + 指代表达理解(REC)任务的损失函数
        • 2. SFT有监督微调
    • CogVLM2
      • 论文
      • 优化
        • 1. 视觉专家模块的改进
        • 2. MLP 适配器的增强
        • 3. 视觉优先的加强

首先我们需要知道CogVLM是主要用于图像生成文本的。在此之前,我们已经介绍了BLIP和BLIP2,但是BLIP模型生成的文本描述较为简单,模型训练则需要更详细、准确的图像描述或字幕。

在上期文章中将介绍了模型Coca(Contrastive Captioners,谷歌出品),OpenAI的DALL·E 3在处理图像-文本训练数据集就是基于谷歌的CoCa模型,微调一个image captioner,用来合成图像的caption。

Coca参考历史文章:多模态论文笔记——Coca

同样,在SD 3中也使用了模型去优化图像-文本数据集中的文本描述,只不过SD 3中使用了CogVLM。

SD 3介绍参考 SD 系列文章:Stable Diffusion 3详解

CogVLM

论文

CogVLM: Visual Expert for Pretrained Language Models

背景

VLMs 的任务与挑战

VLM 的应用任务: 视觉语言模型具有广泛的应用场景,例如:图像描述、视觉问答、视觉定位、分割等。这些任务需要模型具备强大的多模态推理能力,而这种能力通常依赖于对视觉和语言数据的深度理解与融合

训练 VLM 的挑战: 训练与大规模语言模型(如 LLaMA2)性能相匹配的 VLM 是一项复杂任务。当前的主流方法是复用已有的预训练语言模型(如 GPT),并在此基础上扩展视觉处理能力。而这个扩展过程的核心挑战在于解决视觉特征和语言特征的对齐问题。

现有方法及其局限性
浅层对齐方法(Shallow Alignment Methods)

代表方法有 BLIP 2(原文为:InstructBLIP,)MiniGPT-4

  • 通过一个 冻结的预训练语言模型(如 GPT)和 预训练视觉编码器(如 CLIP)实现简单连接。
  • 通过 可训练的 Q-Former 或线性层,将图像特征映射到语言模型的输入嵌入空间。
  • 优势:收敛快,训练简单。
  • 劣势:性能劣于深度融合模型,例如 LLaVA-1.5。问题包括:
    1. 视觉与语言特征的不匹配:视觉特征在经过浅层映射后无法充分适配语言模型的深层结构。
    2. 任务表现受限:在生成任务(如图像描述)中,这种方法难以捕获特定任务的细节。

BLIP2 参考历史文章:多模态论文笔记——BLIP2

深度融合方法(Deep Fusion Methods)

代表方法有 LLaVA-1.5PaLIQwen-VL

  • 在预训练或监督微调阶段,直接对语言模型进行训练
  • 问题:深度融合方法会显著改变语言模型的分布,导致 灾难性遗忘(Catastrophic Forgetting)。
    • 语言模型在训练过程中会失去其原有的 NLP 能力,例如自然语言生成(NLG)性能下降。

注意:

  • 浅层对齐方法和深度融合方法的区分点在于:是否会改变原始模型的权重参数,如果会修改,则是深度融合方法,否则,为浅层对齐方法。
    • LLaVA 属于浅层对齐方法,原始的语言和视觉模型权重是冻结的;
    • LLaVA 1.5 属于深度融合方法,原始的语言和视觉模型权重不是被冻结的,而是可以进行训练的。
CogVLM 的创新点

CogVLM 提出了新的解决方案,回答了一个核心问题:是否能在保留语言模型 NLP 能力的同时,赋予其强大的视觉理解能力?

CogVLM 的方法:引入视觉专家(Visual Expert)

  • CogVLM 并不对原始语言模型进行修改,而是添加了一个 可训练的视觉专家
    • 视觉专家的作用:在每一层中,视觉特征通过QKV 矩阵MLP 层 与文本特征交互。
    • 参数与效率:视觉专家的引入使参数数量增加一倍,但模型的计算量(FLOPs)保持不变。
  • 优势
    • 保留语言模型的 NLP 能力:原始语言模型的参数完全冻结,避免灾难性遗忘问题。如果输入序列中没有图像,模型表现与原始语言模型一致。
    • 深度融合视觉与语言特征:使用类似低秩矩阵的思想,间接改变模型参数的方式实现深度融合。避免浅层对齐中的特征分布偏移问题。

这个灵感来源于:P-Tuning 与 LoRA 的对比

  • P-Tuning
    • 学习任务特定的输入前缀(prefix embedding),通过调整输入来适配模型。
    • 类似浅层对齐方法中的图像特征映射。
  • LoRA
    • 在每一层通过引入低秩矩阵分解调整模型权重,实现更好的性能与稳定性。
  • 类比:CogVLM 的视觉专家类似于 LoRA,它通过在每一层引入视觉-语言交互,解决了浅层对齐方法中的特征不匹配问题。

P-Tuning和LoRA请分别参考微调系列文章:

  • SD模型微调之Textual Inversion和Embedding fine-tuning
  • SD模型微调之LoRA

模型架构

在这里插入图片描述

图4. CogVLM的架构。(a) 关于输入的示意图,其中一张图像由预训练的ViT处理,并映射到与文本特征相同的空间。(b) 语言模型中的Transformer模块。图像特征具有不同的QKV矩阵和FFN。只有紫色部分是可训练的。

CogVLM模型共包含四个基本组件:ViT 编码器,MLP 适配器,预训练大语言模型(GPT-style)和视觉专家模块。

  1. ViT 编码器
    CogVLM 中采用了 预训练的 EVA2-CLIP-E作为ViT 编码器,该编码器将图像输入转化为特征表示。在 CogVLM-17B 中,移除了 ViT 编码器的最后一层,因为该层主要用于整合 [CLS] 特征用于对比学习。
  2. MLP 适配器
    CogVLM 使用了一个 两层的 MLP(SwiGLU) 作为 MLP 适配器。MLP适配器的作用是将 ViT 的输出映射到与 文本特征 相同的空间。
    SwiGLU 是一种高效的激活函数,通常用于提升模型的表达能力和稳定性。所有的图像特征共享相同的 position id,这意味着模型不会区分图像特征的顺序,仅仅根据位置进行编码。MLP适配器在训练过程中通过少量参数的调整,显著提升了模型的表现。
  3. 预训练大语言模型
    CogVLM 的预训练大语言模型采用了与 GPT-style 的大语言模型兼容的设计。具体来说,CogVLM-17B 采用了 Vicuna-7B-v1.5 作为基础模型,进行进一步的训练。此外,还选择了 GLM 系列模型LLaMA 系列模型,这确保了 CogVLM 能够在各种预训练大语言模型上进行扩展,以优化多模态任务的表现。
  4. 视觉专家模块
    CogVLM 引入了 视觉专家模块,在每一层 Transformer 中加入 图像特征的深度融合。每个 Transformer 层中的图像特征使用与 文本特征不同的 QKV 矩阵和 MLP 层,这些矩阵和层都是可训练的。这个设计使得视觉特征和语言特征能够深度融合,提高视觉与语言特征对齐的精度,进而增强多模态任务的效果。

视觉专家模块

在传统的多模态模型中,图像在处理过程中往往被当作“附庸”来处理,图像特征通常被直接对齐到文本特征的输入空间(拼接到一起,如LLaVA、ViT、ViLT等)。

  • 这种方式使得图像特征在多模态模型中并没有获得与文本同等的处理和重视。这导致了图像理解的能力有限,尤其是在需要复杂图像理解和生成的任务中,模型的效果自然会受到限制。

CogVLM 通过引入 视觉专家 来改变这一思路,采用 视觉优先 的方法。

  • 通过让图像特征与语言特征在每一层 Transformer 进行深度融合,CogVLM 使得图像特征能够在多个层次上参与建模,并获得与文本特征同等的重视,从而提升了图像理解的效果,避免了传统方法中图像特征被视为“附庸”的情况。
架构

CogVLM 中,视觉专家模块被引入到每一层,以实现深度视觉-语言特征融合。这个模块主要由两部分组成:

  1. QKV矩阵:用于计算注意力,决定哪些部分的信息对当前输出最重要;
  2. MLP层用于前馈神经网络,对注意力计算后的特征进行进一步的非线性转换,增强模型的表达能力。
    在这里插入图片描述
工作流程

视觉专家模块在每个transformer层对图像特征进行专门处理,使得模型更好理解和融合视觉信息。

输入拆分

首先,输入的隐藏状态 X X Xhidden states)会被拆分成图像隐藏状态 X I X_I XI)和文本隐藏状态 X T X_T XT)。

其中,输入的隐藏状态为 X ∈ R B × H × ( L I + L T ) × D X \in \mathbb{R}^{B \times H \times (L_I + L_T) \times D} XRB×H×(LI+LT)×D

  • B B B:批次大小(batch size)
  • L I L_I LI:图像序列的长度
  • L T L_T LT:文本序列的长度
  • H H H:注意力头的数量(Attention heads)
  • D D D:隐藏层的大小(hidden size)
注意力计算

视觉专家模块中的注意力机制计算过程如下:

  1. Q、K、V的计算
    Q = concat ( X I W I Q , X T W T Q ) Q = \text{concat}(X_I W_I^Q, X_T W_T^Q) Q=concat(XIWIQ,XTWTQ)
    K = concat ( X I W I K , X T W T K ) K = \text{concat}(X_I W_I^K, X_T W_T^K) K=concat(XIWIK,XTWTK)
    V = concat ( X I W I V , X T W T V ) V = \text{concat}(X_I W_I^V, X_T W_T^V) V=concat(XIWIV,XTWTV)
    • 其中 W I Q , W I K , W I V W_I^Q, W_I^K, W_I^V WIQ,WIK,WIV 是视觉专家的 QKV 矩阵, W T Q , W T K , W T V W_T^Q, W_T^K, W_T^V WTQ,WTK,WTV 是原始语言模型的 QKV 矩阵。
  2. 注意力权重计算
    使用上一步得到的 Q、K、V ,代入下面的公式,进行计算:
    Attention ( X , W I , W T ) = softmax ( Tril ( Q K T ) D ) V \text{Attention}(X, W_I, W_T) = \text{softmax}\left(\frac{\text{Tril}(QK^T)}{\sqrt{D}}\right) V Attention(X,WI,WT)=softmax(D Tril(QKT))V
    • W I W_I WI W T W_T WT 分别是视觉专家和原始语言模型中的 QKV 矩阵。
    • Tril ( ) \text{Tril}() Tril()下三角矩阵操作,用于掩盖掉未来信息(常用于自注意力机制中的掩码操作)。
FFN层

在计算完注意力后,视觉和文本特征会被进一步传递到前馈神经网络(FFN)层
FFN ( X ) = concat ( FFN I ( X I ) , FFN T ( X T ) ) \text{FFN}(X) = \text{concat}(\text{FFN}_I(X_I), \text{FFN}_T(X_T)) FFN(X)=concat(FFNI(XI),FFNT(XT))

  • 其中 FFN I \text{FFN}_I FFNI FFN T \text{FFN}_T FFNT 分别是视觉专家和原始语言模型的前馈神经网络

训练细节

CogVLM的训练是氛围两阶段,第一阶段进行预训练,第二阶段,对下游任务进行针对性微调。

这个两阶段的训练过程,在大模型中很常见,例如LLaVA也是两阶段:

  • 阶段1:特征对齐预训练
  • 阶段2:端到端微调

LLaVA参考历史文章:多模态论文笔记——LLaVA

1. 预训练阶段

数据集:

  • 预训练数据集:公开可用的图像文本对进行训练

  • 视觉定位数据集:作者还构建了一个包含4000万张图像的视觉定位数据集,图像中的名词与边界框相关联,表示物体在图像中的位置

预训练超参数:参考论文原文表5。

预训练第一阶段:图像描述损失函数

在预训练的第一阶段,主要使用 图像描述损失函数 来进行训练,目标是让模型学会根据图像生成描述文本。具体来说,模型被训练去预测图像对应的文本序列中的下一个标记(token)。

使用了15亿图像文本对,进行12万次迭代,批量大小为8192。

  • 目标:对于每一张图像,模型需要生成与之对应的描述文本。这个过程类似于传统的图像描述生成(image captioning)任务,模型通过最大化对文本部分的下一个标记预测的概率来进行训练。
  • 损失函数:通常使用 交叉熵损失(cross-entropy loss)来计算模型生成的文本序列与真实描述序列之间的差异,损失函数定义为:
    Loss = − ∑ t = 1 T log ⁡ P ( y t ∣ x , y < t ) \text{Loss} = -\sum_{t=1}^{T} \log P(y_t|x, y_{<t}) Loss=t=1TlogP(ytx,y<t)
    • 其中, P ( y t ∣ x , y < t ) P(y_t|x, y_{<t}) P(ytx,y<t) 表示在给定图像 x x x 和前面生成的文本 y < t y_{<t} y<t 的条件下,预测下一个标记 y t y_t yt 的概率。
预训练第二阶段:图像描述损失函数 + 指代表达理解(REC)任务的损失函数

第二阶段,除了图像描述任务外,还引入了 指代表达理解(REC)任务。REC任务要求根据物体的文本描述预测图像中的边界框位置,采用类似VQA的训练形式(问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1])。

在第二阶段,训练进行了6万次迭代,批量大小为1024,最后3万次迭代中提升了输入分辨率(从224×224到490×490),以增加图像细节和增强模型的泛化能力。

  • 图像描述损失:与第一阶段相同,图像描述损失函数依然用于训练模型生成图像的描述文本。

  • REC任务的损失函数:REC任务需要模型根据物体的文本描述预测图像中的边界框位置。具体来说问题:物体在哪里?答案: [ x 0 , y 0 , x 1 , y 1 ] [x_0,y_0,x_1,y_1] [x0,y0,x1,y1]。为了训练这一任务,使用 下一个标记预测的损失函数,即类似于图像描述任务的交叉熵损失,但这次输出是坐标值。

  • 损失函数:对于 REC 任务,损失函数可以形式化为:
    Loss REC = ∑ i = 1 N MSE ( y pred , i , y gt , i ) \text{Loss}_{\text{REC}} = \sum_{i=1}^{N} \text{MSE}(y_{\text{pred}, i}, y_{\text{gt}, i}) LossREC=i=1NMSE(ypred,i,ygt,i)
    其中, y pred , i y_{\text{pred}, i} ypred,i 是模型预测的边界框坐标, y gt , i y_{\text{gt}, i} ygt,i 是真实的边界框坐标, N N N 是边界框的数量。

2. SFT有监督微调
  • 微调数据:可以参考数据集 CogVLM-SFT-311K 进行训练。
  • 微调超参数:参考论文原文表6。
  • 训练细节:在有监督微调(SFT)阶段,除 Vision Transformer (ViT) 编码器外,所有的参数都是可以训练的。

这些训练细节展示了 CogVLM 的多阶段训练过程,其中预训练和微调的结合确保了模型能够高效地理解和生成图像与文本之间的关系。

CogVLM2

论文

CogVLM2: Visual Language Models for Image and Video Understanding

优化

CogVLM 2与第一代CogVLM类似,CogVLM 2在注意力和FFN模块中都采用了视觉专家的架构。这种架构创新促进了视觉和语言特征的深度融合,同时保留了模型固有的语言能力。
与第一代模型不同,CogVLM 2进一步采用2×2下采样模块,在保持效率的同时提高输入分辨率,并使用LLaMA 3-8B作为LLM骨干。此外,我们从多样性和质量方面不断增强训练前和训练后数据,详细信息见第3.1节和第4.1节。

CogVLM2CogVLM 的基础上做了多项优化和改进,主要体现在以下几个方面:

1. 视觉专家模块的改进
  • CogVLM 中的视觉专家模块主要通过引入视觉专家对每一层的视觉特征进行深度处理,实现图像特征与文本特征的深度融合。
  • CogVLM2 进一步优化了视觉专家模块,使得图像特征的处理更加高效和精确。具体来说,CogVLM2引入了 多层视觉专家模块,让视觉专家模块在每一层都能更加精细地调节图像和文本特征的融合。
2. MLP 适配器的增强
  • CogVLM 中使用了 MLP适配器 来将视觉特征与文本特征对齐,这一操作是通过一个两层的 MLP(SwiGLU)来完成的。
  • CogVLM2 中对 MLP 适配器进行了优化和增强,增强了适配器的能力,使其能够更有效地映射不同模态的特征,进一步提高了图像和文本特征的融合效果。具体增强了适配器的容量和非线性表达能力,使得图像和文本的对齐更加精细。
  • CogVLM2 使用了 Downsample 操作来降低计算复杂度,同时保证特征的准确性,使得模型在处理更大规模的图像数据时依然保持高效。
3. 视觉优先的加强
  • CogVLM 中,视觉特征在多个层次上和文本特征进行对齐,但图像的处理可能没有完全达到视觉信息的深度融合。
  • CogVLM2 强化了“视觉优先”的思想,进一步优化了图像特征与文本特征的深度融合过程,确保图像特征在各个层次上都有充分的表达,而不是仅在浅层中对齐。这使得 CogVLM2 能够更好地理解复杂的视觉信息,并在视觉任务上取得更好的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/65884.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【react】Redux的设计思想与工作原理

Redux 的设计理念 Redux 的设计采用了 Facebook 提出的 Flux 数据处理理念 在 Flux 中通过建立一个公共集中数据仓库 Store 进行管理&#xff0c;整体分成四个部分即: View &#xff08;视图层&#xff09;、Action &#xff08;动作&#xff09;、Dispatcher (派发器)、Stor…

PCB层叠结构设计

PCB层叠结构设计 层叠结构设计不合理完整性相关案例&#xff1a;在构成回流路径时&#xff0c;由于反焊盘的存在&#xff0c;使高速信号回流路径增长&#xff0c;造成信号回流路径阻抗不连续&#xff0c;对信号质量造成影响。 PCB层叠结构实物&#xff1a;由Core 和 Prepreg&a…

爬虫在分析网站结构时的注意事项及代码示例

在进行网络爬虫的开发时&#xff0c;准确分析目标网站的结构是至关重要的一步。这不仅关系到爬虫的效率和效果&#xff0c;还涉及到是否能够合法合规地获取数据。本文将探讨在分析网站结构时需要注意的几个关键点&#xff0c;并提供相应的代码示例。 1. 网站的响应方式 首先&…

LLM训练的数据以及流程,怎么微调

LLM训练的数据以及流程,怎么微调 训练数据来源 互联网文本:从网页、新闻文章、博客、论坛等收集大量的文本内容。例如,Common Crawl项目会定期抓取大量的网页数据,为LLM训练提供了丰富多样的文本来源,这些数据涵盖了各种领域和主题,如科技、文化、娱乐、政治等.书籍文献…

【Cesium】七、设置Cesium 加载时的初始视角

文章目录 一、前言二、实现方法2.1 获取点位、视角2.2 设置 三、App.vue 一、前言 在前面的文章 【Cesium】三、实现开场动画效果 中有提到过 虽然也能回到初始点位但是有一个明显的动画过程。下面方法加载时就是在初始点位 没有动画效果&#xff0c;根据需求选择。 本文参考…

Edge安装问题,安装后出现:Could not find Edge installation

解决&#xff1a;需要再安装&#xff08;MicrosoftEdgeWebView2RuntimeInstallerX64&#xff09;。 网址&#xff1a;https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/?formMA13LH#download 如果已经安装了edge&#xff0c;那就再下载中间这个独立程序安装就…

日期时间选择(设置禁用状态)

目录 1.element文档需要 2.禁用所有过去的时间 3.设置指定日期的禁用时间 <template><div class"block"><span class"demonstration">起始日期时刻为 12:00:00</span><el-date-pickerv-model"value1"type"dat…

【《python爬虫入门教程11--重剑无峰168》】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 【《python爬虫入门教程11--selenium的安装与使用》】 前言selenium就是一个可以实现python自动化的模块 一、Chrome的版本查找&#xff1f;-- 如果用edge也是类似的1.chrome…

grep -nr递归过滤文本时,如何忽略node_modules目录

在使用 grep -nr 递归过滤文本时&#xff0c;如果需要忽略 node_modules 目录&#xff0c;可以使用 --exclude-dir 参数&#xff0c;具体方法如下&#xff1a; 方法 1&#xff1a;使用 grep --exclude-dir grep -nr "your_search_text" --exclude-dirnode_modules .…

Spring Boot 3 文件下载、多文件下载以及大文件分片下载、文件流处理、批量操作 和 分片技术

在 Spring Boot 3 中&#xff0c;实现文件下载、多文件下载以及大文件分片下载需要结合以下功能&#xff1a;文件流处理、批量操作 和 分片技术。以下是详细实现方案&#xff1a; 1. 单文件下载 基础的单文件下载实现&#xff0c;可以参考以下代码&#xff1a; GetMapping(&…

系统架构风险、敏感点和权衡点的理解

系统架构是软件开发过程中的关键环节&#xff0c;它决定了系统的可扩展性、稳定性、安全性和其他关键质量属性。然而&#xff0c;架构设计并非易事&#xff0c;其中涉及的风险、敏感点和权衡点需要仔细考虑和处理。本文将详细探讨系统架构风险、敏感点和权衡点的概念&#xff0…

locate() 在MySQL中的用法

语法&#xff1a; 在MySQL中&#xff0c;LOCATE() 是一个字符串函数&#xff0c;用于返回一个子字符串在另一个字符串中第一次出现的位置。如果子字符串不存在&#xff0c;则返回0。这个函数的语法如下&#xff1a; LOCATE(substring, string[, start])substring&#xff1a;…

智能电话机器人优势是什么

在当今数字化转型加速的背景下&#xff0c;智能电话机器人&#xff08;IVR&#xff09;作为客户服务和业务流程优化的重要工具&#xff0c;正逐渐成为企业提升运营效率和服务质量的关键组成部分。 提高服务效率与响应速度 智能电话机器人能够自动处理大量重复性的查询和事务&…

leetcode热题100(79. 单词搜索)dfs回溯 c++

链接&#xff1a;79. 单词搜索 - 力扣&#xff08;LeetCode&#xff09; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的…

安全运营 -- splunk restapi 最小权限

0x00 背景 最小化权限原则&#xff0c;为每个功能&#xff0c;每个账户分配最小的权限。 0x01 实践 只需要7个 capability: Youll need to add certain capabilities to that user or that userss role(s).[capability::rest_apps_management] * Lets a user edit settings …

C++ 设计模式:备忘录模式(Memento Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 状态模式 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不破坏封装性的前提下捕获和恢复对象的内部状态。这个模式在需要保存和恢复对象状态的场景中非常有用&#xff…

用PicGo向Github图床上传图片,然后通过markdown语言显示图片

目录 下载PicGo软件图床GitHub设置在Markdown中使用图片 下载PicGo软件 先进入Pic官网&#xff0c;然后点击下图中的免费下载 然后点击下载下图中PicGo-Setup-2.4.0-beta.9.exe这个可执行软件 图床GitHub设置 点击PicGo中的图床设置&#xff0c;再点击其中的Github&#xff…

鸿蒙开发:实现键值数据库存储

前言 鸿蒙当中数据持久化存储&#xff0c;为我们提供了多种的实现方式&#xff0c;比如用户首选项方式&#xff0c;关系型数据库方式&#xff0c;键值型数据库方式&#xff0c;文件存储方式等等&#xff0c;对于数据量比较的小的&#xff0c;我们直接选择轻量级的用户首选项方式…

bilibili 哔哩哔哩小游戏SDK接入

小游戏的文档 简介 bilibili小游戏bilibili小游戏具有便捷、轻量、免安装的特点。游戏包由云端托管&#xff0c;在哔哩哔哩APP内投放和运行&#xff0c;体验流畅&#xff0c;安全可靠。https://miniapp.bilibili.com/small-game-doc/guide/intro/ 没想过接入这个sdk比ios还难…

Spring Cloud Alibaba2022之Sentinel总结

Spring Cloud Alibaba2022之Sentinel学习 Sentinel介绍 Sentinel是一个面向云原生微服务的流量控制、熔断降级组件。 Sentinel 分为两个部分&#xff1a; 核心库&#xff1a;&#xff08;Java 客户端&#xff09;不依赖任何框架/库&#xff0c;能够运行于所有 Java运行时环 …