当前位置:   article > 正文

【多模态大模型】CLIP 对比预训练 + 文字图像相似度:如何训练中文视觉大模型?_clip大模型训练教程

clip大模型训练教程

 


提出背景

论文:https://arxiv.org/pdf/2103.00020.pdf

代码:https://gitcode.com/openai/clip?utm_source=csdn_github_accelerator&isLogin=1

代码解读:https://blog.csdn.net/weixin_38252409/article/details/133828294

经典分类模型(例如resnet)的问题:

1.类别固定

2.当前的模型只能胜任一个任务,迁移到新任务上非常困难;

3.类别互斥(softmax)

4.当前的CV数据集标注劳动密集,成本高昂;

当前的模型只能胜任一个任务,迁移到新任务上非常困难;

5.当前模型泛华能力较差。

openai 用训练出来的 CLIP,在 Resnet 专属任务上,对比性能,CLIP小胜Resnet。

 

对比预训练

传统方法训练视觉模型的方式通常是使用有监督学习方法,需要收集大量图像和对应标签:

CLIP 采用了一种不需要人工大量标记数据的自监督学习方法。

CLIP 模型是一种基于对比学习的模型,可以将图像和文本进行联合编码,从而实现图像和文本之间的交叉检索。

  • 传统方法:要构建一个图像-文本匹配数据集,需要收集大量的图像和与之相关联的文本描述,并对它们进行人工标注。

    比如,我们收集了10000张图像和与之对应的10000个文本描述,然后需要手动将每张图像与对应的文本进行匹配标注。

  • CLIP方法:相比之下,CLIP可以利用自监督学习和互联网上的数据进行训练,无需显式的人工标注。

    例如,我们可以利用互联网上的图像和相关联的文本数据,比如从社交媒体、图像搜索引擎或图像描述数据集中获取图像-文本对,不用人工标注。

  • openai 使用了 WebImage Text 上 4亿 对图像文本对训练 CLIP

CLIP会将图像和文本分别编码为特征向量,并通过比较这些特征向量的相似性来学习图像和文本之间的匹配关系。

比如图像和文本的匹配任务中,模型需要区分正样本(真实的图像-文本匹配对)和负样本(随机的图像-文本对)。

模型会通过最大化正样本的相似性,同时最小化负样本的相似性来学习。

对比预训练:

  • 一个文本编码器,得到 n 个文本特征向量( T 1 . . . T n T_{1}...T_{n} T1...Tn
  • 一个图像编码器,得到 n 个图像特征向量( l 1 . . . l n l_{1}...l_{n} l1...ln
  • 将文本、图像映射到同一个特征空间
  • 计算这对组合的相似度
  • 最大化正样本相似度(对角线 l 1 T 1 、 l 2 T 2 、 l 3 T 3 、 . . . 、 l n T n l_{1}T_{1}、l_{2}T_{2}、l_{3}T_{3}、...、l_{n}T_{n} l1T1l2T2l3T3...lnTn 是正样本)
  • 最小化负样本相似度(其他是负样本)

对比预训练就像是一场寻找最佳舞伴的舞会,每个人(图像)和他们的个人介绍(文本)需要通过相互之间的相似性来配对,目的是让真正匹配的对(正样本)成为舞伴,同时避免错误的配对(负样本)。

把文本和图像转到一个空间,是以前的大模型完全没有的设计。

在CLIP模型中,文本编码器、图像编码器和特征空间对齐共同工作以便能通过对比损失函数实现有效的训练。

  1. 文本编码器:将文本输入转化为特征向量,使用深度学习模型(如Transformer),以捕获语言的语义信息。

  2. 图像编码器:将图像输入转化为特征向量,使用卷积神经网络(如Vision Transformer、ResNet)来捕获视觉内容。

  3. 特征空间对齐:调整文本和图像编码器,使它们在相同的高维特征空间中输出特征向量,这样,相似的图像和文本就在该空间中靠近。

    特征空间对齐确保这两种向量可以在同一个多维空间中进行有效比较

  4. 对比损失函数:真实配对的图像和文本之间的特征向量的相似度,同时最小化负样本对(随机配对的图像和文本)的相似度

    对比损失函数则是对齐过程的引导者,它通过奖励正确的图像-文本配对(正样本),并惩罚错误配对(负样本)来优化整个学习过程。

完整版(图是知乎君):

图像分割是一个将图像细分成多个部分或对象的过程。

在这个例子中,输入图像通过一个编码器变换成一系列的特征图(feature maps),这些特征图再与文本编码器产生的一个标签集进行匹配。

文本编码器处理的标签集包含“人”,“网球拍”,“树”,“沙子”以及“其他”。

神经网络的目标是识别输入图像中的不同对象,并将它们分配到上述类别中。

在神经网络的最后,一个空间正则化块被用来改善分割结果的质量。最终的输出图是一个分割图,其中不同的颜色代表了不同的类别,如图例所示。

“人”用蓝色表示,“网球拍”用红色,“树”用绿色,“沙子”用黄色,“其他”用灰色。

动态过程:

图像编码器

使用 ResNet 作为初始的图像特征提取器,然后将 ResNet 的输出,传递给 ViT 模型。

利用 ResNet 在低层级特征提取方面的优势,同时使用 ViT 模型的自注意力机制来捕捉图像中的全局关系。

图像编码器 = 5个ResNet + 4个ViT。

ResNet 部分:

  • 引入模糊池化,在下采样前加入一个高斯低通滤波。以减少特征图中的高频细节信息,从而实现更加鲁棒的下采样。
  • 将全局平均池化,替换成注意力池化。对特征图的每个通道进行加权平均,从而将更多的注意力放在重要的特征上。
  • 5 个模型的放缩:ResNet - 50、ResNet - 100、ResNet - 50x4、ResNet - 50x16、ResNet - 50x64

ViT 部分:

  • 在 patch embedding 和 position embedding 后,添加一个额外的线性/全连接层,以增加模型的非线性表达能力。
  • 更换了初始化方法,提升模型性能。
  • 4 个模型的缩放:ViT-B/32、ViT-B/16、ViT-B/14、ViT-B/14-336px

文本编码器

没啥特殊的,就是 Transformer :

  • 6 个编码器
  • 6 个解码器
  • 使用了 63M 个参数
  • 有 8 个注意力头

最大的亮点:zero-shot图像分类

传统大模型预训练后,还需要微调,才能处理下游任务。

CLIP 出来后,不需要任何训练数据,就可以直接做图像分类。

分类过程:

  • 将所有类别(汽车、狗、鸟等),转换为一个句子 A photo of a {object}
  • 输入到文本编码器,得到 N 个特征向量
  • 输入图像到图像编码器,得到 1 个特征向量
  • 俩个特征向量相似度最高的,就是图像的类别

核心贡献是把文本、图像映射到一个空间。

效果:

在这里插入图片描述
小胜 Resnet 101。

 


总结

CLIP的训练和功能:

  1. 子问题:如何让模型学会理解和连接图像与文本?

    • 子解法:对比学习
    • 之所以使用对比学习,是因为它能够通过比较正样本(匹配的图像-文本对)和负样本(不匹配的图像-文本对)来学习图像和文本之间的关联,无需显式的人工标注。
  2. 子问题:如何在没有大量人工标记数据的情况下训练视觉模型?

    • 子解法:预训练 + 自监督学习
    • 之所以采用这种方法,是因为通过利用互联网上已存在的大量图像-文本对,可以让模型在没有显式人工标注的情况下进行学习,这大大减少了对标注数据的依赖。
  3. 子问题:如何提高图像编码器的特征提取能力?

    • 子解法:ResNet和ViT结合用作图像编码器
    • 使用ResNet是因为其在低层次特征提取方面的优势,而ViT(Vision Transformer)则因其自注意力机制能够捕捉图像中的全局关系。
    • 这种结合充分利用了两种模型的优势,提高了特征提取的效能和准确性。
  4. 子问题:如何编码文本信息以与图像特征相匹配?

    • 子解法:Transformer模型用作文本编码器
    • 之所以选择Transformer作为文本编码器,是因为它的强大能力来自于注意力机制,能够有效地处理序列数据,并且与图像编码器产生的特征向量兼容,便于进行图像和文本之间的相似度计算。
  5. 子问题:如何实现无需微调即可进行图像分类的Zero-shot学习?

    • 子解法:动态构建文本特征向量
    • 核心在于将分类任务中的类别名称转换为预设格式的文本描述(如“A photo of a {object}”),然后通过文本编码器生成特征向量。
    • 通过比较这些向量与图像编码器输出的图像特征向量的相似度,可以直接进行分类。
    • 之所以采用这种方法,是因为它允许模型灵活应对各种分类任务而无需针对特定任务进行训练。

CLIP模型通过结合对比学习、自监督学习、以及Transformer等技术,实现了一种高效且灵活的图像与文本理解方式,特别是在处理零样本学习任务方面的巨大潜力。

 


如何训练中文 CLIP?

CLIP 训练数据都是英文的。

如何训练一个中文版本的CLIP,由于CLIP模型主要依赖于图像和文本之间的关联数据,因此要训练中文版本,关键在于收集和使用中文文本描述的大量图像-文本对。

步骤:

  1. 数据收集:收集包含中文描述的图像数据。这可以通过爬取中文网站、社交媒体平台或使用中文图像标注的公共数据集来完成。

在这里插入图片描述

  1. 数据处理:将收集到的数据转换成适合CLIP训练的格式。例如,每个图像都需要配有描述这个图像的中文文本。

  2. 文本编码器调整:调整或重新训练文本编码器部分,以理解中文。这可能需要在模型的文本编码器部分使用中文预训练的Transformer模型。

  3. 对比学习:与训练英文CLIP模型类似,使用对比学习方法来训练中文CLIP模型。通过最大化图像和相应中文描述之间的相似性,同时最小化与不匹配文本的相似性。

  4. 评估和调整:在中文数据上评估模型的表现,并根据需要进行调整。可能需要特别关注处理中文的挑战,如中文分词、语义理解等。

score = socre1 - socre2   
# 最大化分数差  =   正样本 - 负样本,这个差越大区分程度越大
# 可以对比同一个图文对,在CLIP的分数差,和自己训练的分数差
  • 1
  • 2
  • 3

训练一个中文的CLIP模型需要一组大量且多样化的中文图像-文本对,以及针对中文优化的文本编码器。

通过这样的训练,CLIP模型能够学习理解中文文本和图像之间的关系,从而在没有针对性训练的情况下,进行有效的零样本图像分类。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/387668
推荐阅读
相关标签
  

闽ICP备14008679号