【免费下载链接】focalnet_tiny_lrf.ms_in1k
focalnet_tiny_lrf.ms_in1k 是一个基于 Focal Modulation Network(FocalNet)的图像分类模型,由 Microsoft 作者团队在 ImageNet-1k 上预训练。本文带你逐层解剖它的内部结构——从最底层的stem.proj卷积,到 4 个 stages 里的聚焦调制模块,再到最终的head.fc分类头,帮你完整理解这个仅 28.6M 参数的轻量级视觉骨干网络是如何工作的。
📊 模型速览:一张表看懂关键指标
在深入结构之前,先看 README.md 中记录的核心参数:
| 指标 | 数值 | 说明 |
|---|---|---|
| 参数量 | 28.6 M | 轻量级,适合部署 |
| 计算量 | 4.5 GMACs | 224×224 输入下 |
| 激活值 | 17.8 M | 显存占用友好 |
| 输入分辨率 | 224 × 224 | ImageNet 标准 |
| 输出类别 | 1000 类 | ImageNet-1k |
| 特征维度 | 768 | num_features |
| 许可证 | MIT | 可商用 |
💡 命名解码:
tiny= 最小尺寸;lrf=LongRangeFocus,指每个调制模块使用 3 级多尺度窗口(对应 3/5/7 卷积核),比srf变体(2 级)的"聚焦范围"更远;ms_in1k= Microsoft 官方权重、ImageNet-1k 预训练。
🗺️ 整体架构总览:四级特征金字塔
focalnet_tiny_lrf.ms_in1k 的数据流是一条"分辨率递减、通道数递增"的清晰链路:
| 模块路径 | 输出分辨率 | 输出通道 | 作用 |
|---|---|---|---|
stem | 56 × 56 | 96 | 4 倍下采样入口 |
layers.0 | 56 × 56 | 96 | 2 个 FocalNetBlock |
layers.1 | 28 × 28 | 192 | 2× 下采样 + 2 个 Block |
layers.2 | 14 × 14 | 384 | 2× 下采样 + 6 个 Block |
layers.3 | 7 × 7 | 768 | 2× 下采样 + 2 个 Block |
norm+head | 768 维向量 | 1000 | 归一化 + 全局池化 + 分类 |
整个网络共12 个 FocalNetBlock(2+2+6+2),其中layers.2承担了最重的"细粒度建模"任务。用features_only=True加载时,四个 stage 输出的特征图正是上表中的[96,56,56] / [192,28,28] / [384,14,14] / [768,7,7],可直接用于检测、分割等下游任务。
🔬 第 1 层解剖:stem —— 一切从 stem.proj 开始
stem是整个网络的"入口",config.json 中"first_conv": "stem.proj"指名的就是它:
stem.proj:一个 4×4 卷积核、stride=4 的下采样卷积,把 224×224×3 的原始图像直接压缩为 56×56×96 的特征图。相比传统"3×3 卷积 + 池化"的两步下采样,它一步到位且更平滑。stem.norm:紧跟的 LayerNorm2d,对 96 个通道做逐点归一化,稳定数值范围。
📌 做迁移学习/剪枝时,
stem.proj就是需要优先关注的"第一层卷积"——它决定了模型看到的第一个特征表征。
⚙️ 第 2 层解剖:FocalNetBlock —— 网络的基本积木
每个 stage 内部的单元都是FocalNetBlock,内部结构为经典的"双残差 + 双归一化":
x → norm1 → FocalModulation → + 残差(LayerScale + DropPath) → norm2 → Conv-MLP(mlp_ratio=4) → + 残差(LayerScale + DropPath)三个值得注意的设计:
- LayerScale2d:每个残差分支乘以一个初始 1e-4 的可学习缩放因子,让小模型在训练初期更稳定;
- DropPath(随机深度):训练时以一定概率整体"丢弃"残差分支,缓解过拟合;
- Conv 版 MLP:FFN 部分用 1×1 卷积实现而非线性层,保持全卷积架构,不要求固定输入尺寸。
🎯 第 3 层解剖:FocalModulation —— 灵魂所在
FocalNet 的核心创新就在FocalModulation模块,它回答的问题是:如何不用昂贵的全局注意力,也能高效捕捉多尺度上下文?
以 focalnet_tiny_lrf 为例(focal_level=3、focal_window=3、focal_factor=2):
- 一次 1×1 投影三分:输入先经过
f投影,被切分为q(查询)、ctx(上下文)、gates(门控权重)三份; - 3 级多尺度卷积 + 全局平均:
ctx分别流过 3×3、5×5、7×7 三个逐通道深度卷积(GELU 激活),再叠加一个跨全图 H×W 的平均池化分支——即"由近及远"四个感受野层次; - 门控加权求和:各级上下文按
gates的门控权重相加,得到自适应的上下文ctx_all; - 聚焦调制:
q * h(ctx_all),用上下文对查询做逐点调制,最后经 1×1 投影proj输出。
💡 直观理解:传统自注意力是"每个像素看所有像素"(O(N²) 复杂度),而 FocalModulation 用几个小卷积 + 全局平均就实现了类似效果,这正是 4.5 GMACs 超低计算量的来源。lrf命名正来源于此——相比srf的 2 级,它多了一级更大的 7×7 感受野。
📐 第 4 层解剖:四个 stage 的节奏设计
layers.0 ~ layers.3遵循统一的节奏:先下采样、后堆 Block:
| stage | 下采样downsample | Block 数 | 设计意图 |
|---|---|---|---|
layers.0 | 无(stem 已 4× 降) | 2 | 高分辨率下学习纹理 |
layers.1 | 2×(96→192 通道) | 2 | 过渡,扩大感受野 |
layers.2 | 2×(192→384 通道) | 6 | 算力最重,学语义 |
layers.3 | 2×(384→768 通道) | 2 | 高层抽象,接分类头 |
每个下采样层同样由stride-2 卷积 + LayerNorm2d构成,与stem保持同一风格。整体形成 56→28→14→7 的空间金字塔,通道数 96→192→384→768 逐级翻倍。
🏁 第 5 层解剖:head —— 终点站 head.fc
数据流最后经过两个收尾模块:
norm:对 7×7×768 的特征图做最后一层 LayerNorm2d,把数值稳定在head.fc最舒服的区间;head(ClassifierHead):内部是全局平均池化 → 展平 →head.fc。head.fc即 config.json 中"classifier": "head.fc"所指的那一层 768→1000 的全连接,输出 ImageNet 1000 类的 logits。
💡 换成目标检测等任务时,通常就是保留到
layers.3的输出、丢弃整个head,再挂自定义分支。
🚀 上手使用:三种加载姿势
权重文件位于 model.safetensors(safetensors 格式,约 114.6 MB)与 pytorch_model.bin,均通过 timm 加载。前置数据配置(ImageNet 均值/标准差、90% 中心裁剪)可直接从 config.json 的pretrained_cfg中读取。
① 图像分类(完整模型)
model = timm.create_model('focalnet_tiny_lrf.ms_in1k', pretrained=True) output = model(x) # (batch, 1000)② 提取多级特征图(features_only)
model = timm.create_model('focalnet_tiny_lrf.ms_in1k', pretrained=True, features_only=True) feats = model(x) # [96×56×56, 192×28×28, 384×14×14, 768×7×7]③ 生成图像 Embedding(去掉分类头)
model = timm.create_model('focalnet_tiny_lrf.ms_in1k', pretrained=True, num_classes=0) emb = model(x) # (batch, 768)⚠️ 注意:推理前务必用
timm.data.create_transform生成与config.json一致的归一化变换,否则会明显掉点。
✅ 一句话总结
focalnet_tiny_lrf.ms_in1k 用stem 四级下采样 + 12 个"聚焦调制 + 卷积 MLP"Block + 单线性分类头的极简结构,以 28.6M 参数、4.5 GMACs 的代价,实现了多尺度全局上下文建模——是轻量视觉骨干中"算得少、看得全"的代表,适合对推理速度敏感的分类与特征提取场景。
【免费下载链接】focalnet_tiny_lrf.ms_in1k
相关推荐
Mamba-minimal代码逐行解读:从ModelArgs到RMSNorm的完整架构
Mamba minimal代码逐行解读:从ModelArgs到RMSNorm的完整架构 Mamba minimal是一个简洁高效的PyTorch实现,专门用于选
人工智能大模型Windows 10安卓子系统实战方案:三步搞定原生Android应用深度整合
Windows 10安卓子系统实战方案:三步搞定原生Android应用深度整合 Windows Subsystem for Android WSA 作为微软官方
操作系统虚拟化Hermes Agent 新手完整指南:三分钟搭好你自己的AI代理环境
Hermes Agent 新手完整指南:三分钟搭好你自己的AI代理环境 如果你也折腾过AI代理的环境配置,被一堆依赖搞得头疼,那这篇 Hermes Agent
AI Agent人工智能AI 应用工具调用Agent 记忆交互助手RAG任务调度MCP 服务
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考