RegNetY-8GF图像分类模型regnety_080_tv.tv2_in1k初探:ImageNet-1k预训练的终极轻量CNN指南
RegNetY-8GF图像分类模型regnety_080_tv.tv2_in1k初探:ImageNet-1k预训练的终极轻量CNN指南
📌 模型速览
regnety_080_tv.tv2_in1k 是 timm 生态中的一款 RegNetY 架构图像分类模型,参数量仅约 39.4M,计算量约 8.5 GMACs,在 ImageNet-1k(1000 类)数据集上预训练,Top-1 精度达到 82.59%、Top-5 精度 96.25%(输入 224×224)。对于追求"小模型、高精度、低算力"的新手和普通用户来说,它是轻量级 CNN 分类器中性价比极高的一档选择。
一句话总结:用不到 40M 参数,换接近大模型级别的图像分类精度。
🧩 什么是 RegNetY?为什么它"轻量"?
RegNet 系列(RegNetX / RegNetY / RegNetZ)来自论文《Designing Network Design Spaces》(CVPR 2020),核心思想是用一套规则自动生成网络结构,让网络规模(宽度和深度)可以平滑调节:
- RegNetY:在规整的"bottleneck"结构基础上,通道数可以逐块平滑变化,表达能力更强,是三者中精度最高的系列;
- 8GF:指该配置在标准输入下的计算量约为 8 GFLOPs 量级,属于轻量级定位;
- 相比同级别模型,它的卷积结构规整,在 CPU、GPU、移动端推理上都更容易加速。
timm 的 RegNet 实现还内置了多项增强(见 README.md):随机深度(stochastic depth)、梯度检查点、分层学习率衰减、可配置输出步长(dilation)、可切换激活与归一化层等,方便后续做迁移学习。
📊 核心参数一览
| 项目 | 数值 | 说明 |
|---|---|---|
| 参数量 | 39.4 M | 权重文件体积很小,下载快 |
| 计算量 | 8.5 GMACs | 推理速度快,适合端侧部署 |
| 激活量 | 19.7 M | 显存占用低 |
| 输入尺寸 | 224 × 224 | 支持非固定输入(fixed_input_size: false) |
| 分类类别 | 1000 类 | ImageNet-1k 标准分类头 |
| Top-1 / Top-5 | 82.59% / 96.25% | 224 输入下的官方指标 |
| 许可证 | BSD-3-Clause | 可自由用于商业项目 |
以上信息可以从仓库中的 config.json 直接查到,其中 architecture 字段为 regnety_080_tv,num_classes 为 1000,pretrained_cfg.tag 为 tv2_in1k(即 torchvision 第二套训练配方在 ImageNet-1k 上得到的权重)。
📁 仓库文件说明
整个仓库结构非常精简,核心就是"说明文档 + 配置文件 + 两种权重格式":
| 文件 | 作用 |
|---|---|
| README.md | 模型卡片:模型详情、使用示例、同系列模型对比表 |
| config.json | 模型配置:架构、类别数、输入尺寸、归一化参数等 |
| model.safetensors | 新版安全张量格式的预训练权重(推荐) |
| pytorch_model.bin | 传统 PyTorch 格式权重,兼容旧版加载方式 |
两个权重文件都通过 Git LFS 管理(见 .gitattributes),克隆仓库时会自动拉取完整权重,无需额外下载。
🚀 快速上手:三步跑通 regnety_080_tv.tv2_in1k
1️⃣ 一键加载并做图像分类
得益于 timm 的 create_model 接口,只需一行代码就能加载预训练权重:
import timm
model = timm.create_model('regnety_080_tv.tv2_in1k', pretrained=True)
model = model.eval()
完整的分类推理示例(读取图片、自动构建变换、输出 Top-5 概率)可参考 README.md 中的 "Image Classification" 小节。
2️⃣ 提取特征图(做目标检测、分割的骨干网)
加一个 features_only=True 参数,模型就会输出 5 层逐级下采样的特征图(112→56→28→14→7),可以直接接到 DETR、Mask R-CNN 等下游任务头上:
model = timm.create_model('regnety_080_tv.tv2_in1k',
pretrained=True,
features_only=True)
3️⃣ 提取图像向量(做检索、聚类)
设置 num_classes=0 去掉分类头,输出就是 2016 维的图像 Embedding,适合做图片相似度检索。
⚙️ 数据预处理:这些参数别搞错
模型对输入的预处理参数已固化在 config.json 中,手动加载权重时容易踩坑:
- 均值 / 标准差:
mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225](ImageNet 标准归一化); - 输入插值:训练权重时使用 bicubic 插值,推理建议保持一致;
- Center Crop 比例:
crop_pct=0.965,评估时先缩放再中心裁剪; - 池化层:
pool_size=[7,7],对应 224 输入下的 7×7 全局平均池化。
用 timm 自带的 resolve_model_data_config + create_transform 可以自动生成正确变换,避免手动配置出错。
🔍 权重版本怎么选?(tv2_in1k vs ra3 vs pycls)
模型名后缀代表训练来源,这是新手最常混淆的地方:
| 后缀 | 含义 | 适用建议 |
|---|---|---|
tv2_in1k |
torchvision 第二套配方(含 EMA 等改进),ImageNet-1k | 本仓库版本,官方推荐默认选择 |
ra3_in1k |
timm 训练,AdamW + 3 种增广 | 同规格下精度略高,但体积/版本生态以官方为准 |
pycls_in1k |
旧版原始 PyTorch 实现训练 | 仅用于复现对比 |
同系列还有 regnety_032 / 040 / 064 / 120 / 160 等规格,数字越大模型越大。如果你的算力有限或需要移动端部署,可以按需选择更小的 040/064;若追求精度上限,同尺寸下优先 tv2_in1k 或 ra3_in1k 配方(对比数据见 README.md 的 Model Comparison 表格)。
❓ 常见问题(FAQ)
Q1:输入必须是 224×224 吗?
不是。fixed_input_size 为 false,支持其他分辨率(如 288),但精度指标仅在 224 下给出,改分辨率后精度会小幅波动。
Q2:能用于商业项目吗?
可以。许可证为 BSD-3-Clause(见 config.json 中 license 字段),商用友好。
Q3:safetensors 和 bin 权重选哪个? 两者内容等价,推荐 model.safetensors:加载更快、更内存安全;老版本代码用 pytorch_model.bin 即可。
Q4:微调自定义数据集要改什么?
默认分类头是 1000 类(head.fc)。微调时把 num_classes 改成你的类别数,并适当调低学习率,从 stem(stem.conv)到分类头逐层冻结是常见做法。
✅ 写在最后
regnety_080_tv.tv2_in1k 是"轻量级 CNN 图像分类"的典型代表:39.4M 参数、8.5 GMACs、82.59% Top-1,兼顾速度、体积与精度,BSD 许可证商用无忧。无论你是做图像分类基线、下游任务的特征骨干,还是想快速验证一个想法,它都是一个上手成本极低的起点 🎯。