huggingface/pytorch-image-models

The 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

什么是 PyTorch Image Models (timm)?

timm 是一个构建在 PyTorch 之上的即用型计算机视觉模型库。它包含:

  • 数百种最先进的图像架构 – 从经典的 ConvNets(ResNet、EfficientNet、MobileNet)到现代的 Vision Transformers(ViT、EVA、BEiT、ConvNeXt 等)。
  • 预训练权重 – 大多数模型都提供预训练权重,通常是在 ImageNet-1k 上训练的,因此您可以立即用于推理或微调。
  • 工具代码 – 层、优化器、学习率调度器、数据加载器、增强管道,以及参考的训练/验证脚本,让您能以最少的设置重现已发表的结果。
  • 训练辅助工具 – 用于超参数扫描的新 sweep.py、支持恢复、多 GPU 运行、多标签分类、自定义损失函数等的灵活 train.py。

简而言之,timm 是研究人员和工程师的一站式商店,他们需要各种图像模型,而无需从头开始重新实现每个架构。


谁会觉得它有用?

对象 重要性
机器学习研究人员 在大型 SOTA 视觉模型目录上快速原型化新想法,并比较结果。
实践者/工程师 通过单一导入将预训练模型拉入生产管道,然后在自定义数据集上微调。
学生/爱好者 通过阅读干净、文档完善的 PyTorch 代码来学习现代视觉架构。
基准测试团队 使用提供的训练脚本和基准 CSV 来测量不同 GPU 上的速度和准确度。

核心功能(如 README 所述)

功能 详细说明
模型动物园 超过 300 种架构,每种都有特定变体的预训练权重。包括 ConvNets、Transformers、混合模型,以及像 CPUBone 这类用于低功耗设备的利基主干网络。
训练脚本 train.py 和 validate.py 支持恢复、epoch 停止、里程碑检查点、YAML 配置验证、多标签任务、自定义损失函数和混合精度。
超参数扫描 新的 sweep.py 可对任何 train.py 参数执行网格或随机搜索,将任务分发到本地 GPU,并可恢复中断的扫描。
优化器和调度器 更新了 RMSpropTF、LaProp、LAMB、LARS、AdaBelief、NovoGrad、Muon 等的实现,以及 warmup-stable-decay (WSD) 学习率调度器。
数据工具 灵活的图像数据集、多标签支持、Mixup/CutMix、AugMix,以及自动处理非方形或单通道图像。
模型调整大小 set_input_size() 让大多数模型能即时适应不同的图像分辨率,并对窗口化 Vision Transformers 有特殊处理。
导出与推理 ONNX 导出兼容性、inference.py 自动输入大小选择,以及支持 Torch-compile 和 CUDA graphs。
文档 模型 API 页面、训练指南,以及精选的 PyTorch 资源列表。
许可与引用 每个模型的明确许可信息,以及如何引用此库的说明。

如何开始(快速入门步骤)

  1. 安装
    pip install timm
    
  2. 加载模型(例如,预训练的 EfficientNet-B0)
    import timm
    model = timm.create_model('efficientnet_b0', pretrained=True)
    model.eval()
    
  3. 执行推理
    from torchvision import transforms
    from PIL import Image
    
    preprocess = transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize(mean=[0.485, 0.456, 0.406],
                             std=[0.229, 0.224, 0.225]),
    ])
    
    img = Image.open('my_image.jpg')
    input_tensor = preprocess(img).unsqueeze(0)  # batch dim
    with torch.no_grad():
        logits = model(input_tensor)
    
  4. 微调 – 使用提供的 train.py 脚本,指向您的数据集,并可选择执行扫描:
    python train.py --model efficientnet_b0 --data-dir /path/to/data --epochs 30
    python sweep.py --config my_sweep.yaml
    

何时考虑替代方案

  • 如果您需要非视觉模型(LLM、音频、强化学习代理),timm 不涵盖这些领域。
  • 对于超大规模训练(数十亿张图像),您可能需要一个专门的分布式训练框架(例如 DeepSpeed、Lightning),它可以与 timm 集成,但提供额外的扩展功能。
  • 如果您需要设备端推理(移动设备/嵌入式),请查看像 CPUBone 或 MobileNet-V2 这类轻量级主干网络,但您可能仍需要将模型转换为 ONNX/TFLite。

TL;DR – timm 是一个全面、积极维护的图像模型和训练工具集合,适用于 PyTorch,非常适合任何想要实验或部署最先进计算机视觉架构的人。

相关

  • Dispatch
  • Dispatch
  • 项目
  • 项目
  • 项目