☰
TIPSv1-So400m/14图像特征提取指南:cls_token、register_tokens与patch_tokens三分钟看懂
2026/10/22 1:35:41 网站建设 项目流程

【免费下载链接】tipsv1-so400m14

项目地址:https://ai.gitcode.com/hf_mirrors/google/tipsv1-so400m14
点击查看免费下载

TIPSv1-So400m/14 是谷歌开源的 TIPS 对比式视觉-语言模型中的 So400m 尺寸版本,一次encode_image调用即可输出三种图像特征:cls_token(整图嵌入)、register_tokens(第二个 CLS/寄存器 token)、patch_tokens(逐 patch 空间特征)。本文带你 3 分钟看懂三者的含义与用法,零样本分类、图像检索、空间可视化都能直接上手。

📌 TIPSv1-So400m/14 是什么?一分钟速览

TIPS(Text-Image Pre-training with Spatial awareness,ICLR 2025)是一组对齐图像与文本嵌入的对比学习模型,最大亮点是不仅输出"整图一个向量",还把逐 patch 的空间特征与文本对齐。So400m/14 的核心规格如下:

项目数值
视觉编码器ViT-So400m,27 层,patch 大小 14
文本编码器27 层 Transformer
嵌入维度1152
原生分辨率448×448(共 1024 个 patch)
参数量413M 视觉 + 448M 文本

更多变体(S/14、B/14、L/14、g/14)与详细信息见 README.md,模型超参数见 config.json。

🧩 一图看懂:encode_image 的三大输出

调用out = model.encode_image(pixel_values)会返回一个包含三个字段的TIPSv2ImageOutput(定义见 modeling_tips.py):

输出形状(batch=1)含义典型用途
cls_token(1, 1, 1152)整图全局嵌入,与文本塔对齐零样本分类、图文检索
register_tokens(1, 1, 1152)第二个 CLS token(寄存器 token),用合成描述训练研究、辅助信号
patch_tokens(1, 1024, 1152)每个 14×14 patch 的空间特征定位、分割、特征可视化

cls_token:图文对齐的主力

它用网页 alt-text(图片替代文本)训练,是与文本编码器对齐的那个向量——做相似度、检索、零样本分类时默认选它。

register_tokens:多出来的"第二个座位"

TIPS 的视觉编码器带有一个额外 CLS token(num_register_tokens: 1,见 config.json),它用合成描述(synthetic captions)训练,与文本塔的对应关系不同,多数场景不必用它,做研究或需要第二路全局信号时再考虑。

patch_tokens:TIPS 的差异化能力

448 ÷ 14 = 32,32×32 = 1024 个 patch,每个 patch 都有一个 1152 维向量。把它 reshape 成(32, 32, 1152)就得到一张二维空间特征图,可用来做 grounding、分割和特征可视化。

🚀 快速上手:三分钟跑通图像特征提取

一键安装依赖

pip install transformers torch torchvision sentencepiece scikit-learn requests

加载模型

from transformers import AutoModel model = AutoModel.from_pretrained("google/tipsv1-so400m14", trust_remote_code=True) model.eval()

编码图像 + 编码文本

import requests from PIL import Image from torchvision import transforms # 注意:只 ToTensor() 缩放到 [0, 1],不需要 ImageNet 归一化 image = Image.open("bus.jpg").convert("RGB") transform = transforms.Compose([transforms.Resize((448, 448)), transforms.ToTensor()]) out = model.encode_image(transform(image).unsqueeze(0)) print(out.cls_token.shape) # (1, 1, 1152) — 整图嵌入 print(out.patch_tokens.shape) # (1, 1024, 1152) — 逐 patch 空间特征 text_emb = model.encode_text(["a photo of a bus", "a photo of a cat"]) print(text_emb.shape) # (2, 1152)

🎯 两个最常用的实战配方

配方一:零样本图像分类(用 cls_token)

import torch.nn.functional as F classes = ["bus", "car", "dog", "cat"] cls = F.normalize(out.cls_token[:, 0, :], dim=-1) text_emb = F.normalize(model.encode_text(classes), dim=-1) similarity = cls @ text_emb.T print(classes[similarity.argmax()]) # 预测类别

配方二:空间特征可视化(用 patch_tokens + PCA)

import numpy as np from sklearn.decomposition import PCA feat = out.patch_tokens[0].detach().cpu().numpy() rgb = PCA(n_components=3, whiten=True).fit_transform(feat).reshape(32, 32, 3) rgb = 1 / (1 + np.exp(-2.0 * rgb)) # sigmoid 缩放到 [0, 1],对比度更好

把rgb保存成图片,就能看到特征图在图像上的空间分布——这正是 TIPS "spatial awareness" 的直观体现。

❓ 常见问题 FAQ

Q:做图文相似度该用哪个 token?A:用cls_token。它是与文本编码器对齐训练的那个;register_tokens用合成描述训练,语义对应关系不同,别混用。

Q:为什么算相似度前要用F.normalize?A:TIPS 输出的特征未做归一化,L2 归一化后点积才等价于余弦相似度。

Q:图像尺寸必须是 448 吗?A:原生分辨率是 448×448,但只要是 patch 大小 14 的整数倍即可,模型会自动对位置编码做插值(实现见 image_encoder.py)。

Q:文本分词器在哪里?A:仓库内的 tokenizer.model 是 SentencePiece 词表,输入统一转小写,最长 64 token,分词实现见 text_encoder.py。

📁 关键文件速查

文件作用
README.md用法示例与模型家族对照表
modeling_tips.pyencode_image/encode_text入口与输出结构
image_encoder.pySo400m ViT 定义(27 层、register=1)
config.json视觉/文本编码器超参数(嵌入维度、层数等)
configuration_tips.py配置解析,含num_register_tokens
tokenizer.modelSentencePiece 分词器词表

✅ 总结

  • cls_token= 整图嵌入,图文匹配、零样本分类的首选
  • register_tokens= 第二个 CLS,合成描述训练,偏研究方向
  • patch_tokens= 1024 个 patch 的空间特征,TIPS 的差异化能力(定位、分割、可视化)
  • 嵌入维度 1152,原生分辨率 448×448,patch 大小 14
  • 算相似度前先F.normalize,图像只需缩放到 [0, 1] 无需额外归一化

记住这三件套的角色分工,你就可以用 TIPSv1-So400m/14 开始提取图像特征了 🎉

【免费下载链接】tipsv1-so400m14

项目地址:https://ai.gitcode.com/hf_mirrors/google/tipsv1-so400m14
点击查看免费下载
上一篇:SQLFlow 连接 MySQL 实战指南:datasource 配置、Docker 部署与本地测试环境搭建
下一篇:Windows AirPods体验增强:如何让你的蓝牙耳机在PC上如虎添翼?

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询