timm/resnet18.a2_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes ResNet-B. Este modelo incluye activaciones ReLU, una capa única de convolución 7x7 con agrupación, y un atajo de muestra descendente de convolución 1x1. Entrenado en ImageNet-1k utilizando timm siguiendo la receta descrita.

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

top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1) * 100, k=5)

Extracción del 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('resnet18.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)) # redimensionar imagen única en lote de 1 

for o in output:
    print(o.shape)

Integració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('resnet18.a2_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 conformado por (batch_size, num_features) 

# equivalencia sin necesidad de establecer num_classes=0

output = model.forward_features(transforms(img).unsqueeze(0)) # la salida es tensor no agrupado (1, 512, 7, 7)

output = model.forward_head(output, pre_logits=True) # la salida es un tensor conformado por (1, num_features)

Funcionalidades

Activaciones ReLU
Capa única de convolución 7x7 con agrupación
Ataque de muestra descendente de convolución 1x1
A2 receta de ResNet Strikes Back
Optimizador LAMB con pérdida BCE
Programación LR cosenoide con calentamiento

Casos de uso

Clasificación de Imágenes
Extracción del Mapa de Características
Integración de Imágenes