U-Net 구축: 레이어 정의
이번 연습 문제와 다음 연습 문제에서는 U-Net 아키텍처를 처음부터 구성해 보겠습니다. 여기서는 모델이 사용할 레이어와 레이어 블록을 정의하는 __init__() 메서드부터 시작합니다.
인코더와 전치 합성곱은 이미 정의되어 있습니다. 남은 것은 디코더의 합성곱 블록입니다. 스킵 연결을 고려하여 각 블록에 적절한 입력 및 출력 채널 수를 전달해야 합니다.
첫 번째 블록인 dec1은 upconv3의 출력과 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)