เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

สร้าง 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)
แก้ไขและรันโค้ด