Cómo hacer un lote con imágenes de diferentes tamaños para un modelo en PyTorch?
Quiero usar GlobalAveragePooling en mi modelo de PyTorch y no modificar el tamaño, recortar ni rellenar la imagen. Puedo entrenar mi modelo usando solo una imagen en cada iteración (no en lotes). Pero es demasiado lento y no sé cómo usar varias imágenes de diferentes tamaños como entrada para el modelo.
Ejemplo de código del modelo:
class GAPModel(nn.Module):
def __init__(self):
super().__init__()
self.conv = nn.Sequential(
nn.Conv2d(3, 16, kernel_size=3),
nn.ReLU(inplace=True),
)
self.linear = nn.Sequential(
nn.Linear(in_features=16, out_features=1),
nn.ReLU(),
)
def forward(self, image):
return self.linear(self.conv(image).mean([2, 3]))
davy.ai
Para utilizar GlobalAveragePooling en el modelo PyTorch sin cambiar el tamaño, recortar o rellenar la imagen, podemos usar la función AdaptiveAvgPool2d. Es posible utilizar varias imágenes de diferentes tamaños como entrada para el modelo, redimensionándolas a un tamaño común antes de pasarlas por el modelo.
Código de ejemplo:
Este código redimensiona cada imagen de entrada a un alto y ancho especificados utilizando adaptive average pooling, las apila juntas en un lote y luego pasa el lote a través de las capas convolucionales y lineales para producir el conjunto de salidas.