多模态论文笔记——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。问题包括:
- 视觉与语言特征的不匹配:视觉特征在经过浅层映射后无法充分适配语言模型的深层结构。
- 任务表现受限:在生成任务(如图像描述)中,这种方法难以捕获特定任务的细节。
BLIP2 参考历史文章:多模态论文笔记——BLIP2
深度融合方法(Deep Fusion Methods)
代表方法有 LLaVA-1.5、 PaLI 和 Qwen-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)和视觉专家模块。
- ViT 编码器
CogVLM 中采用了 预训练的 EVA2-CLIP-E作为ViT 编码器,该编码器将图像输入转化为特征表示。在 CogVLM-17B 中,移除了 ViT 编码器的最后一层,因为该层主要用于整合[CLS]
特征用于对比学习。 - MLP 适配器
CogVLM 使用了一个 两层的 MLP(SwiGLU) 作为 MLP 适配器。MLP适配器的作用是将 ViT 的输出映射到与 文本特征 相同的空间。
SwiGLU 是一种高效的激活函数,通常用于提升模型的表达能力和稳定性。所有的图像特征共享相同的 position id,这意味着模型不会区分图像特征的顺序,仅仅根据位置进行编码。MLP适配器在训练过程中通过少量参数的调整,显著提升了模型的表现。 - 预训练大语言模型
CogVLM 的预训练大语言模型采用了与 GPT-style 的大语言模型兼容的设计。具体来说,CogVLM-17B 采用了 Vicuna-7B-v1.5 作为基础模型,进行进一步的训练。此外,还选择了 GLM 系列模型 和 LLaMA 系列模型,这确保了 CogVLM 能够在各种预训练大语言模型上进行扩展,以优化多模态任务的表现。 - 视觉专家模块
CogVLM 引入了 视觉专家模块,在每一层 Transformer 中加入 图像特征的深度融合。每个 Transformer 层中的图像特征使用与 文本特征不同的 QKV 矩阵和 MLP 层,这些矩阵和层都是可训练的。这个设计使得视觉特征和语言特征能够深度融合,提高视觉与语言特征对齐的精度,进而增强多模态任务的效果。
视觉专家模块
在传统的多模态模型中,图像在处理过程中往往被当作“附庸”来处理,图像特征通常被直接对齐到文本特征的输入空间(拼接到一起,如LLaVA、ViT、ViLT等)。
- 这种方式使得图像特征在多模态模型中并没有获得与文本同等的处理和重视。这导致了图像理解的能力有限,尤其是在需要复杂图像理解和生成的任务中,模型的效果自然会受到限制。
CogVLM 通过引入 视觉专家 来改变这一思路,采用 视觉优先 的方法。
- 通过让图像特征与语言特征在每一层 Transformer 进行深度融合,CogVLM 使得图像特征能够在多个层次上参与建模,并获得与文本特征同等的重视,从而提升了图像理解的效果,避免了传统方法中图像特征被视为“附庸”的情况。
架构
在 CogVLM 中,视觉专家模块被引入到每一层,以实现深度视觉-语言特征融合。这个模块主要由两部分组成:
- QKV矩阵:用于计算注意力,决定哪些部分的信息对当前输出最重要;
- MLP层用于前馈神经网络,对注意力计算后的特征进行进一步的非线性转换,增强模型的表达能力。
工作流程
视觉专家模块在每个transformer层都对图像特征进行专门处理,使得模型更好理解和融合视觉信息。
输入拆分
首先,输入的隐藏状态 X X X(hidden 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} X∈RB×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)
注意力计算
视觉专家模块中的注意力机制计算过程如下:
- 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 矩阵。
- 注意力权重计算:
使用上一步得到的 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(DTril(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=1∑TlogP(yt∣x,y<t)- 其中, P ( y t ∣ x , y < t ) P(y_t|x, y_{<t}) P(yt∣x,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=1∑NMSE(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节。
CogVLM2 在 CogVLM 的基础上做了多项优化和改进,主要体现在以下几个方面:
1. 视觉专家模块的改进
- CogVLM 中的视觉专家模块主要通过引入视觉专家对每一层的视觉特征进行深度处理,实现图像特征与文本特征的深度融合。
- CogVLM2 进一步优化了视觉专家模块,使得图像特征的处理更加高效和精确。具体来说,CogVLM2引入了 多层视觉专家模块,让视觉专家模块在每一层都能更加精细地调节图像和文本特征的融合。
2. MLP 适配器的增强
- CogVLM 中使用了 MLP适配器 来将视觉特征与文本特征对齐,这一操作是通过一个两层的 MLP(SwiGLU)来完成的。
- CogVLM2 中对 MLP 适配器进行了优化和增强,增强了适配器的能力,使其能够更有效地映射不同模态的特征,进一步提高了图像和文本特征的融合效果。具体增强了适配器的容量和非线性表达能力,使得图像和文本的对齐更加精细。
- CogVLM2 使用了 Downsample 操作来降低计算复杂度,同时保证特征的准确性,使得模型在处理更大规模的图像数据时依然保持高效。
3. 视觉优先的加强
- 在 CogVLM 中,视觉特征在多个层次上和文本特征进行对齐,但图像的处理可能没有完全达到视觉信息的深度融合。
- CogVLM2 强化了“视觉优先”的思想,进一步优化了图像特征与文本特征的深度融合过程,确保图像特征在各个层次上都有充分的表达,而不是仅在浅层中对齐。这使得 CogVLM2 能够更好地理解复杂的视觉信息,并在视觉任务上取得更好的效果。
历史文章
机器学习
机器学习笔记合集
深度学习
深度学习笔记合集
多模态论文
深度学习笔记——ViT、ViLT
深度学习笔记——DiT(Diffusion Transformer)
深度学习笔记——CLIP、BLIP
多模态论文笔记——BLIP2
深度学习笔记——VQ-VAE和VQ-VAE-2
多模态论文笔记——dVAE(DALL·E的核心部件)
多模态论文笔记——LLaVA
多模态论文笔记——Coca
相关文章:
多模态论文笔记——CogVLM和CogVLM2
大家好,这里是好评笔记,公主号:Goodnote,专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…...
BLDC无感控制的驱动逻辑
如何知道转子已经到达预定位置,因为我们只有知道了转子到达了预定位置之后才能进行换相,这样电机才能顺滑的运转。转子位置检测常用的有三种方式。 方式一:通过过零检测,三相相电压与电机中性点电压进行比较。过零检测的优点在于…...
分布式多机多卡训练全景指南:MPI、DeepSpeed 与 Colossal-AI 深度解析
分布式多机多卡训练技术是深度学习领域提高训练效率和加快模型收敛的重要手段。以下是几个流行的框架和工具: 1. MPI(Message Passing Interface) 概述 MPI 是一种标准化的消息传递协议,用于多机多卡之间的通信与协作,…...
Unity中 Xlua使用整理(一)
1.安装: 从GitHub上下载Xlua源码 Tencent/xLua: xLua is a lua programming solution for C# ( Unity, .Net, Mono) , it supports android, ios, windows, linux, osx, etc. (github.com) 下载Xlua压缩包,并解压将Aseet文件夹中的Xlua和Plugins文件夹复制到Unit…...
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法
在调用 borrowObject 方法时,Apache Commons Pool 会根据连接池的配置触发一系列相关的方法 1. GrpcChannel 的概念 GrpcChannel 是 gRPC 客户端与服务器之间通信的核心组件。它是基于 HTTP/2 的连接,支持多路复用,即通过单个通道可以发送多…...
【数据结构与算法:八、排序】
第8章 排序 排序是计算机科学中最基本且最常用的操作之一。本章详细介绍了排序算法的概念、分类、每种算法的定义、图示、代码实现及其应用场景。 8.1 基本概念和排序方法概述 8.1.1 排序的基本概念 排序是指将一组无序的记录按照某种指定的顺序重新排列的过程。 排序的目…...
Unity学习笔记(六)使用状态机重构角色移动、跳跃、冲刺
前言 本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记 整体状态框架(简化) Player 是操作对象的类: 继承了 MonoBehaviour 用于定义游戏对象的行为,每个挂载在 Unity 游戏对象上的脚本都需要继承自 MonoBehaviour&#x…...
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
参考文章: 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境,均为 windows 环境,mac 环境其实也类似 ~ ① 编译proto文件,相关插件 简单介绍: protoc 是编译器,用于将…...
策略模式(strategy)
一.策略模式是什么 策略模式是一种行为型对象模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。这样,算法可以独立于使用它的客户端而变化。 策略者模式的核心思想是将一系列的算法封装到一系列的策略类里…...
Centos源码安装MariaDB 基于GTID主从部署(一遍过)
MariaDB安装 安装依赖 yum install cmake ncurses ncurses-devel bison 下载源码 // 下载源码 wget https://downloads.mariadb.org/interstitial/mariadb-10.6.20/source/mariadb-10.6.20.tar.gz // 解压源码 tar xzvf mariadb-10.5.9.tar.gz 编译安装 cmake -DCMAKE_INSTA…...
如何在 VSCode 中配置 C++ 开发环境:详细教程
如何在 VSCode 中配置 C 开发环境:详细教程 在软件开发的过程中,选择一个合适的开发环境是非常重要的。Visual Studio Code(VSCode)作为一款轻量级的代码编辑器,凭借其强大的扩展性和灵活性,受到许多开发者…...
信息安全、网络安全和数据安全的区别和联系
1. 前言 有次有朋友问我 信息安全、网络安全和数据安全,这三个词平时写文档时怎么用? 我想很多人都说不清。这次我查阅了资料,尽量讲清楚这三者之间的区别和联系。 2. 信息安全 2.1 定义 信息安全是指为数据处理系统建立和采用的技术和管…...
路由组件与一般组件的区别
路由组件与一般组件的区别 1. 基本概念 1.1 路由组件 路由组件是指通过路由规则映射的组件,通常放在 pages 或 views 文件夹中。 1.2 一般组件 一般组件是指通过 import 导入后直接使用的组件,通常放在 components 文件夹中。 2. 主要区别 2.1 存…...
【微服务】4、服务保护
微服务架构与组件介绍 单体架构拆分:黑马商城早期为单体架构,后拆分为微服务架构。跨服务调用与组件使用 服务拆分后存在跨服务远程调用,如下单需查询商品信息,使用openfeign组件解决。服务间调用关系复杂,需维护服务…...
6_TypeScript 函数 --[深入浅出 TypeScript 测试]
在 TypeScript 中,函数是编程的核心组成部分之一。TypeScript 不仅继承了 JavaScript 的所有函数特性,还添加了静态类型检查和其他一些增强功能,使得函数更加安全和易于理解。以下是关于 TypeScript 函数的一些关键点和两个具体的示例&#x…...
Apifox=Postman+Swagger+Jmeter+Mock
A. 开发人员接口管理使用(Swagger 工具管理接口) B. 后端开发人员通过Postman 工具,一边开发一边测试 C. 前端开发人员需要Mock 工具提供前端调用 D. 测试人员通过(Postman、Jmeter)等工具进行接口测试 为了后台开发、前端开发、测试工程师等不同角色更加便捷管理…...
升级 Spring Boot 3 配置讲解 —— Spring Boot 3 核心源码专讲
学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕! Spring Boot 3 是 Spring 生态中的重要里程碑,它不仅全面支持 Java 17,还引入了许多新特性,如对 GraalVM 原生镜像的支持、改进的性能优化以及更灵活的…...
接口开发完后,个人对于接下来接口优化的一些思考
优化点 入参的合法性和长度范围,必填项的检查验证 因为没有入参,所以不需要考虑。 批量思想解决N1问题 // 假设要查询100个订单及其对应的用户信息 List<Order> orders orderMapper.selectList(new QueryWrapper<>().last("limit …...
jenkins 使用 ssh-agent向windows进行部署
背景: jenkins在linux的docker环境内,应用服务部署在windows。需要使用jenkins实现自动化部署。 实现方式: jenkins上构建pipeline任务,脚本如下: 遇到问题: 1、问题:jenkins 调用部署bat脚…...
音视频入门基础:MPEG2-PS专题(6)——FFmpeg源码中,获取PS流的视频信息的实现
一、引言 通过FFmpeg命令可以获取到PS文件/PS流的视频压缩编码格式、色彩格式(像素格式)、分辨率、帧率信息: ./ffmpeg -i XXX.ps 本文以H.264为例讲述FFmpeg到底是从哪个地方获取到这些视频信息的。 二、视频压缩编码格式 (…...
如果Adobe 退出中国后怎么办
最近听说Adobe要退出中国了?那咱们的设计师们可得好好想想怎么搞到正版软件了。别急,今天教大家一个超酷的福利——Edu邮箱! Edu邮箱是什么?有什么好处? Edu邮箱就是学校给学生和老师们发的邮箱,一般结尾是.edu。有了…...
欧几里得距离在权重矩阵中的物理意义
欧几里得距离在权重矩阵中的物理意义 目录 欧几里得距离在权重矩阵中的物理意义**衡量神经元差异程度**:**反映模型变化程度**:**聚类和分组的依据**:自然语言处理中的模型更新:**神经网络聚类分组**:欧几里得距离在权重矩阵中的物理意义衡量神经元差异程度: 在神经网络中…...
玩转大语言模型——ollama导入huggingface下载的模型
ollama导入huggingface模型 前言gguf模型查找相关模型下载模型 导入Ollama配置参数文件导入模型查看导入情况 safetensfors模型下载模型下载llama.cpp配置环境并转换 前言 ollama在大语言模型的应用中十分的方便,但是也存在一定的问题,比如不能使用自己…...
Linux-----进程通讯(管道Pipe)
目录 进程不共享内存 匿名管道 通过匿名管道实现通讯 有名管道 库函数mkfifo() 案例 进程不共享内存 不同进程之间内存是不共享的。是相互独立的。 #include <stdio.h> #include <stdlib.h> #include <errno.h>int num 0;int main(int argc, char con…...
【C++11】列表初始化、右值引用和移动语义、引用折叠、完美转发
C11 一.C的发展历史二.列表初始化1.C98的{}2.C11的{}3.C11中的std::initializer_list 三.右值引用和移动语义1.左值和右值2.左值引用和右值引用3.引用延长生命周期4.左值和右值的参数匹配5.右值引用和移动语义使用场景1.左值引用使用场景2.移动构造和移动赋值3.右值引用和移动语…...
Openssl1.1.1s rpm包构建与升级
rpmbuild入门知识 openssh/ssl二进制升级 文章目录 前言一、资源准备1.下载openssh、openssl二进制包2.安装rpmbuild工具3.拷贝源码包到SOURCES目录下4.系统开启telnet,防止意外导致shh无法连接5.编译工具安装6.补充说明 二、制作 OpenSSL RPM 包1.编写 SPEC 文件2.…...
递归思想的深度理解——汉诺塔问题和青蛙跳台阶问题
递归的深度理解——汉诺塔问题and青蛙跳台阶问题 青蛙跳台阶问题汉诺塔问题 青蛙跳台阶问题 问题:一只青蛙可以一次跳一级台阶,也可以一次跳两级台阶,如果青蛙要跳n级台阶,共有多少种跳法? 解答:我们可以先…...
从数据到诊断:朴素贝叶斯算法助力肿瘤预测之路
1.案例概述 肿瘤性质的判断影响着患者的治疗方式和痊愈速度。传统的做法是医生根据数十个指标来判断肿瘤的性质,预测效果依赖于医生的个人经验而且效率较低,而通过机器学习有望能快速预测肿瘤的性质。 2.数据集 本次肿瘤预测使用的数据集共有569组样本…...
Element-UI:如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中?
如何实现表格组件el-table多选场景下根据数据对某一行进行禁止被选中? 在使用 Element UI 的 Table 组件时,如果你想要禁用某一行的选中(特别是在多选模式下),可以通过自定义行的 selectable 属性来实现。selectable …...
Dexcap复现代码数据预处理全流程(四)——demo_clipping_3d.py
此脚本的主要功能是可视化点云数据文件(.pcd 文件),并通过键盘交互选择演示数据的起始帧和结束帧,生成片段标记文件 (clip_marks.json) 主要流程包括: 用户指定数据目录:检查目录是否存在并处理标记文件 -…...
JWT理解
前言 随着互联网的快速发展,身份验证和授权成为了许多应用的重要需求。JWT(JSON Web Token)作为一种轻量级的身份验证和授权机制,得到了广泛的应用。本文将为您详细介绍JWT的原理、结构和优点,帮助您更好地理解和应用…...
一种融合联邦学习和大模型特点的全新系统架构
一种融合联邦学习和大模型特点的全新系统架构 以下是一种融合联邦学习和大模型特点的全新系统架构设计: 分层分布式架构 底层 - 数据采集与预处理层:由大量的边缘设备和终端节点组成,如智能手机、物联网传感器等。这些设备负责采集本地数据,并在本地进行初步的数据预处理,…...
html表格table导出excel,主从表格式,带样式.自动分列
html的table导出成excel, vue模板 项目使用xlsx-js-style 源代码从https://github.com/gitbrent/xlsx-js-style/releases/tag/v1.2.0 下载 用里面的dist目录下的文件即可. 复制到vue项目的public目录下的XLSX目录下. 在index.hml中引入js脚本, 为啥要在这里引入? 是因为这里…...
U8G2库使用案例(stm32)
目录 一、小球在 OLED 屏幕平面内运动并碰撞反弹的效果 二、 简单的波形生成和显示程序: 三、三维三角形旋转展示 四、正方形平面内顺时针旋转 五、带有旋转点的空心圆圈应用 六、字幕滚动效果 七、下雪动画效果 八、进度条动画效果 自己移植的U8g2库,OLED库…...
067B-基于R语言平台Biomod2模型的物种分布建模与数据可视化-高阶课程【2025】
课程培训包含:发票全套软件脚本学习数据视频文件导师答疑 本教程旨在通过系统的培训学习,学员可以掌握Biomod2模型最新版本的使用方法,最新版包含12个模型(ANN, CTA, FDA, GAM, GBM, GLM, MARS, MAXENT, MAXNET, RF, SRE, XGBOOST…...
【通俗理解】AI的两次寒冬:从感知机困局到深度学习前夜
AI的两次寒冬:从感知机困局到深度学习前夜 引用(中英双语) 中文: “第一次AI寒冬,是因为感知机局限性被揭示,让人们失去了对算法可行性的信心。” “第二次AI寒冬,则是因为专家系统的局限性和硬…...
141.《mac m系列芯片安装mongodb详细教程》
文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…...
【Linux】sed编辑器
一、基本介绍 sed编辑器也叫流编辑器(stream editor),它是根据事先设计好得一组规则编辑数据流。 交互式文本编辑器(如Vim)中,可以用键盘命令交互式地插入、删除或替换文本数据。 sed编辑器是根据命令处理…...
unity3d-搞个场景漫游如何实现Alpha
要处理两个问题: 如何设置地面人不掉下去 方法一、 游戏物体加刚体,将游戏物体和地面加collider。如果是地形,可以使用 Terrain Collider;如果是简单的平面,可以添加 Box Collider 或者 Mesh Collider(如果…...
概率基本概念 --- 离散型随机变量实例
条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y,它们代…...
oscp备考 oscp系列——Kioptix Level 1靶场 古老的 Apache Vuln
目录 前言 1. 主机发现 2. 端口扫描 3. 指纹识别 4. 目录扫描 5. 漏洞搜索和利用 前言 oscp备考,oscp系列——Kioptix Level 1靶场 Kioptix Level 1难度为简单靶场,主要考察 nmap的使用已经是否会看输出,以及是否会通过应用查找对应漏…...
【简博士统计学习方法】3. 统计学习方法的三要素
3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间(Hypothesis Space):所有可能的条件概率分布或决策函数,用 F \mathcal{F} F表示。 若定义为决策函数的集合: F { f ∣ Y f ( X ) } \mathcal{F…...
UnionTech OS Server 20 网页无法访问yum源地址
统信yum地址 https://euler-packages.chinauos.com/server-euler/fuyu/1060/everything/sw_64/Packages/ 浏览器访问401报错无权限,查看linux uos环境下yum配置的用户名和密码 cat /etc/yum/vars/auth_* 然后自己组装生成Basic Authorization def generate_basic_…...
WPF区域导航+导航参数使用+路由守卫+导航日志
背景:使用ContentControl控件实现区域导航是有Mvvm框架的WPF都能使用的,不限于Prism 主要是将ContenControl控件的Content内容在ViewModel中切换成不同的用户控件 下面是MainViewModel: private object body;public object Body {get { retu…...
jvm基础
jvm的基本结构 类加载器(ClassLoader):加载class文件到内存中进行使用。 运行时数据区(Runtime Data Area):这是JVM在运行Java程序期间管理的内存区域,包括方法区(Meta…...
kaggle竞赛:纽约出租车行程时间NYC Taxi Trip Duration
1.引言 作为一名(坦白说有点懒的)图像处理方向的研究生,说实话最近新开一个坑,可能是因为要寒假了比较无聊,这次带来的系列是kaggle数据处理竞赛的经典例题:纽约出租车行程时间问题。希望大家多多支持&…...
Python提取目标Json键值:包含子嵌套列表和字典
目标:取json中所有的Name、Age字典 思路:递归处理字典中直接包含子字典的情况, import jsondef find_targ_dicts(data,key1,key2):result {}if isinstance(data, dict):if key1 in data and key2 in data: # 第一层字典中包含key1和key2re…...
<div>{{ $t(“collectionPlan“) }}</div> 中的$t是什么
$t是Vue I18n插件提供的一种方法,用于根据当前应用的语言环境来获取相应的翻译文本。 以下是一个简单的示例,展示如何在Vue I18n中定义消息: const i18n new VueI18n({locale: en, // 设置默认语言messages: {en: {collectionPlan: Collec…...
医学图像分析工具01:FreeSurfer || Recon -all 全流程MRI皮质表面重建
FreeSurfer是什么 FreeSurfer 是一个功能强大的神经影像学分析软件包,广泛用于处理和可视化大脑的横断面和纵向研究数据。该软件由马萨诸塞州总医院的Martinos生物医学成像中心的计算神经影像实验室开发,旨在为神经科学研究人员提供一个高效、精确的数据…...
win32汇编环境,在对话框中画五边形与六边形
;运行效果 ;win32汇编环境,在对话框中画五边形与六边形 ;展示五边形与六边形的画法 ;将代码复制进radasm软件里,直接编译可运行.重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>&g…...