regnetz_c16.ra3_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes RegNetZ. Entrenado en ImageNet-1k por Ross Wightman en timm. Estos modelos RegNetZ B / C / D exploran diferentes configuraciones de tamaño de grupo y capas y no siguieron ninguna descripción en artículos. Al igual que EfficientNets, esta arquitectura utiliza salidas de bloque lineales (no activadas) y un cuello de botella invertido (expansión del bloqueo intermedio). Este modelo está implementado utilizando la flexible BYOBNet (Bring-Your-Own-Blocks Network) de timm.

Como usar

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('regnetz_c16.ra3_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)) # convertir una sola imagen en un lote de 1

top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1) * 100, k=5)
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(
'regnetz_c16.ra3_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)) # convertir una sola imagen en un lote de 1

for o in output:
# imprimir forma de cada mapa de características en la salida
# por ejemplo:
#  torch.Size([1, 32, 128, 128])
#  torch.Size([1, 48, 64, 64])
#  torch.Size([1, 96, 32, 32])
#  torch.Size([1, 192, 16, 16])
#  torch.Size([1, 1536, 8, 8])

print(o.shape)
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(
'regnetz_c16.ra3_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 con forma de (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 forma de (1, 1536, 8, 8)

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

Funcionalidades

B16: ~1.5GF @ 256x256 con un ancho de grupo de 16. Tallo de una sola capa.
C16: ~2.5GF @ 256x256 con un ancho de grupo de 16. Tallo de una sola capa.
D32: ~6GF @ 256x256 con un ancho de grupo de 32. Tallo escalonado de 3 capas, sin agrupamiento.
D8: ~4GF @ 256x256 con un ancho de grupo de 8. Tallo escalonado de 3 capas, sin agrupamiento.
E8: ~10GF @ 256x256 con un ancho de grupo de 8. Tallo escalonado de 3 capas, sin agrupamiento.
BYOBNet permite la configuración de diseño de bloques / etapas, diseño de tallo, dilatación de salida, capas de activación y normalización, y capas espaciales / de auto-atención.
Profundidad estocástica
Punto de control de gradiente
Decaimiento del LR por capas
Extracción de características por etapa

Casos de uso

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