ComenzarEmpieza gratis

Construyendo una U-Net: definición de capas

En este ejercicio y el siguiente, vas a construir una arquitectura U-Net desde cero. Aquí empezarás definiendo el método __init__(), donde crearás las capas y los bloques de capas que usará el modelo.

El codificador y las convoluciones transpuestas ya están definidos. Lo que falta son los bloques de convolución del decodificador. Debes pasar el número adecuado de canales de entrada y salida a cada uno de ellos, teniendo en cuenta las conexiones de salto (skip connections).

El primer bloque, dec1, tomará como entrada la concatenación de la salida de upconv3 con la salida de enc3. A su vez, la salida de dec1 debe ser igual a la salida de enc3. ¿Puedes completar todos los tamaños de entrada y salida que faltan?

Este ejercicio forma parte del curso

Deep Learning para imágenes con PyTorch

Ver curso

Instrucciones del ejercicio

  • Define los tres bloques de convolución en el decodificador pasando el número adecuado de canales de entrada y salida a cada uno de ellos.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

class UNet(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(UNet, self).__init__()

        self.enc1 = self.conv_block(in_channels, 64)
        self.enc2 = self.conv_block(64, 128)
        self.enc3 = self.conv_block(128, 256)
        self.enc4 = self.conv_block(256, 512)

        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)

        self.upconv3 = nn.ConvTranspose2d(512, 256, kernel_size=2, stride=2)
        self.upconv2 = nn.ConvTranspose2d(256, 128, kernel_size=2, stride=2)
        self.upconv1 = nn.ConvTranspose2d(128, 64, kernel_size=2, stride=2)
        
        # Define the decoder blocks
        self.dec1 = self.conv_block(____, ____)
        self.dec2 = self.conv_block(____, ____)
        self.dec3 = self.conv_block(____, ____)

        self.out = nn.Conv2d(64, out_channels, kernel_size=1)
Editar y ejecutar código