timm documentation
模型
模型
本页包含用于创建和发现 timm 模型的 API 参考文档,涵盖其预训练配置以及检查点 / Hub 辅助工具,并概述了 timm 模型共享的接口。各个架构的详细说明见 模型摘要 和各模型页面。
用法
模型通过 create_model 按名称创建。该名称用于选择 timm 中注册的架构,可选地在 . 后附加预训练标签(例如 resnet50.a1_in1k),或者通过源前缀指定 Hugging Face Hub 上的模型或本地文件夹中的模型。create_model 自身未使用的关键字参数会透传至模型的入口点函数,进而传递给模型类的构造函数,因此可以设置任何模型特定的参数。
import torch
import timm
# Random init (pretrained=False is the default). The tag selects the pretrained cfg, and the weights loaded with
# pretrained=True. Without a tag the architecture's default tag is used.
model = timm.create_model('vit_tiny_patch16_224.augreg_in21k_ft_in1k')
print(model.pretrained_cfg['mean'], model.pretrained_cfg['crop_pct']) # (0.5, 0.5, 0.5) 0.9
# Model arguments pass through to the model class, a 10 class head, single channel input and regularization.
model = timm.create_model('resnet50', num_classes=10, in_chans=1, drop_rate=0.2, drop_path_rate=0.05)
# Discover models, filters are fnmatch wildcards.
timm.list_models('convnext*') # architecture names
timm.list_pretrained('resnet50.*') # architecture.tag names w/ pretrained weights
timm.list_models(module='vision_transformer', pretrained=True)
# Image preprocessing to match the model's pretrained cfg (input size, interpolation, crop, mean / std).
model = timm.create_model('vit_tiny_patch16_224.augreg_in21k_ft_in1k')
data_config = timm.data.resolve_model_data_config(model)
transform = timm.data.create_transform(**data_config, is_training=False)
x = torch.randn(2, 3, 224, 224)
features = model.forward_features(x) # unpooled features, (2, 197, 192)
pre_logits = model.forward_head(features, pre_logits=True) # pooled features, (2, 192)
logits = model.forward_head(features) # same as model(x), (2, 1000)
model.reset_classifier(5) # replace the classifier w/ a new 5 class one
model.set_input_size(img_size=(384, 384)) # resample the position embedding for a new resolution
logits = model(torch.randn(2, 3, 384, 384)) # (2, 5)训练脚本(train.py)通过以下标志暴露常用参数:
--model用于选择模型。--pretrained用于加载预训练权重。--num-classes用于设置分类器的大小(num_classes)。--in-chans用于设置输入通道数(in_chans)。--gp设置全局池化类型(global_pool)。--drop设置分类器的 dropout(drop_rate)。--drop-path用于设置随机深度(drop_path_rate)。--pretrained-path从本地文件加载预训练权重,并适配分类器 / 输入卷积层(pretrained_cfg_overlay=dict(file=...))。--initial-checkpoint在创建模型后加载检查点,且不进行适配(checkpoint_path)。--model-kwargs key=value ...用于传递其他模型参数。
请参阅快速入门以获取介绍。
模型名称
| 名称 | 源代码 |
|---|---|
resnet50 | timm 注册表中的架构,及其默认预训练配置(此处为 a1_in1k) |
resnet50.a1_in1k | Architecture + 预训练标签,未知标签会引发错误 |
hf-hub:timm/resnet50.a1_in1k | Hugging Face Hub 仓库的架构、预训练配置和模型参数来自其 config.json,@revision 用于选择修订版本 |
local-dir:/path/to/folder | 包含 config.json 和权重的本地文件夹,由 save_for_hf 写入 |
Hub 和本地源即使在 pretrained=False 时也会读取配置,但权重仅在 pretrained=True 时加载。
包含 /、\ 或 : 且没有源前缀的名称会引发 ValueError,而不是回退到同名注册表模型。hf_hub: 是 hf-hub: 的已弃用别名。
常用参数
pretrained加载预训练 cfg 的权重,如果设置了state_dict或file,则从其中加载;否则,当安装了huggingface_hub时,从 Hub(hf_hub_id)加载,或从url加载。下方的分类器 / 输入卷积适配功能允许在一次调用中创建用于微调的预训练模型。num_classes用于设置分类器的大小,0表示移除分类器。默认值来自预训练配置。 加载预训练权重时,如果类别数量不同,则会丢弃分类器的权重(保持随机初始化状态)。global_pool用于设置池化类型,可选项因模型而异(例如,大多数卷积网络支持avg、max、avgmax、catavgmax,而 ViT 支持token、avg、map),''表示禁用池化。in_chans用于设置输入通道数。默认值来自预训练配置。在加载预训练权重时,如果该值与源检查点的通道数(预训练配置中的input_size[0])不同,则在支持的情况下会相应调整第一个卷积层的权重。drop_rate用于设置分类器的 dropout,大多数模型都支持该参数。drop_path_rate用于设置随机深度,大多数模型均支持该功能。img_size是 ViT 风格及其他具有固定输入尺寸模型的参数,除非显式设置,否则它们会采用预训练配置中的input_size。- 在 ViT 和 EVA 系列中,
dynamic_img_size=True会在每次前向传播时将位置嵌入重新采样到输入尺寸。 features_only(配合out_indices、output_stride、feature_cls)将模型封装为特征主干,返回特征图,参见 特征提取。pretrained_cfg用于替换预训练配置(一个标签、字典或PretrainedCfg)。pretrained_cfg_overlay会覆盖其部分字段,例如pretrained_cfg_overlay=dict(file='weights.pth')会从本地文件加载pretrained=True的权重,并应用上述的分类器 / 输入卷积适配(与train.py中的--pretrained-path行为一致)。checkpoint_path会在模型创建后,通过load_checkpoint加载检查点。这是一种严格的加载方式,不会进行任何适配;如果检查点中包含 EMA 权重,则会使用这些权重。cache_dir用于覆盖预训练权重和 Hub 配置的下载缓存。device会传递给模型类,参数会直接在设备上创建。device='meta'会创建一个模型,但不为其权重分配内存。dtype会传递给模型类,参数会直接以该 dtype 创建。scriptable用于设置 TorchScript 脚本化的层配置标志。exportable用于设置导出/跟踪的层配置标志。no_jit会将层配置标志设置为禁用 jit 脚本化层。
设置为 None 的参数在到达模型之前会被丢弃,因此会应用模型的默认值。模型类不接受的参数在大多数模型中会引发 TypeError,少数模型会忽略未知参数。
预训练配置
架构拥有一个或多个预训练 cfg,每个标签对应一个,并注册到模型中。cfg 描述了权重(位置、许可证、来源)以及模型是如何训练的,并应如何使用这些权重进行评估。由 create_model 创建的模型,其 cfg 以字典形式存储在 model.pretrained_cfg 中(model.default_cfg 是别名),注册表中的版本由 get_pretrained_cfg 作为 PretrainedCfg 实例返回。
| 字段 | 描述 |
|---|---|
architecture, tag | 模型架构和预训练标签 |
hf_hub_id, url, file, state_dict | 权重来源(参见上文中的pretrained) |
input_size, test_input_size, fixed_input_size | 训练(以及默认评估)的输入大小,使用 use_test_size=True 时的评估大小(如果不同),以及模型是否具有固定的输入大小(img_size 参数) |
interpolation, crop_pct, test_crop_pct, crop_mode | 评估时的缩放插值、裁剪比例(在默认的 center 裁剪模式下,图像会先缩放到 input_size / crop_pct,然后进行中心裁剪)以及裁剪模式 |
mean, std | 输入归一化 |
num_classes, label_names, label_descriptions | 分类器大小和标签(如果已知) |
classifier, first_conv | 分类器和第一个卷积的模块名称,用于在加载时调整权重 |
license, origin_url, paper_ids, paper_name, notes | 权重元数据 |
输入字段是 resolve_data_config / resolve_model_data_config 解析为数据集的 transforms 和 loader 的数据配置。cfg 描述的是源检查点,当模型被创建或以不同方式修改时(num_classes、in_chans、img_size、set_input_size()),它不会更新。模型当前的输入通道、尺寸和固定尺寸约束是单独跟踪的:get_model_input_config 返回这些值,而 resolve_input_data_config 根据这些值解析数据配置(训练、验证和推理脚本也是如此)。get_model_args 返回用于按当前状态重建模型的参数,save_for_hf 会将其写入导出的配置中。有关详细信息,请参阅 adapt and export models。
模型接口
timm 模型在 forward() 之外共享一套通用接口:包括 forward_features() / forward_head() 的拆分、分类器重置、中间特征、输入尺寸调整,以及梯度检查点和参数分组等训练钩子。这些内容在 timm 模型 API 中有详细说明,包括哪些模型家族支持哪些部分。
检查点与 Hub
load_checkpoint将检查点文件(PyTorch 或.safetensors)加载到模型中。load_state_dict读取检查点文件并返回其状态字典。resume_checkpoint会恢复train.py检查点中的模型、优化器和损失缩放器状态,并返回要从中恢复的 epoch。
load_checkpoint 和 load_state_dict 默认会选取 train.py 检查点中的 EMA 权重(use_ema),并移除 module.(DDP)和 _orig_mod.(torch.compile)键前缀。
save_for_hf会将权重以及config.json(包含架构、预训练配置、model_args、label_names)写入一个文件夹。push_to_hf_hub会将权重和配置上传到 Hub 仓库,如果该仓库没有模型卡片,则会自动生成一个。
随后,模型通过 hf-hub: 或 local-dir: 创建,请参阅 共享和加载模型。
import timm
from timm.models import save_for_hf
model = timm.create_model('resnet18', num_classes=4)
# ... fine-tune
save_for_hf(model, 'my_resnet18', model_config=dict(label_names=['a', 'b', 'c', 'd']), safe_serialization=True)
model = timm.create_model('local-dir:my_resnet18', pretrained=True) # 4 classes, weights and labels restored
print(model.pretrained_cfg['label_names'])自定义模型
使用 register_model 装饰的模型入口函数会被添加到注册表中,因此可以通过 create_model 创建,并通过 list_models 查找。timm 中的入口函数使用 build_model_with_cfg 来构建模型,该函数负责处理预训练配置、预训练权重加载以及 features_only。
API
模型创建
timm.create_model
< source >( model_name: strpretrained: bool = Falsepretrained_cfg: typing.Union[str, typing.Dict[str, typing.Any], timm.models._pretrained.PretrainedCfg, NoneType] = Nonepretrained_cfg_overlay: typing.Optional[typing.Dict[str, typing.Any]] = Nonecheckpoint_path: typing.Union[str, pathlib.Path, NoneType] = Nonecache_dir: typing.Union[str, pathlib.Path, NoneType] = Nonescriptable: typing.Optional[bool] = Noneexportable: typing.Optional[bool] = Noneno_jit: typing.Optional[bool] = None**kwargs: typing.Any )
参数
- model_name — 要实例化的模型名称。
- pretrained — 如果设置为 True,则加载预训练的 ImageNet-1k 权重。
- pretrained_cfg — 为模型传入外部的 pretrained_cfg。
- pretrained_cfg_overlay — 使用这些键值对替换基础 pretrained_cfg 中的键值对。
- checkpoint_path — 模型初始化之后加载的检查点路径
- cache_dir — 覆盖 Hugging Face Hub 和 Torch 检查点的模型缓存目录。
- scriptable — 设置层配置,使模型可被 jit 脚本化(目前并非所有模型都支持)。
- exportable — 设置层配置,使模型可追踪 / 可导出为 ONNX(尚未完全实现/遵守)。
- no_jit — 设置层配置,使模型不使用 jit 脚本化层(目前仅涉及激活函数)。
创建一个模型。
查找模型的入口函数,并传入相关参数以创建新模型。
Tip:
**kwargs 会通过入口函数 fn 传递到 timm.models.build_model_with_cfg(),然后传递到模型类的 init()。在传递之前,值为 None 的 kwargs 会被移除。
Keyword Args: drop_rate (float): 训练时分类器的 dropout 率。 drop_path_rate (float): 训练时随机深度(Stochastic depth)的丢弃率。 global_pool (str): 分类器的全局池化类型。
示例:
>>> from timm import create_model
>>> # Create a MobileNetV3-Large model with no pretrained weights.
>>> model = create_model('mobilenetv3_large_100')
>>> # Create a MobileNetV3-Large model with pretrained weights.
>>> model = create_model('mobilenetv3_large_100', pretrained=True)
>>> model.num_classes
1000
>>> # Create a MobileNetV3-Large model with pretrained weights and a new head with 10 classes.
>>> model = create_model('mobilenetv3_large_100', pretrained=True, num_classes=10)
>>> model.num_classes
10
>>> # Create a Dinov2 small model with pretrained weights and save weights in a custom directory.
>>> model = create_model('vit_small_patch14_dinov2.lvd142m', pretrained=True, cache_dir="/data/my-models")
>>> # Data will be stored at */data/my-models/models--timm--vit_small_patch14_dinov2.lvd142m/*模型发现
timm.list_models
< source >( filter: typing.Union[str, typing.Iterable[str]] = ''module: typing.Union[str, typing.Iterable[str]] = ''pretrained: bool = Falseexclude_filters: typing.Union[str, typing.Iterable[str]] = ''name_matches_cfg: bool = Falseinclude_tags: typing.Optional[bool] = None )
参数
- filter — 与 fnmatch 配合使用的通配符过滤器。
- module — 将模型选择限制在特定的子模块(例如 ‘vision_transformer’)。
- pretrained — 如果为 True,则仅包含具有有效预训练权重的模型。
- exclude_filters — 通配符过滤器,用于在通过 filter 包含模型后将其排除。
- name_matches_cfg — 仅包含 model_name 与 default_cfg 名称匹配的模型(排除某些别名)。
- include_tags — 在模型名称中包含预训练标签(model.tag)。如果为 None,则设置为 pretrained 的值。
返回按自然顺序排序的可用模型名称列表。
示例: list_models(‘gluon_resnet’) — 返回所有以 ‘gluon_resnet’ 开头的模型 list_models(’resnext*’, ‘resnet’) — 返回 ‘resnet’ 模块中所有包含 ‘resnext’ 的模型
timm.list_pretrained
< source >( filter: typing.Union[str, typing.Iterable[str]] = ''exclude_filters: typing.Union[str, typing.Iterable[str]] = '' )
返回预训练模型名称列表(含标签),并按自然顺序排序。
返回包含模型入口点的模块名称的已排序列表。
检查模型架构是否已注册,忽略任何预训练标签。
检查模型名称(带或不带标签)是否已注册预训练权重。
timm.model_entrypoint
< source >( model_name: strmodule_filter: typing.Optional[str] = None )
获取模型名称对应的模型入口函数,忽略任何预训练标签。
预训练配置
timm.get_pretrained_cfg
< source >( model_name: strallow_unregistered: bool = True )
获取指定模型名称的预训练 cfg 副本,如果未指定,则使用默认标签。
timm.get_pretrained_cfg_value
< source >( model_name: strcfg_key: str )
引发
RuntimeError
RuntimeError— 如果模型没有注册预训练的 cfg 或标签无效。
根据模型名称和键获取特定的预训练 cfg 值,如果键不存在则返回 None。
timm.models.get_arch_pretrained_cfgs
< source >( model_name: str )
获取某个模型架构的所有预训练 cfg 副本。
类 timm.models.PretrainedCfg
< source >( url: typing.Union[str, typing.Tuple[str, str], NoneType] = Nonefile: typing.Optional[str] = Nonestate_dict: typing.Optional[typing.Dict[str, typing.Any]] = Nonehf_hub_id: typing.Optional[str] = Nonehf_hub_filename: typing.Optional[str] = Nonesource: typing.Optional[str] = Nonearchitecture: typing.Optional[str] = Nonetag: typing.Optional[str] = Nonecustom_load: bool = Falseinput_size: typing.Tuple[int, int, int] = (3, 224, 224)test_input_size: typing.Optional[typing.Tuple[int, int, int]] = Nonemin_input_size: typing.Optional[typing.Tuple[int, int, int]] = Nonefixed_input_size: bool = Falseinterpolation: str = 'bicubic'crop_pct: float = 0.875test_crop_pct: typing.Optional[float] = Nonecrop_mode: str = 'center'mean: typing.Tuple[float, ...] = (0.485, 0.456, 0.406)std: typing.Tuple[float, ...] = (0.229, 0.224, 0.225)num_classes: int = 1000label_offset: typing.Optional[int] = Nonelabel_names: typing.Optional[typing.Tuple[str]] = Nonelabel_descriptions: typing.Optional[typing.Dict[str, str]] = Nonepool_size: typing.Optional[typing.Tuple[int, ...]] = Nonetest_pool_size: typing.Optional[typing.Tuple[int, ...]] = Nonefirst_conv: typing.Optional[str] = Noneclassifier: typing.Optional[str] = Nonelicense: typing.Optional[str] = Nonedescription: typing.Optional[str] = Noneorigin_url: typing.Optional[str] = Nonepaper_name: typing.Optional[str] = Nonepaper_ids: typing.Union[str, typing.Tuple[str], NoneType] = Nonenotes: typing.Optional[typing.Tuple[str]] = None )
当前模型输入和导出
返回当前图像通道、标称尺寸和固定尺寸约束。
标称尺寸是针对灵活模型的推荐值。源检查点的元数据仍保留在 model.pretrained_cfg 中,且在此处永远不会被修改。
返回模型特征的副本,并补充当前的通道数和类别数。
现有的 in_chans 和 num_classes 属性仍具有权威性;
此处直接读取这些属性,而非在存储的特征中重复它们。
特征包装器中不存在的属性将被省略。
timm.models.get_model_args
< source >( model: Moduleoverrides: typing.Optional[typing.Dict[str, typing.Any]] = None )
返回重建参数,包括构造后所做的受支持更改。
运行时参数会被工厂排除。除非在覆盖项中明确提供,否则丢弃率会被省略。在导出时,不可序列化的架构参数需要显式提供可序列化的替代项。
timm.models.resolve_model_input_args
< source >( model_name: strargs: typing.Optional[typing.Dict[str, typing.Any]] = None**model_kwargs )
将脚本输入请求解析为create_model的参数。
保存的模型参数是默认值。显式的通道/尺寸请求会选择目标,而不会覆盖描述源检查点的元数据。
timm.models.adapt_input_conv
< source >( in_chans: intconv_weight: Tensorbase_chans: int = 3 )
将预训练的输入卷积权重适配到不同的通道数。
检查点和 Hub
timm.models.load_checkpoint
< source >( model: Modulecheckpoint_path: struse_ema: bool = Truedevice: typing.Union[str, torch.device] = 'cpu'strict: bool = Trueremap: bool = Falsefilter_fn: typing.Optional[typing.Callable] = Noneweights_only: bool = True )
将检查点加载到模型中。
Native PyTorch checkpoints are loaded as state dictionaries. NumPy .npz/.npy` checkpoints are foreign, model-specific formats and are delegated to the model's `load_pretrained helper.
timm.models.load_state_dict
< source >( checkpoint_path: struse_ema: bool = Truedevice: typing.Union[str, torch.device] = 'cpu'weights_only: bool = True )
从检查点文件加载状态字典。
timm.models.resume_checkpoint
< source >( model: Modulecheckpoint_path: stroptimizer: typing.Optional[torch.optim.Optimizer] = Noneloss_scaler: typing.Optional[typing.Any] = Nonelog_info: bool = Trueweights_only: bool = True )
从检查点恢复训练。
timm.models.save_for_hf
< source >( model: Modulesave_directory: strmodel_config: typing.Optional[dict] = Nonemodel_args: typing.Optional[dict] = Nonesafe_serialization: typing.Union[bool, typing.Literal['both']] = Falsedata_config: typing.Optional[dict] = None )
保存原生权重及其当前的模型和预处理配置。
timm.models.push_to_hf_hub
< source >( model: Modulerepo_id: strcommit_message: str = 'Add model'token: typing.Optional[str] = Nonerevision: typing.Optional[str] = Noneprivate: bool = Falsecreate_pr: bool = Falsemodel_config: typing.Optional[dict] = Nonemodel_card: typing.Optional[dict] = Nonemodel_args: typing.Optional[dict] = Nonetask_name: str = 'image-classification'safe_serialization: typing.Union[bool, typing.Literal['both']] = 'both'data_config: typing.Optional[dict] = None )
自定义模型
timm.models.register_model
< source >( fn: typing.Callable[..., typing.Any] )
一个装饰器,用于在模块的 default_cfgs 中注册模型入口函数 fn 及其任何预训练配置。
注册一个已存在的名称会覆盖之前的注册及其预训练 cfgs。
timm.models.build_model_with_cfg
< source >( model_cls: typing.Union[typing.Type[~ModelT], typing.Callable[..., ~ModelT]]variant: strpretrained: boolpretrained_cfg: typing.Optional[typing.Dict] = Nonepretrained_cfg_overlay: typing.Optional[typing.Dict] = Nonemodel_cfg: typing.Optional[typing.Any] = Nonefeature_cfg: typing.Optional[typing.Dict] = Nonepretrained_strict: bool = Truepretrained_filter_fn: typing.Optional[typing.Callable] = Nonecache_dir: typing.Union[str, pathlib.Path, NoneType] = Nonekwargs_filter: typing.Optional[typing.Tuple[str]] = Nonepretrained_model_args: typing.Optional[typing.Dict] = None**kwargs )
参数
- model_cls — 模型类
- variant — 模型变体名称
- pretrained — 加载预训练权重
- pretrained_cfg — 模型的预训练权重/任务配置
- pretrained_cfg_overlay — 将覆盖 pretrained_cfg 中对应条目的配置项
- model_cfg — 模型的架构配置
- feature_cfg — 特征提取适配器配置
- pretrained_strict — 严格加载预训练权重
- pretrained_filter_fn — 用于预训练权重的过滤函数
- cache_dir — 覆盖 Hugging Face Hub 和 Torch 检查点的模型缓存目录
- kwargs_filter — 在传递给模型之前需要过滤(移除)的 Kwargs 键
- pretrained_model_args — 描述源检查点的重建参数。
- **kwargs — 传递给模型 init 的模型参数
使用指定的 default_cfg 和可选的 model_cfg 构建模型
此辅助函数有助于构建模型,包括:
- 处理 default_cfg 及关联的预训练权重加载
- 通过可选的 model_cfg 参数,为基于配置架构规范的模型进行传递
- features_only 模型适配
- 剪枝配置 / 模型适配