我的编程空间,编程开发者的网络收藏夹
学习永远不晚

LLM2CLIP:使用大语言模型提升CLIP的文本处理,提高长文本理解和跨语言能力

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

LLM2CLIP:使用大语言模型提升CLIP的文本处理,提高长文本理解和跨语言能力

大型语言模型(LLM),如 GPT-4 和 LLaMA,则展示了卓越的语言理解和生成能力。这种强大的语言能力能否与 CLIP 结合,解决其文本编码器的短板?微软团队提出的 LLM2CLIP 框架便是这一创新的成果。

该论文提出了一种创新的方法,通过将 LLM 强大的语言知识与 CLIP 的视觉能力相结合,显著提升多模态任务的性能。通过整合 LLM 和 CLIP,LLM2CLIP 解决了传统 CLIP 在文本理解、语言支持和任务泛化方面的瓶颈。

方法创新

字幕对比微调(Caption Contrastive Fine-tuning)

  • 核心问题:LLM 的原生文本特征缺乏区分性,难以直接用于多模态任务。
  • 创新点:通过监督对比损失函数,将同一图像的字幕作为正样本,将其他字幕作为负样本,从而显著增强 LLM 的文本编码能力。

冻结 LLM 梯度

  • 目的:保留 LLM 的开放世界知识,降低计算成本。
  • 方法:仅微调适配器和投影层,实现多模态对齐。

高效训练策略

  • 使用 LoRA 技术进行轻量级训练,在计算资源有限的情况下优化模型性能。
  • 预提取文本特征,减少推理阶段的计算负担。

开放世界知识的利用

  • LLM 的广泛训练语料使其能够处理复杂字幕,甚至支持多语言任务。

LLM2CLIP 的关键特性

  1. 增强文本理解:LLM2CLIP 能够处理超过 CLIP 原生限制的长文本和复杂描述。
  2. 跨语言支持:通过 LLM 的知识迁移,即使仅使用英语数据训练,仍可在中文等多语言任务中实现卓越表现。
  3. 高效计算:通过冻结梯度和轻量级适配器优化计算开销。

详细改进描述

处理长字幕和复杂文本: LLM 的更大的上下文窗口和更强的语言理解能力使得 LLM2CLIP 能够有效地处理长字幕和复杂文本,而无需像之前的工作那样进行文本截断或分段。

融入开放世界知识: LLM 在大规模文本语料库上进行预训练,因此拥有丰富的开放世界知识。LLM2CLIP 将这些知识融入到 CLIP 的视觉表示中,从而提高了其在各种下游任务中的性能。

跨语言能力: LLM2CLIP 的跨语言能力使其成为构建多语言多模态系统的强大工具,无需为每种语言单独训练模型。

高效训练: 通过冻结 LLM 的权重和预先提取文本特征,LLM2CLIP 的训练成本与微调原始 CLIP 模型相当。

实验结果

结果展示

LLM2CLIP 在多个基准测试中表现优异,在短文本、长文本以及跨语言任务中的性能显著提升,尤其在中文任务中,其表现甚至超越了专用中文数据集训练的模型。

  • 图像-文本检索 (I2T 和 T2I): 在 Flickr30k、COCO、ShareGPT4V、Urban-1k 和 DOCCI 等数据集上进行评估。
  • 跨语言图像-文本检索:  在 Flickr30K-CN 和 COCO-CN 数据集上进行评估。
  • 视觉问答 (VQA): 使用 LLaVA 1.5 框架进行评估。
  • 字幕检索准确率 (CRA):  用于评估文本模型区分字幕的能力。

如何开始使用 LLM2CLIP

以下是快速上手 LLM2CLIP 的完整代码教程:

1. 安装依赖环境

pip install llm2vec
 git clone https://github.com/microsoft/LLM2CLIP.git && cd LLM2CLIP
 pip install -r requirements.txt

2. 配置 Jupyter Notebook

如果需要交互式环境:

conda install -c conda-forge --override-channels notebook
 conda install -c conda-forge --override-channels ipywidgets -y jupyter notebook

3. 导入必要库

from PIL import Image
 from transformers import AutoModel, AutoConfig, AutoTokenizer
 from transformers import CLIPImageProcessor
 import torch
 from llm2vec import LLM2Vec

4. 加载模型

# 图像处理器
 processor = CLIPImageProcessor.from_pretrained("openai/clip-vit-large-patch14-336")
 
 # 加载 CLIP 模型
 model_name_or_path = "microsoft/LLM2CLIP-Openai-L-14-336"
 model = AutoModel.from_pretrained(
     model_name_or_path,
     torch_dtype=torch.float16,
     trust_remote_code=True
 ).to('cuda').eval()
 
 # 加载微调后的 LLM 模型
 llm_model_name = 'microsoft/LLM2CLIP-Llama-3-8B-Instruct-CC-Finetuned'
 config = AutoConfig.from_pretrained(llm_model_name, trust_remote_code=True)
 llm_model = AutoModel.from_pretrained(llm_model_name, config=config, trust_remote_code=True)
 tokenizer = AutoTokenizer.from_pretrained(llm_model_name)
 
 # 初始化 LLM2Vec
 l2v = LLM2Vec(llm_model, tokenizer, pooling_mode="mean", max_length=512, doc_max_length=512)

5. 图像和字幕预处理

captions = ["a diagram", "a dog", "horses"]
 image_path = "path_to_image/horses.png"
 
 image = Image.open(image_path)
 input_pixels = processor(images=image, return_tensors="pt").pixel_values.to('cuda')

6. 提取特征并匹配字幕

with torch.no_grad(), torch.cuda.amp.autocast():
     image_features = model.get_image_features(input_pixels)
     text_features = l2v.encode(captions, convert_to_tensor=True).to('cuda')
     text_features = model.get_text_features(text_features)
 
     # 归一化特征
     image_features /= image_features.norm(dim=-1, keepdim=True)
     text_features /= text_features.norm(dim=-1, keepdim=True)
 
     # 计算匹配概率
     text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
 
 print("匹配结果:", text_probs)

输入图像为上面的马照片时,输出为:

匹配结果: tensor([[3.425e-08, 1.0911e-06, 1.000e+00]], device='cuda:0')

这表明模型预测图像对应的字幕为“horses”,匹配概率为 100%。

再试一张更复杂的图片:

captions = ["a sunset over a mountain range", "a group of people hiking on a trail", "a peaceful lake surrounded by trees"]
 image_path = "hiking_trail.jpg"
 
 image = Image.open(image_path)
 input_pixels = processor(images=image, return_tensors="pt").pixel_values.to('cuda')
 
 with torch.no_grad(), torch.cuda.amp.autocast():
    image_features = model.get_image_features(input_pixels)
    text_features = l2v.encode(captions, convert_to_tensor=True).to('cuda')
    text_features = model.get_text_features(text_features)
 
    image_features /= image_features.norm(dim=-1, keepdim=True)
    text_features /= text_features.norm(dim=-1, keepdim=True)
 
    text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
 
 print("Label probs:", text_probs)

输出为:

匹配结果:: tensor([[1.122e-06, 9.998e-01, 1.243e-04]], device='cuda:0')

模型可以匹配出更准确的文字。

总结

LLM2CLIP 为多模态学习提供了一种新的范式,通过整合 LLM 的强大功能来增强 CLIP 模型。其在图像-文本检索、跨语言应用和长文本理解方面的出色性能,突显了其作为构建更强大、更通用的多模态系统的潜力。未来的研究可以进一步探索 LLM2CLIP 在更广泛的应用场景中的潜力,例如视频理解、多模态对话和具身智能。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

LLM2CLIP:使用大语言模型提升CLIP的文本处理,提高长文本理解和跨语言能力

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

LLM2CLIP:使用大语言模型提升CLIP的文本处理,提高长文本理解和跨语言能力

在人工智能迅速发展的今天,多模态系统正成为推动视觉语言任务前沿发展的关键。CLIP(对比语言-图像预训练)作为其中的典范,通过将文本和视觉表示对齐到共享的特征空间,为图像-文本检索、分类和分割等任务带来了革命性突破。

MiniGPT-4:使用先进的大型语言模型提升 AI 视觉语言理解能力

当时我们做了一个大型语言模型之间的对话系统。我们用这样的一个对话系统去生成一张图片更详细的描述。当时是市面上第一家做大型语言模型对话的工作。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录