cs3edgenet_x.c2_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes CS3-EdgeNet (atención de canal Cross-Stage-Partial con 3 convoluciones y Squeeze-and-Excitation). Los modelos EdgeNet son similares a DarkNet pero utilizan un bloque residual de 3x3 + 1x1 similar a MobileNet-V1 en lugar de un bloque de 1x1 + 3x3. Entrenado en ImageNet-1k en timm utilizando la plantilla de receta descrita a continuación. Detalles de la receta: Basado en recetas de ResNet Strikes Back sin repeat-aug y con un mixup más fuerte, optimizador SGD (con Nesterov) y AGC (recorte de gradiente adaptativo). Programación de LR cosenoidal con calentamiento previo.

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

# obtener transformaciones específicas del modelo (normalización, redimensionar)
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 imagen única a un 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(
'cs3edgenet_x.c2_in1k',
pretrained=True,
features_only=True,
)
model = model.eval()

# obtener transformaciones específicas del modelo (normalización, redimensionar)
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 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, 80, 128, 128])
#  torch.Size([1, 160, 64, 64])
#  torch.Size([1, 320, 32, 32])
#  torch.Size([1, 640, 16, 16])
#  torch.Size([1, 1280, 8, 8])

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

# obtener transformaciones específicas del modelo (normalización, redimensionar)
data_config = timm.data.resolve_model_data_config(model)
transforms = timm.data.create_transform(**data_config, is_training=False)

# la salida es un tensor de forma (batch_size, num_features)
output = model(transforms(img).unsqueeze(0))

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

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

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 del mapa de características
Embeddings de imágenes

Casos de uso

Clasificación de imágenes
Extracción de características de imágenes para otros procesos de análisis
Generación de embeddings de imágenes para búsquedas o agrupamientos