三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

timm库快速上手ViT-L-16-SigLIP-256:图像特征提取完整指南

timm库快速上手ViT-L-16-SigLIP-256:图像特征提取完整指南

timm库快速上手ViT-L-16-SigLIP-256:图像特征提取完整指南

【免费下载链接】ViT-L-16-SigLIP-256项目地址: https://ai.gitcode.com/hf_mirrors/timm/ViT-L-16-SigLIP-256

ViT-L-16-SigLIP-256是一款基于Sigmoid损失函数的语言-图像预训练模型,适用于零样本图像分类和图像特征提取任务。本指南将帮助你快速掌握如何使用timm库加载和运行该模型,轻松实现高效的图像特征提取。

模型简介:什么是ViT-L-16-SigLIP-256?

ViT-L-16-SigLIP-256是基于Vision Transformer(ViT)架构的模型,采用16x16的图像补丁大小,输入图像尺寸为256x256像素。它通过Sigmoid损失函数进行语言-图像预训练(SigLIP),在WebLI数据集上训练而成,能够同时支持OpenCLIP(图像+文本)和timm(仅图像)两种使用方式。

核心特性

  • 架构类型:对比式图像-文本模型,支持零样本图像分类
  • 输入尺寸:256x256像素(定义于open_clip_config.json)
  • 权重来源:从Google Big Vision项目的JAX checkpoint转换而来
  • 许可证:Apache-2.0

准备工作:环境搭建与模型获取

安装必要依赖

使用pip安装timm和OpenCLIP库(需确保timm版本≥0.9.8,open-clip-torch版本≥2.23.0):

pip install timm open-clip-torch

获取模型文件

通过Git克隆仓库到本地:

git clone https://gitcode.com/hf_mirrors/timm/ViT-L-16-SigLIP-256

仓库包含模型权重文件(open_clip_model.safetensors、open_clip_pytorch_model.bin)和配置文件(configuration.json、open_clip_config.json)。

快速上手:使用timm提取图像特征

步骤1:加载模型

通过timm的create_model函数加载预训练模型,设置num_classes=0以获取特征提取模式:

import timm model = timm.create_model( 'vit_large_patch16_siglip_256', pretrained=True, num_classes=0, # 禁用分类头,启用特征提取 ) model = model.eval() # 设置为评估模式

步骤2:获取图像预处理工具

使用timm的数据配置自动生成模型所需的图像预处理管道(包含归一化和尺寸调整):

# 获取模型特定的数据配置 data_config = timm.data.resolve_model_data_config(model) # 创建预处理变换 transforms = timm.data.create_transform(**data_config, is_training=False)

步骤3:处理图像并提取特征

加载图像并应用预处理,然后通过模型前向传播获取特征向量:

from PIL import Image from urllib.request import urlopen # 加载示例图像(可替换为本地图像路径) image = Image.open(urlopen( 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png' )) # 预处理图像并添加批次维度 input_tensor = transforms(image).unsqueeze(0) # 提取特征(输出形状为 [batch_size, num_features]) with torch.no_grad(): # 禁用梯度计算以提高效率 features = model(input_tensor)

进阶应用:零样本图像分类

ViT-L-16-SigLIP-256在OpenCLIP框架下支持零样本图像分类,无需额外训练即可识别新类别:

import torch import torch.nn.functional as F from open_clip import create_model_from_pretrained, get_tokenizer # 加载模型和分词器 model, preprocess = create_model_from_pretrained('hf-hub:timm/ViT-L-16-SigLIP-256') tokenizer = get_tokenizer('hf-hub:timm/ViT-L-16-SigLIP-256') # 预处理图像 image = preprocess(image).unsqueeze(0) # 定义类别标签 labels = ["a dog", "a cat", "a donut", "a beignet"] text = tokenizer(labels, context_length=model.context_length) # 计算特征并归一化 with torch.no_grad(), torch.cuda.amp.autocast(): image_features = model.encode_image(image) text_features = model.encode_text(text) image_features = F.normalize(image_features, dim=-1) text_features = F.normalize(text_features, dim=-1) # 计算类别概率 text_probs = torch.sigmoid(image_features @ text_features.T * model.logit_scale.exp() + model.logit_bias) print("分类结果:", list(zip(labels, text_probs[0].tolist())))

常见问题与解决方案

Q:如何调整输入图像尺寸?

A:模型默认输入尺寸为256x256像素,定义于open_clip_config.json的image_size参数。如需处理其他尺寸图像,可在预处理阶段使用transforms.Resize手动调整。

Q:特征向量的维度是多少?

A:ViT-L-16-SigLIP-256输出的特征向量维度为768,可通过model.num_features查看具体数值。

Q:如何在GPU上加速推理?

A:将模型和输入张量移至GPU设备:

model = model.to('cuda') input_tensor = input_tensor.to('cuda')

引用与致谢

如果使用本模型,请引用以下论文:

@article{zhai2023sigmoid, title={Sigmoid loss for language image pre-training}, author={Zhai, Xiaohua and Mustafa, Basil and Kolesnikov, Alexander and Beyer, Lucas}, journal={arXiv preprint arXiv:2303.15343}, year={2023} }

模型权重转换自Google的Big Vision项目,更多细节可参考官方文档。

通过本指南,你已掌握使用timm库快速上手ViT-L-16-SigLIP-256进行图像特征提取的核心流程。无论是构建图像检索系统、训练下游分类模型,还是实现零样本识别,这款模型都能为你的计算机视觉项目提供强大支持!

【免费下载链接】ViT-L-16-SigLIP-256项目地址: https://ai.gitcode.com/hf_mirrors/timm/ViT-L-16-SigLIP-256

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表