多模态论文笔记——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/diannao/66149.shtml

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

相关文章

网络安全抓包

#知识点&#xff1a; 1、抓包技术应用意义 //有些应用或者目标是看不到的&#xff0c;这时候就要进行抓包 2、抓包技术应用对象 //app,小程序 3、抓包技术应用协议 //http&#xff0c;socket 4、抓包技术应用支持 5、封包技术应用意义 总结点&#xff1a;学会不同对象采用…

Innodisk iSMART V6使用说明_SSD还能用多久?已经读写了多少次数?……

Innodisk iSMART是一款SSD健康数据读取软件。它能轻松获取大部分SSD内部寄存器中的健康数据&#xff0c;并以简洁的图形界面展示给用户。在程序界面的顶部&#xff0c;是页面标签&#xff0c;点击页面标签就能切换到相应的页面。页面标签的下面是磁盘选择栏。点击磁盘编号&…

网络编程原理:回显服务器与客户端通信交互功能

文章目录 路由器及网络概念网络通信基础TCP/IP 五层协议封装和分用封装分用 网络编程&#xff08;网络协议&#xff09;UDP类 API使用实现回显通信程序回显服务器(UDP代码)回显客户端(UDP代码) TCP API使用回显服务器(TCP代码)回显客户端(TCP代码) 路由器及网络概念 网络发展是…

设计模式 创建型 建造者模式(Builder Pattern)与 常见技术框架应用 解析

单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;又称生成器模式&#xff0c;是一种对象构建模式。它主要用于构建复杂对象&#xff0c;通过将复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建出具有不同表示的对象。该模式的核心思想是将…

【C++】P1428 小鱼比可爱

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目说明题目输入格式题目输出格式样例**输入样例****输出样例** 题目解析 &#x1f4af;解法分析我的做法代码解法说明时间复杂度 老师的做法代码解法说明总结时间复杂度 …

maven之插件调试

当使用maven进行项目管理的时候&#xff0c;可能会碰到一些疑难问题。网上资料很少&#xff0c;可能会想着直接调试定位问题。这里以maven-compiler-plugin为例&#xff1a; &#xff08;1&#xff09;准备maven-compiler-plugin源码 进入maven 官网-》Maven Plugins-》找到对…

蓝桥杯(Java)(ing)

Java前置知识 输入流&#xff1a; &#xff08;在Java面向对象编程-CSDN博客里面有提过相关知识------IO流&#xff09; // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…

【C++】深入理解C语言中的特殊字符处理与问题分析优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目&#xff1a;B2090 年龄与疾病输入格式输出格式输入输出样例 &#x1f4af;初始代码分析与问题排查问题点分析 &#x1f4af;修正后的代码与优化修正与优化要点 &#…

电商Google广告:2025年提升转化率的5种策略

展望 2025 年&#xff0c;Google 广告领域将迎来一系列显著变化&#xff0c;这些趋势对于提升广告转化率至关重要&#xff0c;值得我们提前关注与布局。 智能化程度持续加深&#xff0c;用户搜索习惯愈发精细&#xff0c;广告格式推陈出新&#xff0c;视频广告势头正猛...那么…

【pytorch练习】使用pytorch神经网络架构拟合余弦曲线

在本篇博客中&#xff0c;我们将通过一个简单的例子&#xff0c;讲解如何使用 PyTorch 实现一个神经网络模型来拟合余弦函数。本文将详细分析每个步骤&#xff0c;从数据准备到模型的训练与评估&#xff0c;帮助大家更好地理解如何使用 PyTorch 进行模型构建和训练。 一、背景 …

编程入门(2)-2024年 RAD Studio version 12发布综述

随着2024年即将画上句号&#xff0c;我想借此机会回顾一下我们在这一年中发布的一些Embarcadero产品、行业趋势&#xff0c;并感谢我们尊贵的客户们对我们的产品一如既往的支持。这一年对我们来说充满了激动人心的变化和发展&#xff0c;我们非常高兴能与您一起踏上这段旅程。 …

visual studio 安全模式

一、安全模式&#xff1a; 在 Visual Studio 中&#xff0c;安全模式是一种启动方式&#xff0c;允许你在禁用所有扩展和自定义设置的情况下启动 Visual Studio。这个模式可以帮助排除插件或扩展引起的问题&#xff0c;特别是在 Visual Studio 无法正常启动时。 二、安全模式下…

RocketMQ消费者如何消费消息以及ack

1.前言 此文章是在儒猿课程中的学习笔记&#xff0c;感兴趣的想看原来的课程可以去咨询儒猿课堂 这篇文章紧挨着上一篇博客来进行编写&#xff0c;有些不清楚的可以看下上一篇博客&#xff1a; https://blog.csdn.net/u013127325/article/details/144934073 2.broker是如何…

EasyExcel自定义动态下拉框(附加业务对象转换功能)

全文直接复制粘贴即可&#xff0c;测试无误 一、注解类 1、ExcelSelected.java 设置下拉框 Documented Target({ElementType.FIELD})//用此注解用在属性上。 Retention(RetentionPolicy.RUNTIME)//注解不仅被保存到class文件中&#xff0c;jvm加载class文件之后&#xff0c…

【2025最新计算机毕业设计】基于Spring Boot+Vue影院购票系统(高质量源码,提供文档,免费部署到本地)

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

信息科技伦理与道德1:研究方法

1 问题描述 1.1 讨论&#xff1f; 请挑一项信息技术&#xff0c;谈一谈为什么认为他是道德的/不道德的&#xff0c;或者根据使用场景才能判断是否道德。判断的依据是什么&#xff08;自身的道德准则&#xff09;&#xff1f;为什么你觉得你的道德准则是合理的&#xff0c;其他…

Web安全扫盲

1、建立网络思维模型的必要 1 . 我们只有知道了通信原理&#xff0c; 才能够清楚的知道数据的交换过程。 2 . 我们只有知道了网络架构&#xff0c; 才能够清楚的、准确的寻找漏洞。 2、局域网的简单通信 局域网的简单通信&#xff08;数据链路层&#xff09; 一般局域网都通…

Linux驱动开发(18):linux驱动并发与竞态

并发是指多个执行单元同时、并行执行&#xff0c;而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问 则很容易导致竞态。对于多核系统&#xff0c;很容易理解&#xff0c;由于多个CPU同时执行&#xff0c;多个CPU同时读、写共享资源时很容易造成竞态。…

009:传统计算机视觉之边缘检测

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 本节来看一个利用传统计算机视觉方法来实现图片边缘检测的方法。 什么是边缘检测&#xff1f; 边缘检测是通过一些算法来识别图像中物体之间或者物体与背景之间的边界&…

QML使用Popup实现弹出Message

方案一&#xff1a;popup import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15ApplicationWindow {visible: truewidth: 640height: 480title: qsTr("Top Message Popup Example")ColumnLayout {anchors.centerIn: parentspacing: 10Butt…