MulaiMulai sekarang secara gratis

Membangun U-Net: definisi lapisan

Dalam latihan ini dan berikutnya, Anda akan membangun arsitektur U-Net dari awal. Di sini, Anda mulai dengan mendefinisikan metode __init__() tempat Anda akan mendefinisikan lapisan dan blok lapisan yang akan digunakan model.

Encoder dan konvolusi transpos sudah didefinisikan untuk Anda. Yang tersisa adalah blok konvolusi dari decoder. Anda perlu meneruskan jumlah kanal masukan dan keluaran yang sesuai ke masing-masing blok, dengan mempertimbangkan skip connection.

Blok pertama, dec1, akan menerima sebagai masukan penggabungan keluaran upconv3 dengan keluaran enc3. Keluaran dec1, pada gilirannya, harus sama dengan keluaran enc3. Dapatkah Anda melengkapi semua ukuran masukan dan keluaran yang hilang?

Latihan ini adalah bagian dari kursus

Deep Learning untuk Gambar dengan PyTorch

Lihat Kursus

Petunjuk latihan

  • Definisikan tiga blok konvolusi pada decoder dengan meneruskan jumlah kanal masukan dan keluaran yang sesuai ke masing-masing blok.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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)
Edit dan Jalankan Kode