gernet_m.idstcv_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes GENet (GPU-Efficient-Networks). Entrenado en ImageNet-1k por los autores del artículo. Esta arquitectura de modelo está implementada usando la flexible BYOBNet de timm (Bring-Your-Own-Blocks Network), que permite la configuración de: diseño de bloque/etapa, diseño de vástago, paso de salida (dilatación), capas de activación y normalización, capas de canales y atención espacial/autónoma. También incluye características comunes a muchas otras arquitecturas de timm, como: profundidad estocástica, punto de control de gradiente, decaimiento de LR por capa y extracción de características por etapa.

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('gernet_m.idstcv_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 el tamaño del lote

# obtener las 5 principales probabilidades y sus índices de clase
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('gernet_m.idstcv_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 el tamaño del lote

for o in output:
    # imprimir la forma de cada mapa de características en el output
    print(o.shape)

Representaciones 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('gernet_m.idstcv_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 de forma (batch_size, num_features)

# o equivalente (sin necesidad de establecer num_classes=0)
output = model.forward_features(transforms(img).unsqueeze(0))
# el output es sin agrupar, un tensor de forma (1, 2560, 7, 7)

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

Funcionalidades

Configuración de diseño de bloque/etapa
Configuración de diseño de vástago
Configuración del paso de salida (dilatación)
Capas de activación y normalización
Capas de canales y atención espacial/autónoma
Profundidad estocástica
Punto de control de gradiente
Decaimiento de LR por capa
Extracción de características por etapa

Casos de uso

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