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
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)