Bắt đầu ngayBắt đầu miễn phí

Xây dựng U-Net: định nghĩa các tầng

Trong bài này và bài tiếp theo, bạn sẽ tự xây dựng kiến trúc U-Net từ đầu. Ở đây, bạn bắt đầu bằng cách định nghĩa phương thức __init__() nơi bạn sẽ khai báo các tầng và các khối tầng để mô hình sử dụng.

Encoder và các phép tích chập chuyển vị đã được định nghĩa sẵn cho bạn. Phần còn lại là các khối tích chập của decoder. Bạn cần truyền số kênh đầu vào và đầu ra phù hợp cho từng khối, có tính đến các skip connection.

Khối đầu tiên, dec1, sẽ nhận đầu vào là phép nối giữa đầu ra của upconv3 với đầu ra của enc3. Đầu ra của dec1, đến lượt nó, phải bằng với đầu ra của enc3. Bạn có thể điền tất cả các kích thước đầu vào và đầu ra còn thiếu không?

Bài tập này là một phần của khóa học

Deep Learning cho Ảnh với PyTorch

Xem khóa học

Hướng dẫn bài tập

  • Định nghĩa ba khối tích chập trong decoder bằng cách truyền số kênh đầu vào và đầu ra phù hợp cho từng khối.

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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)
Chỉnh sửa và Chạy Mã