万字长文解读深度学习——多模态模型CLIP、BLIP、ViLT

说明:
💡💡💡本文后续更新和完善将在新账号展开,请移步新地址:
深度学习笔记——多模态模型CLIP、BLIP


历史文章

机器学习

机器学习笔记——损失函数、代价函数和KL散度
机器学习笔记——特征工程、正则化、强化学习
机器学习笔记——30种常见机器学习算法简要汇总
机器学习笔记——感知机、多层感知机(MLP)、支持向量机(SVM)
机器学习笔记——KNN(K-Nearest Neighbors,K 近邻算法)
机器学习笔记——朴素贝叶斯算法
机器学习笔记——决策树
机器学习笔记——集成学习、Bagging(随机森林)、Boosting(AdaBoost、GBDT、XGBoost、LightGBM)、Stacking
机器学习笔记——Boosting中常用算法(GBDT、XGBoost、LightGBM)迭代路径
机器学习笔记——聚类算法(Kmeans、GMM-使用EM优化)
机器学习笔记——降维

深度学习

深度学习笔记——优化算法、激活函数
深度学习——归一化、正则化
深度学习——权重初始化、评估指标、梯度消失和梯度爆炸
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习笔记——卷积神经网络CNN
深度学习笔记——循环神经网络RNN、LSTM、GRU、Bi-RNN
深度学习笔记——Transformer
深度学习笔记——3种常见的Transformer位置编码
深度学习笔记——GPT、BERT、T5
深度学习笔记——ViT、ViLT
深度学习笔记——DiT(Diffusion Transformer)
深度学习笔记——多模态模型CLIP、BLIP
深度学习笔记——AE、VAE
深度学习笔记——生成对抗网络GAN
深度学习笔记——模型训练工具(DeepSpeed、Accelerate)
深度学习笔记——模型压缩和优化技术(蒸馏、剪枝、量化)


CLIP(Contrastive Language-Image Pre-training)

CLIP 是由 OpenAI 提出的一个用于多模态学习的模型,通过对比学习(contrastive learning)进行图像-文本联合学习的创新模型。CLIP 训练图像和文本的联合表示。

论文:Learning Transferable Visual Models From Natural Language Supervision

1. CLIP 的核心思想

CLIP 的核心思想是将图像和文本映射到一个共享的嵌入空间中,并通过对比学习最大化匹配图像-文本对之间的相似度,最小化不匹配图像-文本对的相似度。模型通过大量数据上进行预训练,具备强大的通用化能力,即零样本学习(zero-shot learning),这意味着它可以处理没有见过的任务或类目而无需重新训练。

2. CLIP 的模型架构

CLIP 的架构包括图像编码器文本编码器,它们分别将图像和文本输入嵌入到同一个向量空间。图像和文本分别经过编码后,计算它们在向量空间中的相似度来进行对比学习
在这里插入图片描述

2.1 图像编码器

CNN(如 ResNet)或 Vision Transformer (ViT) 作为图像编码器

  • ResNetViT 接受图像作为输入,并输出包含了图像的高层语义信息的向量

2.2 文本编码器

Transformer 作为文本编码器。这个编码器会将输入的文本描述(自然语言)转化为一个向量表示。

  • 文本编码器会将每个文本通过多层 Transformer 的处理,生成包含了文本的语义信息向量

2.3 对比学习机制

CLIP 的训练目标:通过对比学习(contrastive learning) 的损失函数 让正确的图像-文本对的表示在向量空间中尽可能接近,而错误的图像-文本对在向量空间中尽可能远离

2.4 对比损失(Contrastive Loss)

对比损失(Contrastive Loss):CLIP 使用了一种基于InfoNCE的对比损失函数。对于每一对图像-文本,模型会计算图像和所有文本对(以及文本和所有图像对)的相似度。通过最大化匹配对的相似度,同时最小化不匹配对的相似度,CLIP 可以学到更强的多模态表示。

InfoNCE

损失函数的目标是让图像 x i x_i xi;与正确文本描述 t i t_i ti的相似度最大化,同时与所有其他不相关文本 t j t_j tj 的相似度最小化,公式为:
在这里插入图片描述

  • ( x i x_i xi ):第 ( i i i ) 个图像样本。
  • ( t i t_i ti ):第 ( i i i ) 个图像样本的正确文本描述。
  • ( t j t_j tj ):其他文本描述(包括 ( t i t_i ti ) 和其他与 ( x i x_i xi ) 不匹配的文本描述)。
  • ( sim ( x i , t j ) \text{sim}(x_i, t_j) sim(xi,tj) ):图像 ( x i x_i xi ) 和文本 ( t j t_j tj 或者 t i t_i ti ) 的相似度,一般使用余弦相似度来计算。
  • ( τ \tau τ ):温度参数,用于控制相似度分布的平滑程度。

sim ( x i , t j ) \text{sim}(x_i, t_j) sim(xi,tj) 余弦相似度:
在这里插入图片描述
其中 ( v i v_i vi ) 是图像 ( x i x_i xi ) 的嵌入向量,( t j t_j tj ) 是文本 ( t j t_j tj ) 的嵌入向量。这样计算得到一个 相似度矩阵,矩阵中的每个元素表示批次中任意一对图像和文本的相似度。

由于CLIP 包含两个主要的编码器部分:图像编码器、文本编码器,所以,损失函数需要分为两部分,针对之后图像编码器的损失函数和 文本编码器的损失函数。之后根据各自的损失函数优化两部分构件的权重。

  • 其实损失函数都是一样的,只不过因为CLIP组成构件是两部分,所以需要分两部分,方便优化各自的权重参数,当单独使用图像编码器或者文本编码器时候(SD模型单独使用Text Encoder),也会有很好的效果。
  • 确保图像和文本的嵌入能够在共享的嵌入空间中彼此对齐(无论是从图像到文本,还是从文本到图像,匹配的对之间的相似度都被最大化,不匹配的对之间的相似度都被最小化。),从而在跨模态任务中实现一致性和相互匹配的能力。
图像编码器损失函数

作用于图像检索文本:给定一个图像,可以找到与之最匹配的文本描述。

图像损失部分:对于每一个图像 ( x i x_i xi ),该部分的损失最大化它与正确文本 ( t i t_i ti ) 的相似度,同时最小化它与其他错误文本 ( t j t_j tj ) 的相似度。这一部分确保了图像能够找到正确的文本,也就是说图像编码器能够将图像嵌入到一个空间中,使得匹配的文本描述与它更接近。
在这里插入图片描述

### CLIPBLIP 模型概述 CLIP (Contrastive Language–Image Pre-training) 是由 OpenAI 提出的一种多模态模型,其核心目标在于通过对比学习的方式联合训练文本和图像表示[^1]。该模型通过对大量互联网图片及其描述进行无标注预训练,能够生成高质量的跨模态嵌入空间,在此空间中相似的文本和图像会被映射得更加接近。 相比之下,BLIP (Bootstrap Language-Image Pre-training) 则是由 Salesforce 开发的一个统一框架,用于解决视觉语言理解和生成的任务[^4]。它不仅支持图文匹配(ITM: Image-Text Matching),还具备强大的零样本泛化能力以及开放式的问答功能。BLIP 的架构设计使得它可以灵活应用于多种场景,比如图像描述生成、视觉问答等任务。 #### 主要区别与特点 - **训练方式**: - CLIP 使用的是基于对比损失函数的大规模弱监督训练机制来构建共享表征;而 BLIP 结合了自监督技术和大规模有标签数据集来进行更深层次的理解与生成优化。 - 在实际应用上,由于 BLIP 更注重于具体的下游任务表现提升,因此通常会经历额外一轮针对特定应用场景的数据精调过程[^2]。 - **性能优势**: - 对于简单的关联判断或者检索类操作而言,经过充分训练后的 CLIP 已经展现出了非常优秀的效率及准确性水平[^3]。 - 如果涉及到复杂语义解析或者是创造性的内容生产,则可能需要依赖像 BLIP 这样具有更强表达能力和适应范围的产品级解决方案。 以下是两个典型例子展示如何利用这些工具完成相应工作: ```python from clip import load as load_clip import torch device = "cuda" if torch.cuda.is_available() else "cpu" model, preprocess = load_clip("ViT-B/32", device=device) image_input = preprocess(image).unsqueeze(0).to(device) text_inputs = torch.cat([clip.tokenize(f"a photo of a {c}") for c in classes]).to(device) with torch.no_grad(): image_features = model.encode_image(image_input) text_features = model.encode_text(text_inputs) similarity = (100.0 * image_features @ text_features.T).softmax(dim=-1) values, indices = similarity[0].topk(5) ``` 对于 BLIP 来说,虽然官方文档提供了详尽的操作指南,但由于其实现细节较为复杂,这里仅给出概念层面的应用示意: ```python from transformers import BlipProcessor, BlipForConditionalGeneration processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base").to(torch_device) raw_image = ... # Load your own image here. inputs = processor(raw_image.convert('RGB'), return_tensors="pt").to(torch_device) out = model.generate(**inputs) caption = processor.decode(out[0], skip_special_tokens=True) print(caption) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值