สร้าง U-Net: การกำหนด layers
ในแบบฝึกหัดนี้และแบบฝึกหัดถัดไป คุณจะสร้างสถาปัตยกรรม U-Net ขึ้นมาตั้งแต่ต้น โดยเริ่มจากการกำหนด method __init__() ซึ่งใช้นิยาม layers และกลุ่มของ layers ที่โมเดลจะนำไปใช้
ส่วนของ encoder และ transposed convolution ได้ถูกกำหนดไว้ให้แล้ว สิ่งที่เหลืออยู่คือ convolutional blocks ของ decoder คุณต้องระบุจำนวน input channels และ output channels ที่เหมาะสมให้กับแต่ละ block โดยคำนึงถึง skip connections ด้วย
Block แรก dec1 จะรับ input เป็นการต่อกัน (concatenation) ของ output จาก upconv3 กับ output จาก enc3 และ output ของ dec1 ควรมีค่าเท่ากับ output ของ enc3 ลองเติมขนาด input และ output ที่ยังขาดอยู่ให้ครบ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Learning สำหรับภาพด้วย PyTorch
คำแนะนำการฝึกหัด
- กำหนด convolutional blocks ทั้งสามใน decoder โดยระบุจำนวน input channels และ output channels ที่เหมาะสมให้กับแต่ละ block
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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)