timm/resnet50.a2_in1k

timm
Clasificación de imagen

Modelo de clasificación de imágenes ResNet-B. Este modelo cuenta con activaciones ReLU, una capa de convolución 7x7 con pooling y un atajo de convolución 1x1 para muestreo descendente. Entrenado en ImageNet-1k usando plantillas de recetas en timm.

Como usar

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('resnet50.a2_in1k', pretrained=True)
model = model.eval()

# obtener transformaciones específicas del modelo (normalización, redimensionamiento)
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)) # convertir imagen única en lote de 1

top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1) * 100, k=5)
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(
'resnet50.a2_in1k',
pretrained=True,
features_only=True,
)
model = model.eval()

# obtener transformaciones específicas del modelo (normalización, redimensionamiento)
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)) # convertir imagen única en lote de 1

for o in output:
# imprimir la forma de cada mapa de características en el output
# por ejemplo:
#  torch.Size([1, 64, 112, 112])
#  torch.Size([1, 256, 56, 56])
#  torch.Size([1, 512, 28, 28])
#  torch.Size([1, 1024, 14, 14])
#  torch.Size([1, 2048, 7, 7])

print(o.shape)
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(
'resnet50.a2_in1k',
pretrained=True,
num_classes=0, # eliminar el clasificador nn.Linear
)
model = model.eval()

# obtener transformaciones específicas del modelo (normalización, redimensionamiento)
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)) # output es un tensor con forma (batch_size, num_features)

# o equivalentemente (sin necesidad de establecer num_classes=0)

output = model.forward_features(transforms(img).unsqueeze(0))
# el output no está agrupado, es un tensor con forma (1, 2048, 7, 7)

output = model.forward_head(output, pre_logits=True)
# el output es un tensor con forma (1, num_features)

Funcionalidades

Activaciones ReLU
Capa de convolución 7x7 con pooling
Atajo de convolución 1x1 para muestreo descendente

Casos de uso

Clasificación de imágenes
Extracción de mapas de características
Extracción de incrustaciones de imágenes (embeddings)