ÎncepețiÎncepe gratuit

Construirea unui U-Net: definirea straturilor

În acest exercițiu și în cel următor, vei construi o arhitectură U-Net de la zero. Aici începi prin a defini metoda __init__(), unde vei specifica straturile și blocurile de straturi pe care le va folosi modelul.

Encoderului și convoluțiile transpuse au fost deja definite pentru tine. Ce mai rămâne sunt blocurile convoluționale ale decoderului. Trebuie să transmiți numărul potrivit de canale de intrare și de ieșire pentru fiecare dintre ele, ținând cont de conexiunile de tip skip.

Primul bloc, dec1, va primi ca intrare concatenarea ieșirii upconv3 cu ieșirea enc3. La rândul său, ieșirea dec1 ar trebui să fie egală cu ieșirea enc3. Poți completa toate dimensiunile de intrare și ieșire lipsă?

Acest exercițiu face parte din cursul

Deep Learning pentru imagini cu PyTorch

Vezi cursul

Instrucțiuni pentru exercițiu

  • Definește cele trei blocuri convoluționale din decoder, transmițând numărul potrivit de canale de intrare și de ieșire pentru fiecare dintre ele.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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)
Editează și rulează codul