timm/maxvit_tiny_rw_224.sw_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes MaxViT específico de timm. Entrenado en timm en ImageNet-1k por Ross Wightman. El entrenamiento en ImageNet-1k se realizó en TPUs gracias al apoyo del programa TRC.

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

# obtener 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 dimensión batch

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

Extracción de mapas 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(
'maxvit_tiny_rw_224.sw_in1k',
pretrained=True,
features_only=True,
)
model = model.eval()

# obtener 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 dimensión batch

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(
'maxvit_tiny_rw_224.sw_in1k',
pretrained=True,
num_classes=0, # eliminar clasificador nn.Linear
)
model = model.eval()

# obtener 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)) # el output es un tensor (batch_size, num_features)

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

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

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

Funcionalidades

Bloques uniformes en todas las etapas, cada uno contiene un bloque de convolución MBConv (separable en profundidad) seguido por dos bloques de autoatención con diferentes esquemas de partición (ventana seguida de cuadrícula).
Utiliza bloques ConvNeXt en lugar de bloques MBConv en MaxViT.
Normas de normalización LayerNorm (sin BatchNorm).

Casos de uso

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