【免费下载链接】tiny_vit_21m_224.dist_in22k
想用tiny_vit_21m_224.dist_in22k为图像生成576 维嵌入向量?这篇图像嵌入生成指南带你从零上手:它基于轻量级视觉 Transformer(TinyViT),在 ImageNet-22k 上经蒸馏预训练,既能做图像分类,也能输出固定 576 维的向量用于图像相似检索,小模型跑出大效果。🎯
模型简介:为什么选 TinyViT?
tiny_vit_21m_224.dist_in22k是一个只有33.2M 参数的小型 ViT 模型,计算量仅4.1 GMACs,输入尺寸为 224×224。"dist_in22k" 表示它由论文作者用知识蒸馏(distillation)在 ImageNet-22k 数据集上预训练,分类头覆盖21841 个类别。
相比动辄上亿参数的大模型,它的优势在于:
| 特点 | 说明 |
|---|---|
| 💪 轻量高效 | 33.2M 参数,CPU 也能跑推理 |
| 🔢 固定向量维度 | 每张图片输出 576 维嵌入,方便建索引 |
| 📚 大规模预训练 | ImageNet-22k + 蒸馏,特征质量高 |
| 🎯 双用途 | 既能分类,又能做相似度检索的特征骨干 |
模型的核心信息可以在 README.md 中查看,包含完整的模型细节与使用示例。
快速上手:三步生成 576 维向量
第一步:安装依赖
只需要三个 Python 库,安装即可开始:
pip install timm torch torchvision第二步:准备模型文件
仓库中的 model.safetensors 和 pytorch_model.bin 是模型权重文件(safetensors 与 PyTorch 两种格式),config.json 则记录了架构、类别数、归一化均值方差等关键配置。若需获取完整仓库,可执行:
git clone https://gitcode.com/hf_mirrors/timm/tiny_vit_21m_224.dist_in22k第三步:生成图像嵌入
使用timm加载模型时,把num_classes=0去掉分类头,模型输出就直接是一张图片对应的576 维向量:
from PIL import Image import timm import torch model = timm.create_model( 'tiny_vit_21m_224.dist_in22k', pretrained=True, num_classes=0, # 去掉分类头,只保留特征向量 ) model.eval() data_config = timm.data.resolve_model_data_config(model) transforms = timm.data.create_transform(**data_config, is_training=False) img = Image.open('my_photo.jpg') with torch.no_grad(): embedding = model(transforms(img).unsqueeze(0)) # 形状: (1, 576)💡 不想改
num_classes时,也可以调用model.forward_features(...)得到未池化的(1, 576, 7, 7)特征图,再用model.forward_head(..., pre_logits=True)池化成 576 维向量,两种写法等价。
两大核心应用场景
场景一:图像分类
保留默认的 21841 类分类头,对输出做 softmax 即可得到每张图的 Top-K 类别概率。适合做本地图片打标、相册整理、内容审核等轻量分类任务。
场景二:图像相似检索
这是 576 维向量最擅长的场景:
- 建库:对图片库逐张生成 576 维向量,存入向量数据库(如 FAISS、Milvus);
- 查询:对新图片生成向量,计算余弦相似度(cosine similarity);
- 排序:返回最相似的 Top-N 结果,实现以图搜图。🔍
向量维度固定为 576,索引规模可控、检索速度快,非常适合中小规模的以图搜图系统。
关键配置参数解读
打开 config.json,这些字段决定了模型的输入输出行为:
| 参数 | 值 | 含义 |
|---|---|---|
architecture | tiny_vit_21m_224 | 模型架构,224 表示输入分辨率 |
num_classes | 21841 | ImageNet-22k 类别数 |
num_features | 576 | 输出嵌入向量的维度 |
input_size | [3, 224, 224] | 输入为 3 通道 224×224 图像 |
mean/std | [0.485, 0.456, 0.406]/[0.229, 0.224, 0.225] | ImageNet 归一化参数 |
crop_pct | 0.95 | 评估时的中心裁剪比例 |
如果只需要中间特征图(例如做目标检测、分割等下游任务),可以用features_only=True加载模型,它会依次输出四级特征图:
torch.Size([1, 96, 56, 56]) torch.Size([1, 192, 28, 28]) torch.Size([1, 384, 14, 14]) torch.Size([1, 576, 7, 7]) # 最深一层,对应 576 维特征常见问题 FAQ
问:为什么我的向量不是 576 维?检查是否误设了num_classes。去掉分类头(num_classes=0)或改用forward_features+forward_head,输出即为 576 维。
问:输入图片大小必须是 224×224 吗?建议保持 224×224。transforms已内置 resize 与归一化逻辑,交给timm.data.create_transform处理即可。
问:CPU 能跑吗?可以。33.2M 参数 + 4.1 GMACs 的计算量非常小,CPU 单图推理通常在毫秒到数百毫秒级别。
问:向量如何比较相似度?推荐先对向量做 L2 归一化,再用余弦相似度排序,这样数值比较稳定且无需额外缩放。
小结
tiny_vit_21m_224.dist_in22k 是一个开箱即用的图像特征方案:三步即可生成 576 维向量,既能分类又能以图搜图。更多用法示例(分类、特征图提取、嵌入生成)详见 README.md,欢迎动手实践!🚀
【免费下载链接】tiny_vit_21m_224.dist_in22k
相关推荐
如何用tf_efficientnet_b1.aa_in1k提取图像嵌入:1280维特征向量与相似性检索实战
如何用tf_efficientnet_b1.aa_in1k提取图像嵌入:1280维特征向量与相似性检索实战 tf_efficientnet_b1.aa_in1k
如何用pit_s_224.in1k提取576维图像Embedding:相似度搜索与聚类实战教程
如何用pit_s_224.in1k提取576维图像Embedding:相似度搜索与聚类实战教程 pit_s_224.in1k 是 timm 库中基于 Image
用 maxvit_base_tf_384.in21k_ft_in1k 生成 768 维图像 Embedding:相似图像检索实战教程
用 maxvit_base_tf_384.in21k_ft_in1k 生成 768 维图像 Embedding:相似图像检索实战教程 想从数千张照片中秒找出"和
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考