resnet200d.ra2_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes ResNet-D. Este modelo presenta: - Activaciones ReLU - Tallo de 3 capas de convoluciones 3x3 con agrupamiento - Downsample de atajo de convolución 1x1 + agrupamiento promedio 2x2 Entrenado en ImageNet-1k en timm usando el template de receta descrito a continuación. Detalles de la receta: - Receta RandAugment RA2, inspirado y evolucionado de las recetas de RandAugment EfficientNet. Publicado como receta B en ResNet Strikes Back. - Optimización RMSProp (comportamiento de TF 1.0), promediado de pesos EMA - Programación de LR en pasos (decadencia exponencial con escalones) con calentamiento.

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('resnet200d.ra2_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)) # insertar imagen única en lote de 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(
'resnet200d.ra2_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)) # insertar imagen única en lote de 1

for o in output:
# imprimir la forma de cada mapa de características en salida
# ej.:
#  torch.Size([1, 64, 128, 128])
#  torch.Size([1, 256, 64, 64])
#  torch.Size([1, 512, 32, 32])
#  torch.Size([1, 1024, 16, 16])
#  torch.Size([1, 2048, 8, 8])

print(o.shape)

Embedding 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(
'resnet200d.ra2_in1k',
pretrained=True,
num_classes=0, # eliminar 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)) # la salida es un tensor en forma de (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

Activaciones ReLU
Tallo de 3 capas de convoluciones 3x3 con agrupamiento
Downsample de atajo de convolución 1x1 + agrupamiento promedio 2x2
Receta RandAugment RA2
Optimización RMSProp (comportamiento de TF 1.0)
Programación de LR en pasos (decadencia exponencial con escalones) con calentamiento

Casos de uso

Clasificación de imágenes
Extracción de mapa de características
Embeddings de imágenes
Comparación de modelos