【免费下载链接】tipsv1-so400m14
TIPSv1-So400m/14(TIPS,ICLR 2025 提出的对比式视觉语言模型)最大的亮点之一,就是它能输出带空间信息的图像特征:一张 448×448 的图片会被切成 1024 个 Patch,每个 Patch 得到一个 1152 维向量。这些高维向量肉眼当然看不见,但用PCA 降到 3 个主成分就能画出一张"语义地图",直观看出模型认为图片的哪些区域在表达什么。本文将带你从加载模型到跑通 PCA 可视化,手把手完成 TIPSv1-So400m/14 的 1024 个空间 Patch 特征可视化。
一、TIPSv1-So400m/14 是什么?
TIPS(Text-Image Pre-training with Spatial awareness)是 Google DeepMind 的视觉语言模型家族,So400m/14是其中的 v1 版本:
- 视觉编码器:ViT-So400m/14,27 层 Transformer,patch size 为 14,共约 413M 参数
- 文本编码器:27 层 Transformer,约 448M 参数
- 输入分辨率:原生 448×448,图像归一化到
[0, 1](不需要ImageNet 均值/方差) - 对齐方式:对比学习,图像全局向量与文本向量在同一 1152 维空间对齐
关键区别在于:普通 CLIP 类模型只给你一个"整图向量",而 TIPS 的 Patch 特征保留了位置信息,这正是空间特征可视化(zero-shot 分割、语义 Map)的基础。
模型配置可以在 config.json 中查看,例如vision_config中的image_size: 448、patch_size: 14(config.json);视觉骨干的实现见 image_encoder.py 中的vit_so400m工厂函数。
二、1024 个 Patch 特征是怎么来的?
这是理解可视化的前提,算一笔简单的账:
448 ÷ 14 = 32(每行/每列的 Patch 数) 32 × 32 = 1024 个 Patch调用model.encode_image(pixel_values)后,会返回一个TIPSv2ImageOutput对象,包含三类输出:
| 输出字段 | 形状 | 含义 |
|---|---|---|
cls_token | (B, 1, 1152) | 全局图像向量,与文本塔对齐,用于零样本分类 |
register_tokens | (B, 1, 1152) | 第二个 CLS token(在合成 caption 上训练) |
patch_tokens | (B, 1024, 1152) | 每个 Patch 的空间特征,本文的主角 |
其中patch_tokens的定义与提取逻辑分别在 modeling_tips.py 和 modeling_tips.py 中:
💡 官方说明:做零样本分类要用第一个
cls_token(在 web alt-text 上训练);做空间可视化则用patch_tokens。详见 README.md 的 "Visualize spatial features" 一节。
三、PCA 可视化完整步骤(可运行代码)
1. 安装依赖
pip install transformers torch torchvision sentencepiece scikit-learn requests2. 加载模型
from transformers import AutoModel model = AutoModel.from_pretrained("google/tipsv1-so400m14", trust_remote_code=True) model.eval()3. 准备图片并编码
图片只需ToTensor()归一化到[0, 1],不要做 ImageNet 归一化:
import requests from PIL import Image from torchvision import transforms url = "https://huggingface.co/spaces/google/TIPSv2/resolve/main/examples/zeroseg/pascal_context_00049_image.png" image = Image.open(requests.get(url, stream=True).raw).convert("RGB") transform = transforms.Compose([ transforms.Resize((448, 448)), transforms.ToTensor() ]) pixel_values = transform(image).unsqueeze(0) out = model.encode_image(pixel_values) print(out.patch_tokens.shape) # (1, 1024, 1152)4. PCA 降到 3 通道并映射成彩色图
核心只有两行:先fit_transform到 3 个主成分,再 reshape 回 32×32 的空间网格,最后用 sigmoid 把数值压到[0, 1]提升对比度:
import numpy as np from sklearn.decomposition import PCA feat = out.patch_tokens[0].detach().cpu().numpy() # (1024, 1152) rgb = PCA(n_components=3, whiten=True).fit_transform(feat) # (1024, 3) rgb = rgb.reshape(32, 32, 3) rgb = 1 / (1 + np.exp(-2.0 * rgb)) # sigmoid 映射到 [0, 1],对比度更好5. 显示并保存
32×32 直接看会有点"马赛克",用最近邻放大到 448 即可对齐原图网格:
import matplotlib.pyplot as plt rgb_big = np.kron(rgb, np.ones((14, 14, 1))) # 每个 Patch 放大 14×14 像素 fig, axes = plt.subplots(1, 2, figsize=(10, 5)) axes[0].imshow(image) axes[0].set_title("Original") axes[1].imshow(rgb_big) axes[1].set_title("PCA visualization of 1024 spatial patches") for ax in axes: ax.axis("off") plt.tight_layout() plt.savefig("tipsv1_pca_map.png", dpi=150) plt.show()四、效果解读与调参技巧
- 颜色 = 语义:同一颜色区域的 Patch 在特征空间中距离更近,通常对应同一语义区域(如"道路"、"天空"、"车辆"),所以这张图也常被当作 zero-shot 语义分割的起点。
whiten=True很重要:白化让三个主成分方差归一,否则某个方向会主导整张图的颜色。- sigmoid 系数可调:
-2.0 * rgb中的系数控制对比度,想更"锐利"可加大到 3~4。 - 不同分辨率:输入只要是 14 的整数倍即可,模型会自动对位置编码做双线性插值(见 image_encoder.py 的
interpolate_pos_encoding),此时reshape的网格尺寸要相应改成H/14, W/14。 - 保存为分割 Mask:如果只想得到类别 Mask,可对 Patch 特征与多个文本查询(如
F.normalize(model.encode_text(classes)))做相似度取 argmax,思路与 README 的零样本分类一致。
五、常见问题 FAQ
Q1:为什么一定是 1024 个 Patch?因为 448÷14=32,网格是 32×32。若换分辨率(如 336×336),Patch 数就是 24×24=576。
Q2:cls_token和register_tokens该用哪个?与文本塔对齐、做零样本分类用第一个cls_token;register_tokens由合成 caption 训练,主要用于内部计算,可视化空间特征时两者都不参与。
Q3:没有 GPU 能跑吗?So400m 约 413M 视觉参数,单张 448×448 图片在 CPU 上也能完成一次前向,只是耗时较长,建议使用torch.no_grad()(encode_image内部已带)。
六、相关文件资料
| 文件 | 说明 |
|---|---|
| README.md | 模型介绍、用法示例与 PCA 可视化官方代码 |
| config.json | 视觉/文本双塔结构配置(1152 维、27 层、patch 14) |
| modeling_tips.py | TIPSv2Model封装,encode_image/encode_text入口 |
| image_encoder.py | ViT-So400m/14 视觉编码器实现 |
| text_encoder.py | 27 层文本 Transformer 与 SentencePiece 分词 |
| configuration_tips.py | TIPSv2Config配置类定义 |
| model.safetensors | 预训练权重文件 |
| tokenizer.model | SentencePiece 词表 |
跑通这一遍后,你就把 TIPSv1-So400m/14 最独特的"空间感知"能力看明白了——1024 个 Patch 特征经 PCA 三通道映射,就能把不可见的高维语义变成一张肉眼可读的彩色地图 🎨。
【免费下载链接】tipsv1-so400m14
相关推荐
看见图像的"空间灵魂":tipsv1-g14-lowres 逐 patch 空间特征 PCA 可视化技巧
看见图像的"空间灵魂":tipsv1 g14 lowres 逐 patch 空间特征 PCA 可视化技巧 TIPS(Text Image Pre trainin
看见图像在思考什么:tipsv1-l14空间特征PCA可视化完全教程(附32×32特征图代码)
看见图像在思考什么:tipsv1 l14空间特征PCA可视化完全教程(附32×32特征图代码) tipsv1 l14 是 Google 开源的 TIPS(Tex
3行代码实现视觉模型特征可视化:timm库特征空间降维全指南
3行代码实现视觉模型特征可视化:timm库特征空间降维全指南 你是否曾困惑于深度神经网络如何"看待"图像?训练好的模型输出分类结果时,内部特征空间究竟呈现怎样的
人工智能计算机视觉深度学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考