Hub documentation

Использование timm на Hugging Face

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Использование timm на Hugging Face

timm, также известный как pytorch-image-models, — это открытая коллекция передовых моделей изображений PyTorch, предобученных весов и вспомогательных скриптов для обучения, инференса и валидации.

Эта документация посвящена функциональности timm в Hugging Face Hub, а не самой библиотеке timm. Подробную информацию о библиотеке timm можно найти в её документации.

На странице моделей с помощью фильтров слева можно найти множество моделей timm на Hub.

Все модели на Hub обладают рядом полезных функций:

  1. Автоматически сгенерированная карточка модели, которую авторы могут дополнить информацией о своей модели.
  2. Метки метаданных помогают пользователям находить подходящие модели timm.
  3. Интерактивный виджет interactive widget, который позволяет работать с моделью прямо в браузере.
  4. Поставщик инференса, который позволяет пользователям отправлять запросы на инференс.

Использование существующих моделей из Hub

Любую модель timm из Hugging Face Hub можно загрузить одной строкой кода, если у вас установлен timm. После выбора модели на Hub передайте её идентификатор с префиксом hf-hub: в метод create_model библиотеки timm, чтобы скачать и инициализировать модель.

import timm

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

Если вы хотите узнать, как загрузить конкретную модель, нажмите Use in timm — вам будет предоставлен рабочий фрагмент кода для её загрузки!

Вывод

Ниже приведён фрагмент кода, показывающий, как выполнить инференс на модели timm, загруженной из Hub:

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
)

Дополнительные ресурсы

Update on GitHub