timm(PyTorch Image Models)权威指南:模型库、训练脚本、优化器生态与预训练权重体系全解析
2026/9/6 18:50:06 网站建设 项目流程

timm(PyTorch Image Models)权威指南:模型库、训练脚本、优化器生态与预训练权重体系全解析

【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 & V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models

本文基于 README.md 梳理 timm(PyTorch Image Models)的项目定位、模型家族矩阵、优化器/数据增强/正则化生态,以及训练、验证、推理脚本的用法;结合仓库源码中的模型工厂、优化器注册表与结果目录,帮助读者掌握"如何选模型、如何加载权重、如何跑通训练与验证"的完整技术链路,并理解各配置项背后的实现机制。

1. 项目定位:什么是 timm

README 对项目的定义是:

PyTorchImageModels(timm)是一个图像模型、层、工具函数、优化器、调度器、数据加载器/增广,以及参考训练/验证脚本的集合,目标是汇聚各类 SOTA 模型,并具备复现 ImageNet 训练结果的能力。

从仓库结构看,timm 并非单一模型仓库,而是一个"模型 + 训练基础设施"平台:

组成部分对应路径说明
模型定义timm/models/100+ 架构家族,每个家族一个模块文件(如resnet.pyvision_transformer.pyswin_transformer.pyconvnext.py
通用层库timm/layers/卷积/归一化/激活工厂、注意力模块、DropPath/DropBlock、模糊池化等
优化器timm/optim/30 余种优化器实现与统一工厂
学习率调度timm/scheduler/stepcosine(含重启)、tanh(含重启)、plateau
数据与增广timm/data/数据集工厂、Mixup/CutMix/AutoAugment/RandAugment、NaFlex 变长管线
参考脚本train.py、validate.py、inference.py、benchmark.py多进程/多 GPU 模式可复现训练脚本
结果与基准results/ImageNet 系列验证集精度 CSV + 各 GPU/精度组合推理基准

当前开发版本号为1.0.29.dev0,见 timm/version.py;测试矩阵按 README 记载覆盖 PyTorch 1.13 + Python 3.10(下限)至 PyTorch 2.9.1 + Python 3.13(上限),使用新版本时请以 tests/ 中的用例为验证依据。

2. 近期演进(What's New 精读)

README 的 "What's New" 章节是跟踪项目能力边界的最快方式,以下是与技术选型强相关的近期节点:

  • 2026-08-11:新增 CPUBone(面向低并行能力设备的骨干网)、PP-LCNetV2 模型定义与预训练权重;为非 NaFlex 训练引入按批次的图像/批大小调度(含由小到大的渐进分辨率调度);NaFlexViT 支持仅 key 的注意力掩码、对 compile 更友好的位置采样与缓存化的可变 patch 插值;改进模型工厂路径与 checkpoint 处理。
  • 2026-07-10:优化器支持torch.compile与张量学习率;NaFlexViT 扩展 patch 布局(面向 NaFlex-CLAP);加固 pickle 加载与自定义标签推理;发布 1.0.28。
  • 2026-03-23(1.0.26):checkpoint 默认weights_only=True加载;改进核心 ViT/EVA 模型的注意力掩码处理;ViT 新增Patch Representation Refinement(PRR)池化选项;Hiera 引入 F.SDPA 优化以启用 Flash Attention 内核。
  • 2025-10-16(1.0.21):新增Muon 优化器实现(对卷积权重与不适合正交化的参数形状有回退策略,默认回退 AdamW/NAdamW 更新);初步支持 'meta' 设备模型初始化,所有模型与模块支持 device/dtype 工厂关键字参数;预训练配置中加入 license 字段。
  • 2025-09-17:加入 DINOv3 的 ConvNeXt 与 ViT 模型(ViT 经由 EVA 基类 + 新增RotaryEmbeddingDinoV3实现);新增 MobileCLIP-2、MetaCLIP-2、SigLIP-2 NaFlex 编码器。
  • 2025-06-05:NaFlexViT 初版落地,支持可变长宽比/分辨率(SigLIP-2)、可变 patch 大小(FlexiViT)、分数/分解位置编码(NaViT);既有vision_transformer.py的 ViT 可通过create_model(..., use_naflex=True)载入 NaFlexViT。

这些条目说明项目当前的两条主线:视觉编码器权重生态持续扩张(自监督/多模态编码器转分类头)训练基础设施工程化(meta 设备、compile 友好、NaFlex 可变分辨率管线)

3. 模型体系:从家族矩阵到源码文件

README 列出了几乎所有主流 ImageNet 骨干的复现家族。为便于检索,下表给出"家族 → 源码文件"的映射(均为仓库内实际存在的文件),外部论文链接不在此重复,可按模型名在对应文件 docstring 中查证出处:

家族源码文件家族源码文件
ResNet / ResNeXt / v2timm/models/resnet.py、resnetv2.pyVision Transformer(ViT、AugReg、SBB 等)timm/models/vision_transformer.py
ResNeSt / Res2Net / ResMLPresnest.py、res2net.pySwin Transformer / V2swin_transformer.py、swin_transformer_v2.py
SENet 家族(SE/ECAResNet/SK)senet.py、sknet.pyConvNeXt(含 ConvNeXt-V2)convnext.py
EfficientNet 家族(B0-B8、V2、NoisyStudent、AdvProp、pruned)efficientnet.pyEVA / DINOv3 / PE ViT(RoPE 家族)eva.py
MobileNet-V2/V3/V4/V5、MobileViT(-V2)mobilenetv3.py、mobilenetv5.pyNaFlexViT(NaViT/FlexiViT/SigLIP-2)naflexvit.py
RegNet / ReXNet / RepVGGregnet.py、rexnet.pyMixNet / MNASNet / NASNetmixnet(MBConv 家族统一实现)
DenseNet / DLA / DPN / VoVNetdensenet.py、dla.py、dpn.py、vovnet.pyCSPNet(ResNet/ResNeXT)cspnet.py
Inception 家族inception_v3.py、inception_v4.py高效 CNN(EdgeNeXt、FasterNet、GhostNet、LCNetV2)edgenext.py、fasternet.py、ghostnet.py、lcnetv2.py

README 同时给出一条重要提示:所有模型家族都包含带预训练权重的变体;部分变体没有权重是刻意为之,并非 bug。实践中可用list_pretrained过滤出有可用权重的变体:

import timm # 只列出名称匹配 resnet50 且带预训练权重的变体 print(timm.list_models('resnet50*', pretrained_only=True))

上述 API 均在 timm/init.py 中顶层导出(create_modellist_modelslist_pretrainedis_modelget_pretrained_cfg等),无需深入子包即可使用。

4. 模型工厂:create_model的加载机制

create_model是贯穿 README "Other" 特性章节的统一入口。其完整实现见 timm/models/_factory.py,要点如下:

  1. 模型名解析(parse_model_name:模型名支持两种来源前缀
    • hf-hub:<repo_id>:从 Hugging Face Hub 读取config.json+ 权重文件(README 2024-12-31 起,所有做过加载期 remapping 的 OpenCLIP/JAX 权重都有独立 Hub 实例,保证该方式可靠);
    • local-dir:<path>:从本地目录读取同样的模型配置与权重(README "May 28, 2025" 新增)。 若名字含/\\:却无前缀,工厂会直接抛错提示你显式选择来源,避免静默加载错误的权重。
  2. 预训练标签(tag):形如vit_base_patch16_224.augreg_in21k_ft_in1k的点号标签会被split_model_name_tag拆分;显式传入的pretrained_cfg优先于名字中的 tag。
  3. kwargs 透传None值会被剔除后再传给模型类构造,因此drop_ratedrop_path_rateglobal_pool等通用训练参数可安全地统一传入,不被支持的模型不会报错。
  4. checkpoint 后置加载checkpoint_path在模型初始化完成之后再载入,适合直接恢复自己的训练。

README "Features / Other" 中提到的通用接口在此统一实现:所有模型都有get_classifier/reset_classifier访问器与forward_features特征前向;features_only=True配合out_indices/output_stride可从任意模型提取多尺度特征金字塔,创建后通过.feature_info查询各特征图的通道数与下采样步幅。

import timm # 分类头 model = timm.create_model('resnet50.a1_in1k', pretrained=True) head = model.get_classifier(); head = timm.reset_classifier(model, 100) # 多尺度特征(如分割/检测骨干用法) feat_model = timm.create_model('resnet50.a1_in1k', features_only=True, out_indices=(0, 1, 2, 3), output_stride=32) print(feat_model.feature_info)

5. 优化器生态:注册表驱动的统一工厂

README "Optimizers" 章节列出的优化器(AdaBelief、AdaFactor/BV、AdaHessian、AdamP、Lion、LaProp、LARS、MadGrad、MARS、Muon、NAdamW、NovoGrad、RAdam、RMSpropTF、SGDW、Kron、ADOPT、AdaMuon 等,以及fused*/bnb*/c后缀变体)在源码中由 timm/optim/_optim_factory.py 的OptimizerRegistry统一管理:每个优化器注册为一个冻结数据类OptimInfo,携带has_epshas_momentumhas_betassecond_order等元信息,工厂据此自动装配weight_decay/layer_decay参数组(见 timm/optim/_param_groups.py)。

使用方式(与 README 指引一致):

import timm # 查看全部优化器及描述 for name, info in timm.optim.list_optimizers(with_description=True): print(name, '-', info) # 用工厂创建:自动处理权重衰减分组与 layer decay model = timm.create_model('convnext_base', num_classes=100) opt = timm.optim.create_optimizer_v2( model, 'adamw', # 或 'muon'、'nadamw'、'sgdw'、'caadamw' 等 lr=1e-3, weight_decay=0.05, )

README 特别标注的两个近期行为值得注意:Muon(及其adamuon/nadamuon变体)对不适合 NS 正交化的参数形状默认回退 AdamW 更新,并支持adjust_lr_fn与自定义ns_coefficientsc后缀(如adamcnadamc)实现 "corrected weight decay"。此外 SGDP、AdamP、Adan 在 README 中被标记了 caution(谨慎使用),选型时应优先验证常用优化器。

学习率调度对应 timm/scheduler/,含step、带重启的cosine/tanhplateau等,README "Other" 一节指出其思想源自 AllenNLP、FAIRseq 与 SGDR。

6. 数据增广与正则化

README "Augmentations" 与 "Regularization" 两节的能力在 timm/data/ 与 timm/layers/ 中落地:

  • 增广:Mixup(timm/data/mixup.py)、CutMix、AutoAugment / RandAugment(配置对齐 EfficientNet 官方训练)、AugMix(含 JSD 损失,见 timm/loss/jsd.py)、SplitBatchNorm(timm/layers/split_batchnorm.py,将 BN 在干净与增广数据间拆分)。
  • 正则化:DropPath/Stochastic Depth 与 DropBlock(timm/layers/drop.py)、Blur Pooling(timm/layers/blur_pool.py)。
  • NaFlex 管线:README 记载train.py/validate.py--naflex-loader即可用变长宽比/分辨率训练 NaFlexViT;相关实现位于 timm/data/naflex_dataset.py、naflex_loader.py 与 timm/data/naflex_mixup.py。README 给出的典型验证命令:
python validate.py /imagenet --amp -j 8 \ --model vit_base_patch16_224 --model-kwargs use_naflex=True \ --naflex-loader --naflex-max-seq-len 256

训练侧还可用--naflex-train-seq-lens(每批随机取的目标序列长度)、--model-kwargs enable_patch_interpolator=True --naflex-patch-sizes 12 16 24(每批随机 patch 尺寸+插值)与--naflex-loss-scale(按序列长度变化的损失/批大小缩放)。

7. 训练、验证、推理脚本

README "Train, Validation, Inference Scripts" 一节指出仓库根目录提供与内置模型配套的高性能参考脚本。结合仓库文件与 README "Other" 中列出的运行模式:

脚本用途关键特性
train.py分类训练支持 NVIDIA DDP(每进程单卡,可选 AMP)、PyTorch DDP 多卡单进程、单卡单进程;torch.compile、纯 bf16/fp16 训练、蒸馏任务包装(logits/特征/词元蒸馏)、wandb 记录
validate.py验证评估与训练脚本共享模型/数据接口,支持 NaFlex 加载器(见上节)
inference.py单图/目录推理自定义标签推理、加固后的 pickle 检查点处理
benchmark.py模型推理基准产出 results/ 中的benchmark-*CSV
hubconf.pyTorch Hub 入口globals().update(timm.models._registry._model_entrypoints),使任意模型名可直接作为torch.hub入口函数
onnx_export.py / onnx_validate.pyONNX 导出与校验配合 1.0.2x 持续改进的导出修复
distributed_train.sh分布式启动torchrun 风格的 DDP 训练入口
avg_checkpoints.py / clean_checkpoint.py检查点工具权重平均(SWA 风格)与检查点清理

README 明确说明这些脚本"可以经少量改造适配其他数据集",其定位是复现 ImageNet 结果的参考实现,而非通用训练框架;项目自带的 train.pymain()(第 493 行起)完整覆盖了上述参数的解析与分发。快速上手文档可参考仓库内 hfdocs/quickstart.mdx 与 hfdocs/training_script.mdx。

一个最小的单卡训练启动示例(参数名以脚本--help为准,此处只演示组合):

python train.py /path/to/imagenet \ --model convnext_base --amp -b 128 \ --opt adamw --sched cosine --epochs 100 \ --drop-path 0.2 --mixup 0.8 --cutmix 1.0 --smoothing 0.1

8. 结果与基准数据的组织方式

README "Results" 指向 results/,其组织逻辑在 results/README.md 中说明得很清楚:

  • 验证精度results-imagenet.csv为标准 ImageNet-1k 验证集(50k 图);另有 Real Labels(重标注)、ImageNetV2(匹配频次)、ImageNet-Sketch、ImageNet-A(自然对抗)、ImageNet-R(渲染鲁棒性)五个 OOD/鲁棒性测试集,且每个 CSV 附带相对 clean 验证的 top-1/top-5 差值与排名。
  • 推理基准benchmark-infer-*-<torch版本>-<GPU>命名的 CSV(如benchmark-infer-amp-nchw-pt291-cu128-4090.csv),覆盖 RTX 3090/4090/5090/RTX Pro 6000 与 FP16/AMP/动态编译等组合;由 results/generate_csv_results.py 生成。
  • 元数据model_metadata-in1k.csv记录每个预训练权重的预训练数据集与训练技术(蒸馏、SSL、WSL 等)。

README 同时强调:验证分数目前仅对带预训练权重且为 ImageNet-1k 分类头的模型变体统计,基准则对所有模型统计。

9. 许可证边界(选型必知)

README "Licenses" 一节的边界结论直接影响商用选型:

  • 代码:Apache 2.0;第三方代码(MIT/BSD 等宽松许可)已做兼容性审查。
  • 预训练权重:默认假设 ImageNet 数据集的"仅非商业研究"许可约束延续到权重;用于商业产品前作者建议咨询法律意见。
  • 例外清单:Facebook WSL/SSL/SWSL ResNe(Xt) 与 Google Noisy Student EfficientNet 等使用了专有数据预训练,其中 Facebook 系模型有明确的非商业许可(CC-BY-NC 4.0);Google 系表面上仅 Apache 2.0 + ImageNet 顾虑。
  • 从 1.0.21 起,代码中的预训练配置新增了 license 字段,可用timm.get_pretrained_cfg(model_name)查询每个权重的许可信息。

10. 小结与引用

timm 的价值在于把"模型选择—权重加载—训练复现—评估基准"收敛到一套统一 API 与可审计的 CSV 结果之下:create_model一个入口覆盖注册表模型、HF Hub 权重与本地目录权重;优化器/调度器/增广由同一注册表体系装配;训练脚本覆盖从单卡到 DDP 的多种部署形态;results/ 目录保证精度与延迟数据可被程序化比对。引用本项目时请使用 README "Citing" 给出的 BibTeX(rw2019timm,Zenodo DOI: 10.5281/zenodo.4414861)。

【免费下载链接】pytorch-image-modelsThe largest collection of PyTorch image encoders / backbones. Including train, eval, inference, export scripts, and pretrained weights -- ResNet, ResNeXT, EfficientNet, NFNet, Vision Transformer (ViT), MobileNetV4, MobileNet-V3 & V2, RegNet, DPN, CSPNet, Swin Transformer, MaxViT, CoAtNet, ConvNeXt, and more项目地址: https://gitcode.com/GitHub_Trending/py/pytorch-image-models

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

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

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

立即咨询