Hub documentation

Usando o timm no Hugging Face

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Usando o timm no Hugging Face

timm, também conhecido como pytorch-image-models, é uma coleção de código aberto de modelos de imagem PyTorch de última geração, pesos pré-treinados e scripts utilitários para treinamento, inferência e validação.

Esta documentação foca na funcionalidade do timm no Hugging Face Hub, em vez da própria biblioteca timm. Para informações detalhadas sobre a biblioteca timm, visite sua documentação.

Você pode encontrar vários modelos timm no Hub usando os filtros à esquerda da página de modelos.

Todos os modelos no Hub vêm com vários recursos úteis:

  1. Um cartão de modelo gerado automaticamente, que os autores do modelo podem completar com informações sobre o modelo.
  2. As tags de metadados ajudam os usuários a descobrirem os modelos timm relevantes.
  3. Um widget interativo que você pode usar para interagir com o modelo diretamente no navegador.
  4. Um Inference Providers que permite que os usuários façam solicitações de inferência.

Usando modelos existentes do Hub

Qualquer modelo timm do Hugging Face Hub pode ser carregado com uma única linha de código, desde que você tenha o timm instalado! Depois de selecionar um modelo no Hub, passe o ID do modelo prefixado com hf-hub: para o método create_model do timm para baixar e instanciar o modelo.

import timm

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

Se você quiser ver como carregar um modelo específico, clique em Use in timm e você receberá um trecho de código funcional para carregá-lo!

Inferência

O trecho abaixo mostra como você pode executar inferência em um modelo timm carregado do 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)

Isso deve resultar em uma lista de previsões, como esta:

[
    {'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}
]

Compartilhando seus modelos

Você pode compartilhar seus modelos timm diretamente no Hugging Face Hub. Isso publicará uma nova versão do seu modelo no Hugging Face Hub, criando um repositório de modelo para você, caso ainda não exista.

Antes de enviar um modelo, verifique se você fez login no Hugging Face:

python -m pip install huggingface_hub
hf auth login

Alternativamente, se você preferir trabalhar a partir de um notebook Jupyter ou Colaboratory, depois de instalar o huggingface_hub, você pode fazer login com:

from huggingface_hub import notebook_login
notebook_login()

Em seguida, envie seu modelo usando o método 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
)

Recursos adicionais

Update on GitHub