mobilenetv3_small_050.lamb_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes MobileNet-v3. Entrenado en ImageNet-1k en timm usando la plantilla de recetas descrita a continuación. Detalles de la receta: Una receta de optimizador LAMB similar a ResNet Strikes Back A2 pero 50% más larga con promediado de pesos EMA, sin CutMix. Optimizador RMSProp (comportamiento de TF 1.0), promediado de pesos EMA. Horario de LR de paso (decaimiento exponencial con escalón) 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('mobilenetv3_small_050.lamb_in1k', pretrained=True)
model = model.eval()

# obtener las 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 una imagen única en 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('mobilenetv3_small_050.lamb_in1k', pretrained=True, features_only=True)
model = model.eval()

# obtener las 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 una imagen única en un lote de 1

for o in output:
    # imprimir la forma de cada mapa de características en la salida
    # ej.:
    #  torch.Size([1, 16, 112, 112])
    #  torch.Size([1, 8, 56, 56])
    #  torch.Size([1, 16, 28, 28])
    #  torch.Size([1, 24, 14, 14])
    #  torch.Size([1, 288, 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('mobilenetv3_small_050.lamb_in1k', pretrained=True, num_classes=0) # eliminar clasificador nn.Linear
model = model.eval()

# obtener las 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 la forma (batch_size, num_features)

# o de manera equivalente (sin necesidad de establecer num_classes=0)

output = model.forward_features(transforms(img).unsqueeze(0))
# la salida no está agrupada, es un tensor con la forma (1, 288, 7, 7)

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

Funcionalidades

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

Casos de uso

Clasificación de imágenes en aplicaciones móviles
Extracción de características para tareas de visión por computadora
Generación de embeddings para comparar imágenes