☰
逐字段解析convformer_s18.sail_in22k_ft_in1k_384的config.json:first_conv、pool_size背后的隐藏机密
2026/10/17 18:20:35 网站建设 项目流程

【免费下载链接】convformer_s18.sail_in22k_ft_in1k_384

项目地址:https://ai.gitcode.com/hf_mirrors/timm/convformer_s18.sail_in22k_ft_in1k_384
点击查看免费下载

convformer_s18.sail_in22k_ft_in1k_384 是 timm 中的ConvFormer 图像分类模型:26.8M 参数,ImageNet-22k 预训练 + ImageNet-1k 微调,输入 384×384。它的 config.json 只有 30 多行,却藏着 timm 加载预训练权重的全部"说明书"——first_conv告诉框架"从哪一层开始对权重",pool_size告诉你特征图池化后的真实尺寸。下面逐字段拆开看,帮你在 10 分钟内彻底读懂这份配置文件。

一、先认识这个模型 🧐

这个模型属于MetaFormer家族(论文Metaformer baselines for vision),是介于纯卷积和纯 Transformer 之间的结构。在动手读配置前,先记住几个关键数字,它们会在后文反复出现:

项目数值
参数量26.8M
计算量 GMACs11.6
输入尺寸384 × 384
分类类别数1000(ImageNet-1k)
特征通道数512

仓库共 4 个文件:config.json(本次主角)、README.md(模型卡片与用法示例)、model.safetensors 与 pytorch_model.bin(两套格式的权重,内容相同,约 102 MB)。

小贴士:本仓库中这两个权重文件目前是 Git LFS 指针(.gitattributes 里配置了 LFS 规则),真实权重需要 LFS 拉取后才能使用。

二、顶层 4 个字段:模型的"身份证"

{ "architecture": "convformer_s18", "num_classes": 1000, "num_features": 512, "pretrained_cfg": { ... } }
  • architecture: "convformer_s18"—— 架构名。s18表示 18 个 Transformer 风格 stage,是 ConvFormer 的轻量档位。timm 用它反查模型结构定义并实例化网络。
  • num_classes: 1000—— 分类头输出 ImageNet-1k 的 1000 类。如果你做二分类,加载权重时 timm 会自动丢弃/重初始化分类头,不会报错。
  • num_features: 512—— 池化后的特征向量维度。它不是拍脑袋定的,而是由最后一层特征图512 通道 × 12 × 12全局平均池化后 flatten 得到——这正是后文pool_size要揭示的机密。
  • pretrained_cfg—— 预训练配置子对象,timm 加载权重的"暗号手册",下面重点拆解。

三、pretrained_cfg 逐字段详解 🔍

3.1 身份与来源

"tag": "sail_in22k_ft_in1k_384", "custom_load": false
  • tag:权重来源标签,可拆读为sail(原始作者 sail-sg)+in22k(ImageNet-22k 预训练)+ft_in1k(ImageNet-1k 微调)+384(训练分辨率)。
  • custom_load: false:表示使用 timm 标准加载流程。若为true,说明该权重需要社区贡献的自定义加载函数(常见于跨架构迁移权重)。

3.2 输入与归一化

"input_size": [3, 384, 384], "fixed_input_size": false, "interpolation": "bicubic", "mean": [0.485, 0.456, 0.406], "std": [0.229, 0.224, 0.225]
字段含义
input_size通道×高×宽,即 3 通道 384×384
fixed_input_sizefalse= 允许自适应地加载"不同分辨率"的权重(靠下文的interpolation重采样)
interpolation权重中卷积核在尺寸不匹配时用bicubic(双三次)插值,精度优于最近邻
mean/stdImageNet 经典归一化参数,预处理必备

在 timm 里,你甚至不用手写这些数值——timm.data.resolve_model_data_config(model)会直接读取这里的配置生成预处理管线,README.md 的"Model Usage"一节就有现成示例。

3.3 评测裁剪策略

"crop_pct": 1.0, "crop_mode": "center"

验证/测试时用crop_pct = 1.0+center,即不做额外裁剪,直接中心取全图——这是 384 高分辨率模型的典型做法(1.0 意味着不丢边)。

四、核心机密:first_conv、pool_size、classifier 🎯

这三个字段是整个pretrained_cfg的灵魂,也是标题中"隐藏机密"的出处。

4.1first_conv: "stem.conv"—— 权重的"对位锚点"

"first_conv": "stem.conv"

stem.conv是 ConvFormer 的首层卷积模块路径(stem 即输入卷积分支)。它的作用是告诉权重加载器:

  1. 对位起点:加载任意源权重时,从源模型的首个卷积层开始,与本模型的stem.conv逐层对齐;
  2. 迁移兼容:当 timm 支持从其他 MetaFormer/CNN 架构迁移权重时,first_conv是结构映射的起点,首层之前的 token 化差异会被自动处理。

一句话:它是"从哪一层开始搬权重"的坐标原点。

4.2pool_size: [12, 12]—— 特征图尺寸的"账本"

"pool_size": [12, 12]

这是全局平均池化(GAP)之后的特征图尺寸,它由结构推导而来:

384×384 输入 → stem(stride 4) → 96×96 → stage2(stride 2) → 48×48 → stage3(stride 2) → 24×24 → stage4(stride 2) → 12×12 ← 正是 pool_size → 全局平均池化 → (512, 1, 1)

这条链路和 README.md 中"Feature Map Extraction"示例打印的四个特征图形状完全一致:64@96×96 → 128@48×48 → 320@24×24 → 512@12×12。它同时解释了顶层的num_features: 512。

实用价值:

  • 接分割/检测等下游任务时,12×12 的语义分辨率(32 倍下采样)是选模型的依据;
  • 换输入尺寸时,pool_size按比例缩放,num_features保持不变,加载逻辑依然自洽。

4.3classifier: "head.fc.fc2"—— 分类头的"门牌号"

"classifier": "head.fc.fc2"

指出输出 1000 类 logits 的模块是head.fc中的fc2(两层分类头的最后一层,fc1为投影层)。它决定了两件事:

  • 类别数变化时:只重置fc2的权重,骨干网络全部保留;
  • 纯特征提取时:可直接绕过该层,取num_features = 512的向量做嵌入(README 中"Image Embeddings"即此玩法)。

💡 三者配合的工作流:first_conv定起点 → 逐层对齐权重 →pool_size保证池化结构正确 → 类别数变化时按classifier定位重置头部。这就是 timm 能"一行代码加载/迁移任意权重"的底层机制。

五、快速上手:把这份 config 用起来 🚀

import timm model = timm.create_model('convformer_s18.sail_in22k_ft_in1k_384', pretrained=True) model = model.eval() # 自动读取 config.json 中的 input_size / mean / std 生成预处理 data_config = timm.data.resolve_model_data_config(model) transforms = timm.data.create_transform(**data_config, is_training=False) # 换类别数?直接传 num_classes,fc2 会被自动重初始化 # 只要特征?features_only=True,池化后得到 12×12 的多尺度特征图

完整示例见 README.md 的 Model Usage 部分。

六、FAQ:新手最常问的 3 个问题 ❓

Q1:pool_size是输入尺寸吗?不是,它是池化后的特征图尺寸(12×12)。输入尺寸看input_size(384×384)。

Q2:为什么num_classes出现了两次?顶层的1000是当前模型的分类头设定;pretrained_cfg.num_classes记录的是权重训练时的类别数。两者一致说明无需动分类头;不一致时 timm 会按classifier指向的head.fc.fc2自动处理。

Q3:改输入分辨率会影响精度吗?fixed_input_size: false+bicubic说明 timm 允许跨分辨率加载权重,但模型是按 384 训练的,精度最优配置仍是 384×384。

七、总结:30 行配置里的 3 个精髓 📌

字段一句话记忆
first_conv权重对位的"起点坐标"
pool_size特征账本:384 → 12×12,池化后 512 维
classifier分类头门牌号head.fc.fc2,换类别只动它

读懂这份 config.json,你不仅掌握了 ConvFormer 的关键结构参数,也顺带理解了 timm 生态中"模型卡片 + 预训练配置"的设计哲学——配置即文档,字段即接口。🎉

【免费下载链接】convformer_s18.sail_in22k_ft_in1k_384

项目地址:https://ai.gitcode.com/hf_mirrors/timm/convformer_s18.sail_in22k_ft_in1k_384
点击查看免费下载

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

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

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

立即咨询