timm/resnet51q.ra2_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes ResNet. Este modelo presenta un stem de 4 capas (quad) sin pooling y activaciones SiLU. Entrenado en ImageNet-1k por Ross Wightman en timm. Esta arquitectura de modelo se implementa utilizando la flexible BYOBNet (Bring-Your-Own-Blocks Network) de timm. BYOBNet permite la configuración de la disposición de bloques/etapas, disposición del stem, stride de salida (dilatación), capas de activación y norm, capas de atención espacial y por canal, y también incluye características comunes de timm en muchas otras arquitecturas, incluyendo profundidad estocástica, checkpointing de gradientes, decaimiento del LR por capa y extracción de características por etapa.

Como usar

Clasificación de Imágenes

from urllib.request import urlopen
from PIL import Image
import timm
img = Image.open(urlopen(
'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
))
model = timm.create_model('resnet51q.ra2_in1k', pretrained=True)
model = model.eval()
# obtener las transformaciones específicas del modelo (normalización, cambio de tamaño)
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)
output = model(transforms(img).unsqueeze(0)) # añadir una dimensión para formar un batch de tamaño 1
top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1) * 100, k=5)

Extracción de Mapa de Características

from urllib.request import urlopen
from PIL import Image
import timm
img = Image.open(urlopen(
'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
))
model = timm.create_model(
'resnet51q.ra2_in1k',
pretrained=True,
features_only=True,
)
model = model.eval()
# obtener las transformaciones específicas del modelo (normalización, cambio de tamaño)
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)
output = model(transforms(img).unsqueeze(0)) # añadir una dimensión para formar un batch de tamaño 1
for o in output:
    print(o.shape)

Embeddings de Imágenes

from urllib.request import urlopen
from PIL import Image
import timm
img = Image.open(urlopen(
'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
))
model = timm.create_model(
'resnet51q.ra2_in1k',
pretrained=True,
num_classes=0, # remover el clasificador nn.Linear
)
model = model.eval()
# obtener las transformaciones específicas del modelo (normalización, cambio de tamaño)
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)
output = model(transforms(img).unsqueeze(0)) # la salida es un tensor de forma (batch_size, num_features)
# o equivalentemente (sin necesidad de establecer num_classes=0)
output = model.forward_features(transforms(img).unsqueeze(0))
# la salida no está agrupada, es un tensor de forma (1, 2048, 8, 8)
output = model.forward_head(output, pre_logits=True)
# la salida es un tensor de forma (1, num_features)

Funcionalidades

Stem de 4 capas sin pooling
Activaciones SiLU
Configuración flexible con BYOBNet
Profundidad estocástica
Checkpointing de gradientes
Decaimiento del LR por capa
Extracción de características por etapa

Casos de uso

Clasificación de imágenes
Extracción de mapas de características
Generación de embeddings de imágenes