跳到主要内容

在 Hugging Face 使用 timm

timm,也称为 pytorch-image-models,是一个开源的最先进 PyTorch 图像模型、预训练权重以及用于训练、推理和验证的实用脚本集合。

本文档专注于 Hugging Face Hub 中的 timm 功能,而不是 timm 库本身。有关 timm 库的详细信息,请访问其文档

你可以使用模型页面左侧的筛选器在 Hub 上找到许多 timm 模型。

Hub 上的所有模型都配备了几个有用的功能:

  1. 自动生成的模型卡片,模型作者可以用关于其模型的信息完成它。
  2. 元数据标签帮助用户发现相关的 timm 模型。
  3. 一个交互式小部件,你可以直接在浏览器中使用模型。
  4. 一个推理 API,允许用户进行推理请求。

从 Hub 使用现有模型

只要安装了 timm,就可以用一行代码加载 Hugging Face Hub 上的任何 timm 模型!一旦你从 Hub 选择了模型,将模型 ID 加上 hf-hub: 前缀传递给 timmcreate_model 方法以下载并实例化模型。

import timm

# Loading https://huggingface.co/timm/eca_nfnet_l0
model = timm.create_model("hf-hub:timm/eca_nfnet_l0", pretrained=True)

如果你想查看如何加载特定模型,可以点击在 timm 中使用,你将获得一个可用的代码片段来加载它!

在 timm 中使用模型在 timm 中使用模型
在 timm 中使用模型在 timm 中使用模型

推理

以下代码片段展示了如何对从 Hub 加载的 timm 模型执行推理:

import timm
import torch
from PIL import Image
from timm.data import resolve_data_config
from timm.data.transforms_factory import create_transform

# Load from Hub 🔥
model = timm.create_model(
'hf-hub:nateraw/resnet50-oxford-iiit-pet',
pretrained=True
)

# Set model to eval mode for inference
model.eval()

# Create Transform
transform = create_transform(**resolve_data_config(model.pretrained_cfg, model=model))

# Get the labels from the model config
labels = model.pretrained_cfg['label_names']
top_k = min(len(labels), 5)

# Use your own image file here...
image = Image.open('boxer.jpg').convert('RGB')

# Process PIL image with transforms and add a batch dimension
x = transform(image).unsqueeze(0)

# Pass inputs to model forward function to get outputs
out = model(x)

# Apply softmax to get predicted probabilities for each class
probabilities = torch.nn.functional.softmax(out[0], dim=0)

# Grab the values and indices of top 5 predicted classes
values, indices = torch.topk(probabilities, top_k)

# Prepare a nice dict of top k predictions
predictions = [
{"label": labels[i], "score": v.item()}
for i, v in zip(indices, values)
]
print(predictions)

这应该会给你一个预测列表,如下所示:

[
{'label': 'american_pit_bull_terrier', 'score': 0.9999998807907104},
{'label': 'staffordshire_bull_terrier', 'score': 1.0000000149011612e-07},
{'label': 'miniature_pinscher', 'score': 1.0000000149011612e-07},
{'label': 'chihuahua', 'score': 1.0000000149011612e-07},
{'label': 'beagle', 'score': 1.0000000149011612e-07}
]

分享你的模型

你可以直接将 timm 模型分享到 Hugging Face Hub。这会将模型的新版本发布到 Hugging Face Hub,如果模型仓库尚不存在,它将为你创建一个。

在推送模型之前,请确保你已登录 Hugging Face:

python -m pip install huggingface_hub
hf auth login

或者,如果你更喜欢在 Jupyter 或 Colaboratory 笔记本中工作,一旦安装了 huggingface_hub,你可以使用以下方式登录:

from huggingface_hub import notebook_login
notebook_login()

然后,使用 push_to_hf_hub 方法推送你的模型:

import timm

# Build or load a model, e.g. timm's pretrained resnet18
model = timm.create_model('resnet18', pretrained=True, num_classes=4)

###########################
# [Fine tune your model...]
###########################

# Push it to the 🤗 Hub
timm.models.hub.push_to_hf_hub(
model,
'resnet18-random-classifier',
model_config={'labels': ['a', 'b', 'c', 'd']}
)

# Load your model from the Hub
model_reloaded = timm.create_model(
'hf-hub:<your-username>/resnet18-random-classifier',
pretrained=True
)

推理小部件和 API

Hub 上的所有 timm 模型都自动配备了推理小部件,下面展示了 nateraw/timm-resnet50-beans 的示例。此外,timm 模型可通过推理 API 使用,你可以通过 HTTP 使用 cURL、Python 的 requests 库或你喜欢的网络请求方法访问它。

在 timm 中使用模型在 timm 中使用模型
curl https://api-inference.huggingface.co/models/nateraw/timm-resnet50-beans \
-X POST \
--data-binary '@beans.jpeg' \
-H "Authorization: Bearer {$HF_API_TOKEN}"
# [{"label":"angular_leaf_spot","score":0.9845947027206421},{"label":"bean_rust","score":0.01368315052241087},{"label":"healthy","score":0.001722085871733725}]

其他资源