본문 바로가기
의료 AI/[04] - 논문 리뷰

DeepLab v1 아키텍쳐 분석

by AI-BT 2024. 11. 20.
728x90
반응형

 

DeepLab v1 아키텍쳐

DeepLab v1은 딥러닝 기반의 이미지 분할 네트워크로, Dilated Convolution과 업샘플링(Bilinear Interpolation)을 활용하여 높은 해상도를 유지하면서도 넓은 수용 영역(Receptive Field)을 확보한다.

 

주요 구성 요소

1. conv1 ~ conv4

  • 기본적인 합성곱과 ReLU 활성화 함수로 이루어져 있다.
  • 팽창율(Dilation Rate): 1
  • MaxPooling을 통해 공간 크기를 줄인다.

2. conv5

  • 팽창율(Dilation Rate): 2
  • 넓은 수용 영역을 확보하기 위해 팽창 합성곱 사용
  • MaxPooling과 AvgPooling 적용

3. FC6와 FC7 (Fully Convolutional Layers)

  • FC6: 팽창율(Dilation Rate): 12로, 더 넓은 특징 정보를 학습
  • FC7: 채널 확장을 수행하며 다음 단계로 연결

4. Score 단계

  • 1×1 합성곱을 사용하여 클래스별 확률 맵 생성

5. Upsampling

  • Bilinear Interpolation을 활용하여 원래 크기로 복원
  • align_corners 파라미터에 따라 보간 방식 조정 가능

위의 주요구성에 대한 간략한 설명이며, 이제 아키텍처를 보면서 코드를 분석해보자.


1. Conv 블록 정의 (conv_relu)

def conv_relu(in_ch, out_ch, size=3, rate=1):
    conv_relu = nn.Sequential(
        nn.Conv2d(in_channels=in_ch, 
                  out_channels=out_ch, 
                  kernel_size=size, 
                  stride=1, 
                  padding=rate, 
                  dilation=rate),
        nn.ReLU()
    )
    return conv_relu

 

 

conv_relu 함수는 Conv2d와 ReLU를 조합하여 생성한 블록이다.

입력 채널(in_ch), 출력 채널(out_ch), 커널 크기(size), 그리고 팽창율(rate)을 파라미터로 받는다.

이 블록은 필터와 활성화 함수를 결합한 표준적인 CNN 구조이다.


2. Backbone 네트워크: VGG16 구조

self.features1 = nn.Sequential(
    conv_relu(3, 64, 3, 1),
    conv_relu(64, 64, 3, 1),
    nn.MaxPool2d(3, stride=2, padding=1)
)

self.features2 = nn.Sequential(
    conv_relu(64, 128, 3, 1),
    conv_relu(128, 128, 3, 1),
    nn.MaxPool2d(3, stride=2, padding=1)
)

self.features3 = nn.Sequential(
    conv_relu(128, 256, 3, 1),
    conv_relu(256, 256, 3, 1),
    conv_relu(256, 256, 3, 1),
    nn.MaxPool2d(3, stride=2, padding=1)
)

self.features4 = nn.Sequential(
    conv_relu(256, 512, 3, 1),
    conv_relu(512, 512, 3, 1),
    conv_relu(512, 512, 3, 1),
    nn.MaxPool2d(3, stride=1, padding=1)
)

self.features5 = nn.Sequential(
    conv_relu(512, 512, 3, rate=2),
    conv_relu(512, 512, 3, rate=2),
    conv_relu(512, 512, 3, rate=2),
    nn.MaxPool2d(3, stride=1, padding=1),
    nn.AvgPool2d(3, stride=1, padding=1)
)

 

 

 

VGG16 클래스는 여러 단계의 특징 추출 계층으로 구성된다.

각 단계는 conv_relu를 반복적으로 쌓아 올린 뒤, MaxPooling 연산을 통해 크기를 줄인다.

features1, features2, features3, features4, features5로 구성되며, 각각 다른 입력/출력 채널과 팽창율을 가진다.


3. 분류기(Classifier)

class classifier(nn.Module):
    def __init__(self, num_classes):
        super(classifier, self).__init__()
        self.classifier = nn.Sequential(
            conv_relu(512, 1024, 3, rate=12),
            nn.Dropout2d(0.5),
            conv_relu(1024, 1024, 1, 1),
            nn.Dropout2d(0.5),
            nn.Conv2d(1024, num_classes, 1)
        )

    def forward(self, x):
        out = self.classifier(x)
        return out

 

 

 

classifier 클래스는 고차원 특징 맵을 입력받아 최종 출력 클래스를 예측한다.

dropout 레이어를 포함하여 과적합을 방지하고, 마지막 Conv2d 레이어에서 클래스 수로 매핑된다.


4. Upsampling (업샘플링)

class DeepLabV1(nn.Module):
    def __init__(self, backbone, classifier, upsampling):
        super(DeepLabV1, self).__init__()
        self.backbone = backbone
        self.classifier = classifier
        self.upsampling = upsampling

    def forward(self, x):
        x = self.backbone(x)
        _, _, feature_map_h, feature_map_w = x.size()
        x = self.classifier(x)
        x = F.interpolate(
            x, 
            size=(feature_map_h * self.upsampling, feature_map_w * self.upsampling), 
            mode="bilinear", 
            align_corners=False
        )
        return x

 

 

 

DeepLabV1 클래스는 특징 추출과 분류기를 조합한 후, F.interpolate를 사용하여 원본 크기로 업샘플링한다.

bilinear 모드로 업샘플링하며, align_corners 파라미터에 따라 보간 방식이 달라진다.

 

 

 

DeepLabV1 모델은 이미지를 입력받아 공간적 크기를 점진적으로 줄이면서 고차원 특징을 학습한 후, 최종적으로 원래 크기로 복원한다. 이 과정에서 팽창 합성곱(dilated convolution)과 업샘플링 기법을 활용하여 효율적이면서도 정밀한 분할 결과를 얻을 수 있다. 특히, 업샘플링 단계에서 사용되는 align_corners 파라미터는 복원된 이미지의 품질에 미세한 영향을 줄 수 있어, 적절한 설정이 중요하다.

 

이상입니다. 

끝.

 

 

728x90
반응형

'의료 AI > [04] - 논문 리뷰' 카테고리의 다른 글

[01 X-ray Hand] - Maskformer  (0) 2024.11.27
[01 X-ray Hand] - U-Net3++  (0) 2024.11.22
[01 X-ray Hand] - SegNet의 아키텍처  (2) 2024.11.18
U-Net 의 이해  (8) 2024.11.10

댓글