多模态模型演变

文章目录

多模态模型发展演变

仅供学习参考

timeline title 多模态基础模型发展时间线 2020 : ViT (Oct)
开创性将Transformer
应用于图像领域 2020 : SimCLR (Feb)
提出简单的对比
学习框架 2020 : MoCo v2 (Mar)
引入动量编码器
与队列机制 2021 : CLIP (Feb)
开辟双塔对比学习
多模态范式 2021 : MoCo v3 (Apr)
将ViT作为 backbone
取消队列用大batch 2021 : DINO (Apr)
无标签知识蒸馏
涌现分割属性 2021 : BEiT (Jun)
将BERT的掩码重建
思想应用于图像 2021 : MAE (Nov)
高效ViT预训练
不对称编解码器 2022 : Flamingo (Apr)
开创融合LLM的
多模态范式 2023 : SAM (Apr)
通用分割模型
提出"数据引擎"

自监督学习

监督学习:输入+模型+求损失(预测值,标签)

自监督学习:输入+模型+求损失(预测值,输入中找标签)

分三类:

  • 基于前置任务
  • 基于对比学习
  • 基于掩码重建

基于前置任务

1.位置预测

从一张图中取出一个补丁(Patch A),然后在其"八邻域"中取出另一个补丁(Patch B),让模型判断B相对于A的位置(例如:右上、正左、右下等)。

2.旋转预测

自设定旋转角度,模型自己去旋转自己去预测。

3.上色

一般操作是操作的图片的灰度图,我们上色则是输入灰度图,然后进行卷积提取特征,然后和原始图片进行对比求损失来进行图片上色。

这里的"和原始图片进行对比求损失"通常是在 Lab颜色空间 下进行的。输入是L通道(亮度,即灰度图),模型需要预测ab通道(颜色通道)。损失函数是计算预测的ab通道与真实的ab通道之间的差异(如L2损失)

4.聚类预测

多个图片通过CNN获取特征可以进行聚类算法,给他们预测分类标签,则认为他的标签就是预测的标签,则之后就用这个标签进行反向传播去优化。(类似于半监督学习)

基于对比学习

对比学习

我创建一对pair(正样本,负样本),让正样本之间的距离尽可能的近,让负样本的距离尽可能的远。

正样本:原始图像进行数据增强后的图像

负样本:当前Batch中,除锚点图像本身外,所有其他图像的增强视图。

将正样本拉近,负样本推远的这种学习方式,最小化这个loss

数据增强

对比学习中也会有前置任务比如说:图片的改变也就是数据增强

pytorch中实现方式:

SimCLR

A Simple Framework for Contrastive Learning of Visual Representations

hi和hj进行下游任务特征输入,通过MLP之后zi和zj计算损失反向传播优化。

实验结论:

  • 随机裁剪和颜色抖动可以获得更好的一个效果
  • batch_size比较大也可以获得一个更好的一个效果,一个大的batch_size中可以包含更多的一个负样本,也就是在一个batch中见到的负样本越多效果相对越好。
  • 更大的网络和训练时间可以提升模型效果,比有监督带来的提升更大。
MoCo:Momentum Contrast

x_query:原始图像

x_key*:数据增强后的图像

encoder是直接x_q求损失反向传播更新

momentum_encoder参与计算对比损失,但其参数通过动量更新从查询编码器继承,而非通过梯度反向传播直接更新。

m≈1

特点:

  • 所有的负样本全部放进队列中,方便检索和添加更多负样本。
  • 使用动量更新是为了保持键编码器参数的平稳变化,从而确保队列中负样本特征的一致性,避免快速变化的编码器导致对比学习目标的不稳定。

基于掩码重建

BEiT

基于Birt的一个思想也就是通过随机挖取空(随机掩码)来预测其位置的图像。

BEiT使用一个预训练好的图像Tokenizer,将每个图像块编码成一个离散的视觉令牌。模型的目标是预测被掩码图像块所对应的视觉令牌ID。

将图像进行tokenizer图像分词,也就是图像中的每一个位置都有有一个token,在预测的时候就是去预测这个token,之后求损失反向传播优化。

Vision Transformer(ViT)

  • 一张图像切成多个patch,每个patch对应模型的一个输入位置。
  • 通过一个线性的映射层把patch转换成维度的embedding,比如768维度的一个向量,以及一个额外的可学习[class]令牌以及位置编码。

说白了就是将图片转换成向量 + [class]令牌 + 位置编码 进行训练。[class]令牌的输出用作最终的表征。

模型规模版本

MoCo v3

moco v2就是Encoder特征层后加了一层MLP。


  • encoding部分替换成了ViT的架构方式
  • 移除了外部字典队列,转而使用当前大Batch内的所有其他样本作为负样本来源
  • 采用了对称的对比损失,即计算了query1 vs key2query2 vs key1两个InfoNCE损失,并求和。

DINO

Knowledge distillation with no labels

这里的center是一个可学习的参数,它通过一个动量项在整个训练过程中更新,代表所有Teacher网络输出特征的全局中心 ,用指数平滑一下,c可以看作是全局特征的中心,每次输入一张图像进入teacher网络的这个特征减掉这个c

MAE

  • 例:输入图像mask75%的图像
  • 图像向量嵌入通过ViT
  • 通过位置编码信息,加上被掩盖的位置进行预测
  • 和目标图片进行损失求取反向传播优化

SAM

Segment Anything Model


  • 文本输入-->prompt_encoder
  • 图像输入-->image_encoder
  • 将两个特征融合然后经过ViT逐一token的计算
  • encoder足够重(预训练模型),decoder足够轻(大模型范式)
  • Focal_loss:线性加权,给容易预测的像素值给一个更低的权重,给预测困难的值更高的一个权重值,把注意力放在更加难分割的区域上,比如说前景和背景的边缘。
  • Dice_loss:衡量预测的这个mask和真实的mask的重叠度求取的一个损失,类似于IOU(交并比)

模型训练策略:

  • 先用有真实标签的数据集去训练第一版的分割模型
  • 然后拿这个模型去给没有标注的数据预测一个假的标签
  • 设置了一个检测机制,检测结果是否可信(半自动标注),剩余数据进行人工标注
  • 再用这个数据去训练这个模型
  • 训练好后再用新数据集去训练模型
  • 不断迭代

研究方向提出:从海量的数据集中找出最具代表性的一些数据来训练模型,用最少的数据集训练出最有效果的模型

多模态的概念

多模态类型

  • 输入与输出模态不同
  • 多模态输入
  • 多模态输出

多模态网络的要素

针对于如何融合多模态的信息提出几种方式:

  • Encoder:针对每个模态定义单独的Encoder来转成向量
    • 图片:CNN/ViT让它变成固定尺寸的向量
    • 文本:分词+词嵌入转向量+位置编码
  • Align Strategy:不同模态的对齐/融合方式
  • LLM(Optional):以大语言模型为核心的网络

模型架构方式

Dual-Encoder:通过对比学习约束image和text这对pair的loss

Fusion:在Dual-Encoder的基础上加入一个融合的decoder,之后再去求loss

Encoder-Decoder+Adapted-LLM:两种架构方式差不多,可以看作是通过大语言模型来架构这个多模态。

CLIP

三要素:

  • 文本嵌入+图像嵌入

  • 同一样本的相似度尽可能的大,不同样本的相似度尽可能小来约束图像与文本之间的距离

  • loss是最大化对角线上的(图像,文本)对的相似度,最小化其他元素上的相似度

使用对称的交叉熵损失,同时从两个方向约束:(1)每张图像与匹配文本的相似度高于其他文本;(2)每个文本与匹配图像的相似度高于其他图像

  • 不存在LLM

训练:大量的图像和文本对,进行对比学习

主要用于分类图像

  • 通过一个prompt来与图像进行计算一个相似度,然后找到相似度最大的这一个,就认为这个图像属于这个类别

  • 输入和标签之间同时经过网络让后来约束他们之间的距离,而不是只有输入到预测目标这样一个单向的路径

Flamingo

  • Vision_Encoder:使用的是CNN+MLP

可以直接使用VIT来优化

  • Perceiver Resampler:使用可学习查询向量作为Q,以图像特征作为K和V,通过交叉注意力将图像特征聚合成固定数量的视觉Token
  • GATED XATTN-DENSE层:在LLM层中插入,以文本特征作为Q,以视觉Token作为K和V,进行跨模态融合
  • 输入图像是有顺序的,用特殊字符进行替换。

LLaVA

可以近似的看成是一个Flamingo的一个简化版

Vision_Encoder使用的是CLIP训练得到的

LLM使用的是LLaMA

第一个阶段(预训练)

  • 训练映射层(ProjectionW)

  • 冻结视觉编码器

  • 冻结LLM的权重

  • 目的是让图像与文本对齐

第二个阶段(精调)

  • 冻结视觉编码器
  • 训练映射层
  • 训练LLM的权重(让模型同时理解图像和文本)

数据集的需求:包含文本和图像的对话形式的数据集

视觉多轮对话能力

最主要的一个方式是采用GPT来生成多模态训练数据的方法,并且用这样的一个形式造出来了一个很大的数据集来训练LLaVA。

o的一个简化版

Vision_Encoder使用的是CLIP训练得到的

LLM使用的是LLaMA

第一个阶段(预训练)

  • 训练映射层(ProjectionW)

  • 冻结视觉编码器

  • 冻结LLM的权重

  • 目的是让图像与文本对齐

第二个阶段(精调)

  • 冻结视觉编码器
  • 训练映射层
  • 训练LLM的权重(让模型同时理解图像和文本)

数据集的需求:包含文本和图像的对话形式的数据集

视觉多轮对话能力

最主要的一个方式是采用GPT来生成多模态训练数据的方法,并且用这样的一个形式造出来了一个很大的数据集来训练LLaVA。

相关推荐
曲幽3 小时前
Flask数据库操作进阶:告别裸写SQL,用ORM提升开发效率
python·sql·sqlite·flask·web·sqlalchemy
zhaodiandiandian3 小时前
AI 深耕产业:从技术突破到价值重构
人工智能·重构
编程大师哥3 小时前
R 语言与 Python 数据分析核心区别:选型指南与场景适配
python·数据分析·r语言
shenzhenNBA3 小时前
如何用python生成一定规则的序列号?
开发语言·python·sn·序列号
几分醉意.3 小时前
Bright Data AI Scraper Studio:用一句Prompt,自动生成企业级爬虫架构
人工智能·爬虫·prompt
说私域3 小时前
从营销效率到零售效率:开源AI智能名片链动2+1模式与S2B2C商城小程序驱动的渠道裂变新范式
人工智能·小程序·零售
16324015413 小时前
回顾-LLM基础模块,分类,架构,训练等小汇总
llm
秋刀鱼 ..3 小时前
第二届机器学习、计算智能与模式识别国际学术会议(MLCIPR 2025)
运维·人工智能·python·科技·机器学习·自动化
高洁013 小时前
循环神经网络讲解(2)
人工智能·python·深度学习·神经网络·机器学习