Créer 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 préciserez les couches et les blocs de couches utilisés par le modèle.
L'encodeur et la convolution transposée ont déjà été définis pour vous. Il reste à définir les blocs convolutionnels du décodeur. Vous devez fournir le bon nombre de canaux d'entrée et de sortie pour 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, pour sa part, doit être égale à la sortie de enc3. Pouvez-vous compléter toutes les tailles d'entrée et de sortie manquantes?
Cette activité fait partie du cours
Deep Learning pour les images avec PyTorch
Instructions de l’exercice
- 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 ce code d’exemple.
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)