目录
- 论文概述
- 1.论文摘要
- 2.论文脑图
- 3.论文创新
- 3.1模型构建
- 3.2训练方法
- 3.3数据构建
- 3.4部署优化
- 4.模型架构
- 论文解析
- 1. 引言
- 2. 方法
- 2.1数据说明
- 2.2预训练方法
- 2.2.1模型初始化方法
- 2.2.2两阶段预训练方法
- 2.3预训练细节
- 2.3.1模型初始化
- 2.3.2第一阶段预训练
- 2.3.3第二阶段预训练
- 2.3.4更高分辨率模型预训练
- 2.4微调细节
- 2.4.1微调数据集
- 2.4.2实验环境与策略
- 3. 评价
- 3.1跨模态检索
- 3.1.1数据集和评估指标
- 3.1.2评估结果
- 3.1.3消融研究
- 3.2零样本图像分类
- 3.2.1中文开放域图像分类基准
- 3.2.2实验结果
- 3.2.3实验分析
- 4.部署
- 4.1模型部署
- 4.2性能测试
- 4.3指标评估
- 5. 总结
- 6. 局限性及应对措施
- 6.1数据局限性及改进方向
- 6.2模型局限性及改进方向
- Chinese CLIP:Contrastive Vision-Language Pretraining in Chinese(中文视觉对比语言预训练)
- 论文:https://arxiv.org/abs/2211.01335(2023.05)
- GitHub:https://github.com/OFA-Sys/Chinese-CLIP
- 在人工智能领域,视觉与语言的融合一直是研究的热点方向。随着技术的不断发展,视觉语言基础模型如雨后春笋般涌现。然而,大多数跨模态预训练模型在向特定语言场景迁移时面临诸多挑战。今天,我们将深入研读 “Chinese CLIP: Contrastive Vision - Language Pretraining in Chinese” 这篇论文,来探究如何针对中文环境打造高效的视觉语言预训练模型。该论文由安杨、潘俊书等学者撰写。文章提出了 Chinese CLIP,这是一种在中文图像文本对上进行预训练的特定语言视觉语言基础模型,并通过实验证明了其在跨模态检索和零样本图像分类任务中的有效性。
论文概述
1.论文摘要
- 视觉语言基础模型取得的巨大成功推动了计算机视觉和多模态表征学习的研究与应用。然而,将这类基础模型有效地迁移到特定语言场景中仍然存在困难。在这项研究中,论文提出了中文 CLIP 模型,并采用两阶段预训练方法,第一阶段使用锁定图像调整(locked-image tuning)对模型进行训练,第二阶段则进行对比调整(contrastive tuning)。具体而言,论文开发了 5 种不同规模的中文 CLIP 模型,参数数量从 7700 万到 9.58 亿不等,并且在收集到的大规模中文图像文本对数据集上对这些模型进行了预训练。综合实验表明,中文 CLIP 在零样本学习和微调设置下,在 MUGE、Flickr30K-CN 和 COCO-CN 等数据集上均能达到最先进的性能表现。此外,基于 ELEVATER 基准测试的评估,该模型在零样本图像分类任务中也具备有竞争力的性能。
2.论文脑图
3.论文创新
3.1模型构建
- 特定语言模型构建:提出专门针对中文的视觉语言基础模型 Chinese CLIP,利用大规模中文图像文本对数据进行预训练,有效解决跨模态预训练模型难以向中文场景高效迁移的问题,促进了中文特定的多模态表示学习。
3.2训练方法
- 两阶段预训练方法:提出两阶段预训练方法,先通过 Locked-image Tuning(LiT)让文本编码器从基础视觉模型中读取高质量表示,再将整个模型迁移到引入的预训练数据领域。这种方法有效提升了模型性能,且优于从头开始预训练或直接微调预训练模型的方式。
3.3数据构建
- 大规模数据集构建:构建了大规模的中文图文对数据集,数据来源广泛,包括从 LAION-5B 中提取的中文数据、悟空数据集以及经典英文多模态数据集的翻译数据等。通过精心的数据预处理,为模型训练提供了高质量的数据支持。
3.4部署优化
- 模型部署优化:提供 NVIDIA TensorRT 和 ONNX 模型用于部署,显著提升了推理效率,推理速度比 Pytorch 模型快 2 - 10 倍,且几乎不损失性能,为模型的实际应用提供了更高效的解决方案。
4.模型架构
- 开发了 5 种不同规模的 Chinese CLIP 模型,参数数量从约 7700 万到 9.58 亿不等。包含 1 个基于 ResNet-50 的模型 CN-CLIPRN50 和 4 个基于视觉 Transformer(ViT)的模型,即 CN-CLIPViT-B/16、CN-CLIPViT-L/14、CN-CLIPViT-L/14@336px 和 CN-CLIPViT-H/14 。除特别说明外,这些模型均在分辨率为 224×224 的图像上进行预训练,各模型架构如下。
- ResNet-50、ViT-B/16 和 ViT-L/14 的骨干架构与 OpenAI CLIP 一致,ViT-H/14 的架构与 LAION CLIP 相同,这使得可以用这些模型的权重初始化 Chinese CLIP 的图像编码器。文本编码器采用中文 Roberta 模型,其中最轻量化的小尺寸模型使用 3 层 RBT3 架构,基础尺寸和大尺寸模型采用 12 层 RoBERTa-wwm-Base 架构,超大尺寸的 CN-CLIP 使用 24 层 RoBERTa-wwm-Large 架构。文本分词器的词汇表大小为 21,128。
论文解析
1. 引言
- 在基础模型的发展历程中,对比语言图像预训练模型 CLIP 是多模态表示学习领域的一个重要里程碑。与传统的生成式预训练不同,CLIP 是一种基于对比学习的模型,它在包含约 4 亿个图像 - 文本对的大规模数据集上进行预训练。CLIP 不仅在视觉语言检索中取得了卓越的性能,也在一系列数据集的零样本图像分类任务中展现出了最先进的性能。CLIP 在视觉和语言之间建立了联系,这种将视觉和语言关联起来的能力,为多模态表示学习提供了新的思路,推动了计算机视觉从依赖大量标注数据的传统模式向基于多模态关联的新方向发展 。
- 由于多种原因,将跨模态预训练模型有效地迁移到另一种语言中是很困难的,CLIP 在多数场景表现好,但在中文跨模态检索中,使用机器翻译的数据让它难以发挥实力,因为它没有充分学习中文视觉和语言数据的分布特点。在使用 MUGE 基准进行测试时,CLIP 的表现远不如 Chinese CLIP。如下图,这一结果凸显了 Chinese CLIP 针对中文数据进行优化的有效性,说明专门为中文设计的模型在处理中文相关任务时更具优势。
- 为了解决跨模态预训练模型在中文数据上的应用问题,本文提出了 Chinese CLIP,采用与 OpenAI CLIP 相同的架构,开发了一种两阶段预训练方法。第一阶段让文本编码器适应中文文本,利用已有的视觉编码器基础;第二阶段让两个编码器共同学习,使模型能更好地融合中文图像和文本信息。这种设计使得模型能有效利用预训练知识并适应中文数据,为后续在中文视觉 - 语言任务中的良好表现奠定了基础。
- 本文提供了用于部署的 NVIDIA TensorRT 和 ONNX 模型,在推理时,它们的运行速度比 PyTorch 模型快约 2 到 10 倍。
- Chinese CLIP 在零样本学习和微调设置下的跨模态检索任务中达到了最先进的性能水平,在零样本图像分类任务中也具备有竞争力的性能。
2. 方法
2.1数据说明
- 使用尽可能多的公开可用数据对 Chinese CLIP 进行预训练,收集高质量的公共数据集,包括从 LAION - 5B、悟空数据集提取中文数据,以及添加经典英文多模态数据集的翻译数据,构建了一个包含约 2 亿个图像文本对的中文多模态预训练数据集。对于图像,大多数情况下是将其分辨率调整为 224×224,对于 ViT - L/14@336px 模型,图像分辨率调整为 336×336 。
2.2预训练方法
2.2.1模型初始化方法
- 利用现有预训练模型的优势,使用 CLIP 官方发布的预训练检查点的权重来初始化图像编码器,使用 RoBERTa - wwm - ext 和 RBT3 的权重来初始化文本编码器。对比了 “对比调整”(contrastive tuning) 和 “锁定图像调整(Locked - image Tuning,LiT)” 两种预训练方式,突出 LiT 在下游迁移中的优势。
2.2.2两阶段预训练方法
- 第一阶段,在预训练过程中冻结图像编码器的参数,即 “锁定” 图像编码器,仅对文本编码器进行预训练以实现视觉 - 语言对齐,直到预训练性能没有显著提升为止。第一阶段让文本编码器更好地适应中文文本数据,利用预训练的图像编码器强大的特征提取能力,专注于文本编码器与图像编码器的对齐训练。
- 第二阶段,在没有任何参数冻结的情况下继续预训练,以便图像编码器能够学习对来自中文网站的图像数据分布进行建模。第二阶段让图像编码器学习中文图像数据的特征和分布,使得整个模型能够更好地融合视觉和语言信息。
2.3预训练细节
2.3.1模型初始化
- 图像编码器初始化:使用 OpenAI CLIP 的权重初始化 CN-CLIPRN50、CN-CLIPViT-B/16 和 CN-CLIPViT-L/14 的图像编码器,使用 LAION CLIP 的权重初始化 CN-CLIPViT-H/14 的图像编码器,除了 ResNet 或 ViT 的参数外,温度参数和视觉输出投影参数也用预训练的 CLIP 权重进行初始化。
- 文本编码器初始化:使用相应模型规模的已发布中文 Roberta 权重来初始化其参数,但会丢弃池化层权重,文本输出投影权重则通过正态分布随机初始化。
2.3.2第一阶段预训练
- CN-CLIPRN50、CN-CLIPViT-B/16、CN-CLIPViT-L/14 和 CN-CLIPViT-H/14 这4个模型共享超参数,图像编码器被冻结,分别预训练约 20、44、64 和 26 个 epoch,预训练的最优 epoch 数是通过在训练过程中测量 3 个下游零样本检索任务的平均召回率来确定,启用了混合精度训练。
- 对输入图像使用随机裁剪和自动数据增强,通过 GPU 之间的全收集通信(all-gather communications)来计算全局批次上的对比损失,对于 CN-CLIPRN50,在这个阶段不更新批归一化层的运行方差和均值。
- 使用 64 个 NVIDIA V100 GPU 对 CN-CLIPRN50 预训练 1.6 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-B/16 预训练 4.5 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-L/14 预训练 11.5 天,使用 184 个 NVIDIA A100 GPU 对 CN-CLIPViT-H/14 预训练 3.8 天。
2.3.3第二阶段预训练
- 解冻图像编码器并更新所有模型参数。除了峰值学习率、批量大小和训练 epoch 数外,第一阶段中提到的所有其他超参数保持不变。为了进行更精细的优化,我们将学习率降低到 2e-5。
- 由于 GPU 内存的限制,对于 CN-CLIPRN50、CN-CLIPViT-B/16 和 CN-CLIPViT-L/14,批量大小分别缩小到 16384、16384 和 4608。在处理 CN-CLIPViT-H/14 时,我们采用梯度检查点技术(gradient checkpointing),这使得批量大小可以增大到 32,768。这 4 个模型在第二阶段分别预训练约 44、15、7 和 7 个 epoch。
- 使用 64 个 NVIDIA V100 GPU 对 CN-CLIPRN50 预训练 5.8 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-B/16 预训练 3.0 天,使用 128 个 NVIDIA V100 GPU 对 CN-CLIPViT-L/14 预训练 8.0 天,使用 184 个 NVIDIA A100 GPU 对 CN-CLIPViT-H/14 预训练 2.2 天 。
2.3.4更高分辨率模型预训练
- 对 CN-CLIPViT-L/14 的图像位置嵌入进行插值,以适应更高的分辨率,然后使用分辨率为 336×336 的图像继续预训练。从 CN-CLIPViT-L/14 开始,继续预训练 2 个 epoch。预训练过程仅使用 128 个 NVIDIA A100 GPU,耗时 0.7 天。这是针对特定分辨率模型的训练优化,以充分利用更高分辨率图像中的信息,提升模型性能。
2.4微调细节
2.4.1微调数据集
- 选择 MUGE、Flickr30K-CN 和 COCO-CN 这 3 个跨模态检索数据集对 Chinese CLIP(CN-CLIP)进行微调,这是因为它们在跨模态检索研究中具有代表性,能有效检验模型在不同场景下的性能。
- MUGE 检索数据集是一个图像 - 文本检索数据集,其数据提取自中国的电子商务网站。Flickr30K - CN 和 COCO - CN这两个数据集基于经典的 Flickr30K 和 MSCOCO - 1K 数据集构建,通过将原数据集中的文本翻译成中文。
- MUGE、Flickr30K - CN 和 COCO - CN 这三个数据集的平均文本长度分别为 7.4、19.7 和 16.8。
2.4.2实验环境与策略
- 使用 32 个 NVIDIA A100 GPU 进行实验,微调策略和损失函数与预训练过程一致,便于模型快速适应微调任务。将批量大小设置得尽可能大,提高训练效率。在对 CN-CLIPViT-L/14@336px 和 CN-CLIPViT-H/14 进行微调时,采用梯度检查点技术,以便能够使用更大的批量大小。除了如批量大小、学习率等,其他超参数默认与预训练相同。在每个训练轮次结束时保存模型参数,以便后续选择最佳模型。
- 微调过程中批量大小、峰值学习率、最大训练轮数和热身迭代次数的具体设置如下
3. 评价
3.1跨模态检索
3.1.1数据集和评估指标
- 在 MUGE、Flickr30K-CN 和 COCO-CN三个跨模态检索数据集上对 Chinese CLIP 进行验证和测试。
- 通过零样本学习和微调两种设置来全面考察模型性能。零样本学习测试模型在未见过特定类别样本时对图像和文本的匹配能力,反映模型的泛化能力;微调则是在已有模型基础上,通过特定数据集进一步优化模型,看其在特定任务上的提升效果。
- 使用 Chinese CLIP 模型来计算图像与文本之间的相似度得分,并返回相似度最高的前 K 个候选结果。对于微调设置,采用对比调整的方法对 Chinese CLIP 模型进行跨模态检索的微调。其评估方式与零样本学习中的评估方式相同。评估指标为 Recall@K,其中 K 取值为 1、5、10,以及平均召回率(MR,即 Recall@K 的平均值)。
3.1.2评估结果
- MUGE - Retrieval 数据集:基础规模的 CN - CLIPViT - B/16 和小型的 CN - CLIPRN50 在零样本学习和微调设置下,相比基线模型 WukongViT - B/32 和 R2D2ViT - B,在平均召回率(MR)指标上有显著提升。大规模模型 CN - CLIPViT - L/14 及更高分辨率的 CN - CLIPViT - L/14@336px 性能突出,CN - CLIPViT - H/14 进一步提升了性能。
- Flickr30K - CN 和 COCO - CN 数据集:重点关注 R@1 指标,无论是基础规模模型 CN - CLIPViT - B/16 和 CN - CLIPRN50,还是大规模模型 CN - CLIPViT - L/14 及 CN - CLIPViT - L/14@336px,在零样本学习和微调设置下,在文本到图像检索和图像到文本检索方面,大多能超越基线模型。而且从 CN - CLIPViT - L/14 提升到 CN - CLIPViT - H/14,性能在各指标上普遍提高。
- 在平均文本长度为 45.3 的 ICR数据集上进行了微调实验。由于 ICR 数据集中的文本较长,我们在微调时将最大文本长度设置为 128。结果表明,Chinese CLIP 在处理较长文本的跨模态检索任务中,也能达到最先进的性能水平。
3.1.3消融研究
- 预训练方式对比:对比使用预训练模型初始化和从头开始预训练两种方式,强调从头开始预训练虽性能持续提升,但总体远不如使用预训练模型初始化的方式。
- LiT 在不同数据集的作用:在 MUGE 数据集(中文原生数据)上,不使用 LiT 预训练效果与两阶段预训练接近;而在 Flickr30K - CN 和 COCO - CN(翻译自英文数据集)上,两阶段预训练(含 LiT)优势显著,说明 LiT 对不同来源的数据影响不同。
- 两阶段预训练的优势:两阶段预训练从第一阶段到第二阶段的切换能有效提升模型性能,突出了让模型适应中文多模态数据分布(特别是视觉信息部分)对提升模型性能的重要意义。
3.2零样本图像分类
3.2.1中文开放域图像分类基准
- ELEVATER 基准测试是该领域的新进展,其中 ICinW 赛道包含如 ImageNet、CIFAR、MNIST 等一系列常用的图像分类数据集,为评估模型在开放域图像分类任务中的性能提供了标准和数据基础。本文基于这些数据集对 Chinese CLIP 零样本图像分类能力进行评估。
3.2.2实验结果
- 基线模型介绍:使用英文数据预训练的基线模型(如 CLIP 和 ALIGN)和中文数据预训练的基线模型(BriVL 和悟空)。
- 与中文基线模型比较:突出 Chinese CLIP 在所有数据集上对中文基线模型的显著优势,表明其在中文相关图像分类任务中的良好性能。
- 与英文基础模型比较:指出在多种数据集以及一般概念或物体分类上,Chinese CLIP 优于英文基础模型 CLIP 和 ALIGN,体现其在通用图像分类任务上的能力。
- 专有名词分类问题:提出在涉及专有名词的分类任务中( 如FGVC - Aircraft 数据集),各模型普遍精度低,特别强调中文模型受翻译和音译影响大,需要构建一个 “针对中文模型的野外图像分类” 基准。
3.2.3实验分析
- 对人工设计提示的敏感性:指出 ELEVATER 基准测试提供的特定提示并非总是最佳,对于某些数据集,利用人类知识设计的特定提示能够显著提升性能。与 OpenAI CLIP 提示翻译的基线对比,不同数据集情况有别。飞机分类的例子,使用与飞机知识相关的特定提示(如 “标签,一张飞机的照片”,“标签,一张战斗机的特写图像” 等),说明特定领域知识设计的提示能提升模型准确率,反映出模型对人工设计提示的敏感性。
- 无法理解否定含义:通过在 KITTI - Distance 和 Patch - Camelyon 数据集实验,表明 CLIP 模型难以理解否定含义。在相关数据集测试中,改变含否定意义的标签导致模型准确率大幅下降,原因是预训练数据集中缺乏关于物体缺失的描述,体现模型在学习否定含义方面的局限性。
4.部署
4.1模型部署
- 基于 PyTorch 预训练的 Chinese CLIP 模型开发基于 ONNX 和 TensorRT 的模型用于部署,这些模型在推理效率上显著提升且性能损失极小,基于 TensorRT 的模型推理效率比 PyTorch 模型快 2 - 10 倍,为模型实际应用提供了有效方案。
- 利用 PyTorch 的 ONNX 模块、ONNXMLTOOLS 工具包将 PyTorch 版 Chinese CLIP 模型转为 FP16 精度的 ONNX 模型,借助 ONNXRUNTIME - GPU 实现 NVIDIA GPU 推理;TENSORRT 工具包将 ONNX 模型转为 TensorRT 模型并提供 GPU 推理环境,且 TensorRT 模型也是 FP16 精度。
4.2性能测试
- 使用含单个 NVIDIA T4 GPU 的服务器(16 Intel Xeon (Skylake) Platinum 8163 CPU cores with 64GB memory.),对 PyTorch 版及转换后的模型做基准测试,模拟在线部署设置批量大小为 1,以 FP16 精度推理 100 批次,计算平均时间。结果显示基于 ONNX 和 TensorRT 的模型推理速度在各模型规模均有优化,小模型规模更显著。
4.3指标评估
- 通过测量在 MUGE 检索数据集上的零样本性能,来评估基于 ONNX 和基于 TensorRT 的模型表征质量。零样本实验结果表明转换后的基于 ONNX 或基于 TensorRT 的模型能够很好地保持视觉和文本表征的质量,在检索性能上平均召回率(MR)下降不超过 0.1。
5. 总结
- 在这项研究中,我们提出了 Chinese CLIP,这是一个专为中文设计的视觉 - 语言基础模型。具体而言,我们构建了一个包含约 2 亿个样本的预训练数据集,并使用所提出的两阶段预训练方法对一系列 Chinese CLIP 模型进行预训练,这种方法提高了预训练的效率和效果。我们全面的评估表明,Chinese CLIP 在多个跨模态检索数据集上,无论是零样本学习还是微调设置下,都能达到最先进的性能。此外,我们证明了 Chinese CLIP 模型在 10 个数据集的零样本图像分类任务中,也能取得颇具竞争力的成绩。
6. 局限性及应对措施
6.1数据局限性及改进方向
- 数据局限性:(1)CLIP 预训练的核心在于对海量数据进行简单却有效的大规模对比预训练,Chinese CLIP 已经使用了约 2 亿个样本,但预训练数据规模仍相对较小。(2)难以确定什么样的数据集对于 CLIP 而言是 “高质量” 的,在以往研究中,预处理方法大多较为简单,以避免数据丢失。然而,仍有许多样本的图像和文本匹配不当,这可能会给预训练提供负面信息。
- 改进方向:(1)扩大预训练数据的数量,以评估随着数据规模扩大,模型性能的提升情况.(2)计划使用预训练的 Chinese CLIP 模型为更大数据集中的每一个图像 - 文本对计算得分,过滤掉得分低于指定阈值的样本,并使用新数据预训练新模型。这是探索数据质量与预训练效果之间关系的可能解决方案之一。而且,这种循环操作可能会在下游任务中带来持续的性能提升。
6.2模型局限性及改进方向
- 模型局限性:随着Chinese CLIP 模型规模的扩大,在不同的下游任务(包括检索和分类)中都能实现稳定的性能提升,与实际应用相关的模型规模的另一个问题是如何构建有效的小型模型。实验结果表明,最小的 Chinese CLIP 模型 CN - CLIPRN50 的性能比 ViT 变体差很多。然而,在实际应用中,可用于部署的有效小型模型通常更受欢迎。
- 改进方向:将继续探索在扩大数据规模的同时扩大模型规模,以构建更有效的 Chinese CLIP,同时探索针对 CLIP 的知识蒸馏方法,以便将大型模型的能力迁移到小型模型中应用。