mobilenetv2_120d.ra_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes MobileNet-v2. Entrenado en ImageNet-1k en timm utilizando la plantilla de receta descrita a continuación. Detalles de la receta: Receta RandAugment RA. Inspirado y evolucionado a partir de las recetas de RandAugment de EfficientNet, publicado como receta B en ResNet Strikes Back. Optimización RMSProp (comportamiento TF 1.0), promedio ponderado EMA. Calendario LR de paso (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('mobilenetv2_120d.ra_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)) # agregar una dimensión para una imagen única a un lote de 1

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(
'mobilenetv2_120d.ra_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)) # agregar una dimensión para una imagen única a un lote de 1

for o in output:
# imprimir la forma de cada mapa de características en la salida
# por ejemplo:
#  torch.Size([1, 24, 112, 112])
#  torch.Size([1, 32, 56, 56])
#  torch.Size([1, 40, 28, 28])
#  torch.Size([1, 112, 14, 14])
#  torch.Size([1, 384, 7, 7])

print(o.shape)

Incrustaciones 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(
'mobilenetv2_120d.ra_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 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, 1280, 7, 7)

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

Funcionalidades

Clasificación de imágenes
Extracción de mapas de características
Incrustaciones de imágenes
Comparación de modelos

Casos de uso

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