timm/gcresnet50t.ra2_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes GC-ResNet (ResNet con atención 'Global Context'). Este modelo cuenta con un esquema de tres capas sin agrupamiento. Entrenado en ImageNet-1k por Ross Wightman en timm. La arquitectura del modelo se implementa utilizando la red flexible BYOBNet (Bring-Your-Own-Blocks Network) de timm. BYOBNet permite la configuración de la disposición de bloques/etapas, la disposición de esquema, la longitud de salida (dilación), las capas de activación y normalización, y las capas de atención de canal y espacial/autónoma, además de incluir características comunes a muchas otras arquitecturas de timm como profundidad estocástica, verificación de gradientes, 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('gcresnet50t.ra2_in1k', pretrained=True)
model = model.eval()

# obtiene las 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ñade una dimensión al lote de una imagen

top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1) * 100, k=5)

Extracción de 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(
'gcresnet50t.ra2_in1k',
pretrained=True,
features_only=True,
)
model = model.eval()

# obtiene las 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ñade una dimensión al lote de una imagen

for o in output:
# imprime la forma de cada mapa de características en la salida
# e.g.:
#  torch.Size([1, 32, 128, 128])
#  torch.Size([1, 256, 64, 64])
#  torch.Size([1, 512, 32, 32])
#  torch.Size([1, 1024, 16, 16])
#  torch.Size([1, 2048, 8, 8])

print(o.shape)

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

# obtiene las 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)) # la salida es un tensor con forma (batch_size, num_features)

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

output = model.forward_features(transforms(img).unsqueeze(0))
# la salida es no agrupada, un tensor con forma (1, 2048, 8, 8)

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

Funcionalidades

Disposición de bloques/etapas configurable
Disposición de esquema configurable
Longitud de salida (dilación) configurable
Capas de activación y normalización configurables
Capas de atención de canal y espacial/autónoma configurables
Profundidad estocástica
Verificación de gradientes
Decaimiento de LR por capa
Extracción de características por etapa

Casos de uso

Clasificación de imágenes
Extracción de mapa de características
Embedding de imágenes