densenet161.tv_in1k

timm
Clasificación de imagen

Un modelo de clasificación de imágenes DenseNet. Entrenado en ImageNet-1k (pesos originales de torchvision).

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

# obtener las transformaciones específicas del modelo (normalización, redimensionamiento)
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)) # unbatch la imagen a un lote de 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(
'densenet161.tv_in1k',
pretrained=True,
features_only=True,
)
model = model.eval()

# obtener las transformaciones específicas del modelo (normalización, redimensionamiento)
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)) # unbatch la imagen a un lote de 1

for o in output:
# imprimir la forma de cada mapa de características en la salida
# p.ej.:
#  torch.Size([1, 96, 112, 112])
#  torch.Size([1, 384, 56, 56])
#  torch.Size([1, 768, 28, 28])
#  torch.Size([1, 2112, 14, 14])
#  torch.Size([1, 2208, 7, 7])

print(o.shape)

Incrustaciones 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(
'densenet161.tv_in1k',
pretrained=True,
num_classes=0, # eliminar classificador nn.Linear
)
model = model.eval()

# obtener las transformaciones específicas del modelo (normalización, redimensionamiento)
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 igualmente (sin necesidad de establecer num_classes=0)

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

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

Citación

@inproceedings{huang2017densely,
title={Densely Connected Convolutional Networks},
author={Huang, Gao and Liu, Zhuang and van der Maaten, Laurens and Weinberger, Kilian Q },
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2017}
}

Descargas en el último mes: 6,941

Funcionalidades

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

Casos de uso

Clasificación de imágenes
Extracción de características de imágenes
Incrustaciones de imágenes para tareas de visión por computadora