CommencerCommencer gratuitement

Construire un U-Net : définition des couches

Dans cet exercice et le suivant, vous allez construire une architecture U‑Net à partir de zéro. Ici, vous commencez par définir la méthode __init__() où vous indiquerez les couches et les blocs de couches utilisés par le modèle.

L’encodeur et les convolutions transposées sont déjà définis. Il vous reste à définir les blocs convolutionnels du décodeur. Vous devez passer le nombre approprié de canaux d’entrée et de sortie à chacun d’eux, en tenant compte des connexions de saut (skip connections).

Le premier bloc, dec1, prendra en entrée la concaténation de la sortie de upconv3 avec la sortie de enc3. La sortie de dec1, quant à elle, doit être égale à la sortie de enc3. Pouvez-vous renseigner toutes les tailles d’entrée et de sortie manquantes ?

Cet exercice fait partie du cours

Deep Learning pour l’image avec PyTorch

Afficher le cours

Instructions

  • Définissez les trois blocs convolutionnels du décodeur en passant à chacun le nombre approprié de canaux d’entrée et de sortie.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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)
Modifier et exécuter le code