【免费下载链接】tiny_vit_21m_224.in1k
tiny_vit_21m_224.in1k 是 timm 库中参数量仅 21.2M 的 TinyViT 图像分类预训练模型,其 config.json 文件完整记录了输入尺寸、归一化均值/方差、分类头结构等关键预训练配置参数。读懂这份配置,你就能正确加载模型、做数据增强、甚至微调自己的数据集。本文带你逐项解析每一个字段。
一、先认识仓库里的 4 个文件
这个模型仓库非常精简,只有 4 个文件,各自分工明确:
| 文件 | 作用 |
|---|---|
| config.json | 本文主角:模型结构与预训练数据配置 |
| model.safetensors | 权重文件(safetensors 格式,加载更安全、更快) |
| pytorch_model.bin | 同一份权重的 PyTorch 二进制格式 |
| README.md | 模型卡片:参数规模、GMACs、使用示例与引用 |
💡 从 README.md 可知,该模型由 TinyViT 论文作者预训练于 ImageNet-1k,Params 21.2M / GMACs 4.1,输入分辨率 224×224,属于"小而快"的视觉 Transformer。
二、顶层 3 个参数:模型身份的"三要素"
打开 config.json,顶层只有 3 个字段:
architecture=tiny_vit_21m_224:模型架构名,即 timm 中的tiny_vit_21m_224结构,224表示设计输入分辨率。num_classes=1000:分类头输出类别数,对应 ImageNet-1k 的 1000 个类别。num_features=576:骨干网络(backbone)输出的特征维度。README.md 中"Feature Map Extraction"示例的最终特征图正是torch.Size([1, 576, 7, 7]),与此参数完全对应——做特征提取或图像 Embedding 时,输出的向量维度就是 576。
三、pretrained_cfg:预训练配置逐项解析
真正有价值的是 config.json 里的pretrained_cfg块,它记录了"这个预训练权重是在什么数据条件下得到的"。
1️⃣ 输入尺寸相关:input_size与fixed_input_size
"input_size": [3, 224, 224], "fixed_input_size": falseinput_size是[通道数, 高, 宽],即 3 通道、224×224 的 RGB 图像。fixed_input_size: false说明模型不强制固定输入尺寸——Transformer 结构天然支持变分辨率推理(如 256、384),只是预训练分布集中在 224。
2️⃣ 上采样插值方式:interpolation
"interpolation": "bicubic"指加载多尺度预训练权重时,对卷积层(如 patch 嵌入)权重采用双三次插值方式缩放,比最近邻插值更平滑,能减轻尺寸变化带来的精度损失。
3️⃣ 数据增强策略:crop_pct与crop_mode
"crop_pct": 0.95, "crop_mode": "center"crop_pct: 0.95:预训练数据增强的随机裁剪比例(RandomResizedCrop 的 scale 下限),即裁剪区域至少占图像的 95%。crop_mode: center:推理/评估时使用中心裁剪,而非全图缩放。
⚠️ 如果你想复现预训练精度,验证数据管道应保持同样的中心裁剪 + 95% 比例。
4️⃣ 归一化参数:mean与std(重点⭐)
"mean": [0.485, 0.456, 0.406], "std": [0.229, 0.224, 0.225]这是ImageNet 标准的 RGB 均值与标准差,推理前必须对像素值(0~1 范围)做(x - mean) / std归一化,否则模型输出会严重失真。timm 会通过data_config自动完成这一步,手动写预处理时可直接抄这组数值。
5️⃣ 全局池化尺寸:pool_size
"pool_size": [7, 7]分类前的自适应全局池化目标尺寸。它和输入尺寸是联动的:224÷16(patch size)= 14,经过 4 阶段逐级下采样后,阶段 4 分辨率再减半得到 7×7 的 token 网格,与 README.md 中576, 7, 7的特征图一致。输入尺寸变化时,该值需相应调整。
6️⃣ 权重加载定位:first_conv与classifier
"first_conv": "patch_embed.conv1.conv", "classifier": "head.fc"first_conv指向 TinyViT 的 patch 嵌入卷积(注意 TinyViT 用卷积而非线性层做 patch 嵌入,且带两层卷积结构)。classifier指最终全连接分类头head.fc。
这两个字段的用途:当你更换输入尺寸做插值缩放时,timm 只对first_conv做形变插值;当你微调到新数据集(比如 10 类缺陷检测)时,只需重新初始化classifier一层,其余预训练权重原样保留。
四、参数之间的内在关联(一张图看懂)
| 参数 | 值 | 影响 |
|---|---|---|
input_size | [3, 224, 224] | 决定pool_size与 token 数量 |
pool_size | [7, 7] | 池化到 7×7=49 个 token 后送入分类头 |
num_features | 576 | 阶段 4 特征通道数,也是 Embedding 维度 |
num_classes | 1000 | 微调时通常要改成目标类别数 |
mean/std | ImageNet 标准值 | 预处理必需,不可省略 |
五、如何在 timm 中实际使用这份配置
绝大多数场景不需要手动读 config.json,timm 加载模型时会自动解析。获取模型推荐的数据预处理配置只需一行:
import timm model = timm.create_model('tiny_vit_21m_224.in1k', pretrained=True) data_config = timm.data.resolve_model_data_config(model) # data_config 中即包含 input_size、mean、std、crop_pct、interpolation 等字段num_classes=0可去掉分类头只取 576 维 Embedding(见 README.md 的 Image Embeddings 示例)。
六、新手常见问题 FAQ
Q1:微调到新数据集,config.json 要改什么?只需改num_classes(顶层与pretrained_cfg内两处)为任务类别数,其余保持不动。
Q2:输入 256×256 会报错吗?不会。fixed_input_size为 false,允许变分辨率输入;timm 会自动用bicubic插值调整卷积权重,精度与 224 相比通常变化很小。
Q3:权重文件选哪个?推荐 model.safetensors(加载快、无代码执行风险);旧版库或不兼容时再选 pytorch_model.bin。
七、小结
config.json 看似简短,实则把 TinyViT 预训练的"输入尺寸 → 归一化 → 池化 → 分类头"整条链路讲清楚了。记住三组核心数值:224×224 输入、ImageNet 均值方差、576 维特征,再配合 timm 的data_config自动解析,你就已经掌握了 tiny_vit_21m_224.in1k 的完整使用方式。
【免费下载链接】tiny_vit_21m_224.in1k
相关推荐
读懂config.json:tiny_vit_11m_224.in1k预训练配置参数逐项详解
读懂config.json:tiny_vit_11m_224.in1k预训练配置参数逐项详解 刚拿到 tiny_vit_11m_224.in1k 这个模型仓库时
Pendulum 时间加减完全指南:add() 与 subtract() 方法深度解析
Pendulum 时间加减完全指南:add 与 subtract 方法深度解析 本文是 Pendulum(Python datetimes made easy)
配置项逐个精讲:如何读懂tf_efficientnetv2_b3.in21k_ft_in1k的config.json预训练配置
配置项逐个精讲:如何读懂tf_efficientnetv2_b3.in21k_ft_in1k的config.json预训练配置 tf_efficientnetv
人工智能计算机视觉
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考