timm/repvgg_b3.rvgg_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes RepVGG. Entrenado en ImageNet-1k por los autores del artículo. Esta arquitectura de modelo se implementa utilizando la red flexible BYOBNet (Bring-Your-Own-Blocks Network) de timm. BYOBNet permite la configuración de: diseño de bloques/etapas, disposición del tallo, salida con dilatación, capas de activación y normalización, capas de atención espacial y por canal, entre otras características comunes a muchas otras arquitecturas de timm, incluyendo: profundidad estocástica, punto de control de gradiente, disminución de la tasa de aprendizaje por capa, 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('repvgg_b3.rvgg_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 una dimensión para lote de tamaño 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(
'repvgg_b3.rvgg_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 una dimensión para lote de tamaño 1

for o in output:
# imprimir forma de cada mapa de características en la salida
# por ejemplo:
# torch.Size([1, 64, 112, 112])
# torch.Size([1, 192, 56, 56])
# torch.Size([1, 384, 28, 28])
# torch.Size([1, 768, 14, 14])
# torch.Size([1, 2560, 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(
'repvgg_b3.rvgg_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 de forma (batch_size, num_features)

# o de manera equivalente (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, 2560, 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
Embeddings de imágenes
Configuración de diseño de bloques/etapas
Configuración de disposición del tallo
Configuración de salida con dilatación
Configuración de capas de activación y normalización
Configuración de capas de atención espacial y por canal
Profundidad estocástica
Punto de control de gradiente
Disminución de la tasa de aprendizaje por capa
Extracción de características por etapa

Casos de uso

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