Aan de slagGa gratis aan de slag

Een U-Net bouwen: laagdefinities

In deze en de volgende oefening bouw je een U-Net-architectuur vanaf nul. Hier begin je met het definiëren van de __init__()-methode, waarin je lagen en blokken van lagen definieert die het model zal gebruiken.

De encoder en getransponeerde convolutie zijn al voor je gedefinieerd. Wat overblijft zijn de convolutionele blokken van de decoder. Je moet het juiste aantal input- en outputkanalen aan elk van hen doorgeven, met inachtneming van de skip-connections.

Het eerste blok, dec1, neemt als input de concatenatie van de output van upconv3 met de output van enc3. De output van dec1 moet op zijn beurt gelijk zijn aan de output van enc3. Kun je alle ontbrekende input- en outputgroottes invullen?

Deze oefening maakt deel uit van de cursus

Deep Learning voor afbeeldingen met PyTorch

Cursus bekijken

Oefeninstructies

  • Definieer de drie convolutionele blokken in de decoder door het juiste aantal input- en outputkanalen aan elk van hen door te geven.

Praktische interactieve oefening

Probeer deze oefening eens door deze voorbeeldcode in te vullen.

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)
Code bewerken en uitvoeren