Construire un réseau U-Net : définitions 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 d'__init__()
, dans laquelle vous définissez les couches et les blocs de couches que le modèle utilisera.
L'encodeur et la convolution transposée ont déjà été définis pour vous. Il ne reste plus que les blocs convolutifs du décodeur. Vous devez transmettre le nombre approprié de canaux d'entrée et de sortie à chacun d'entre eux, en tenant compte des connexions ignorées.
Le premier bloc, dec1
, prendra en entrée la concaténation de la sortie upconv3
avec la sortie enc3
. La sortie « dec1
» doit être identique à la sortie « enc3
». Pourriez-vous compléter toutes les tailles d'entrée et de sortie manquantes ?
Cet exercice fait partie du cours
Deep learning pour les images avec PyTorch
Instructions
- Définissez les trois blocs convolutifs dans le décodeur en transmettant le nombre approprié de canaux d'entrée et de sortie à chacun d'eux.
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)