시작하기무료로 시작하기

U-Net 구축: 레이어 정의

이번 연습 문제와 다음 연습 문제에서는 U-Net 아키텍처를 처음부터 구성해 보겠습니다. 여기서는 모델이 사용할 레이어와 레이어 블록을 정의하는 __init__() 메서드부터 시작합니다.

인코더와 전치 합성곱은 이미 정의되어 있습니다. 남은 것은 디코더의 합성곱 블록입니다. 스킵 연결을 고려하여 각 블록에 적절한 입력 및 출력 채널 수를 전달해야 합니다.

첫 번째 블록인 dec1upconv3의 출력과 enc3의 출력을 이어 붙인(concatenation) 것을 입력으로 받습니다. 그리고 dec1의 출력은 enc3의 출력과 동일해야 합니다. 누락된 입력과 출력 크기를 모두 채워 넣을 수 있을까요?

이 연습은 강의의 일부입니다

PyTorch로 배우는 이미지 딥러닝

강의 보기

연습 안내

  • 디코더의 세 개 합성곱 블록에 대해, 각 블록에 적절한 입력 및 출력 채널 수를 전달해 정의하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

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)
코드 편집 및 실행