timm/mobilenetv2_140.ra_in1k

timm
Clasificación de imagen

Un modelo de MobileNet-v2 para clasificación de imágenes. Entrenado en ImageNet-1k en timm usando una plantilla de receta específica. Detalles de la receta: Receta RandAugment RA, inspirada y evolucionada de las recetas RandAugment de EfficientNet, publicada como receta B en ResNet Strikes Back. Optimización de RMSProp (comportamiento de TF 1.0) y promedio de pesos de EMA. Programación de tasa de aprendizaje escalonada (decaimiento exponencial) 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_140.ra_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)) # unsqueeze para 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(
'mobilenetv2_140.ra_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)) # unsqueeze para imagen única en lote de 1

for o in output:
    # imprimir forma de cada mapa de características en la salida
    # e.g.:
    # torch.Size([1, 24, 112, 112])
    # torch.Size([1, 32, 56, 56])
    # torch.Size([1, 48, 28, 28])
    # torch.Size([1, 136, 14, 14])
    # torch.Size([1, 448, 7, 7])

    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(
'mobilenetv2_140.ra_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)) # la salida es un tensor con forma (batch_size, num_features)

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

output = model.forward_features(transforms(img).unsqueeze(0))
# la salida es sin pool, un tensor con forma (1, 1792, 7, 7)

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

Funcionalidades

Modelo de clasificación de imágenes / backbone de características
Parámetros (M): 6.1
GMACs: 0.6
Activaciones (M): 9.6
Tamaño de la imagen: 224 x 224
Receta RandAugment RA
Optimización RMSProp (comportamiento de TF 1.0)
Promedio de pesos EMA
Programación de tasa de aprendizaje escalonada con calentamiento

Casos de uso

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