네이버 부스트캠프 학습 정리/4주차

[CV basic] Semantic Segmentation

AI쟁이J 2023. 4. 1. 19:43

Fully Convolutional Networks

semantic segmentation에 대한 최초의 end-to-end architecture.

기존의 Fully connected layer인 FC layer에서는 마지막 평탄화 과정에서 뉴런의 값이 flatten되며 기존 이미지의 위치 정보를 잃어버린다. 따라서 Fully convolutional layer를 사용해 단순히 차원만을 축소해 위치 정보를 유지할 수 있다.

FC layer의 자리에 1x1 크기를 가진 kernel과 클래스 개수만큼의 차원을 가진 CNN을 대체하여 사용하는 경우 위치 정보를 기억할 순 있지만, feature map의 크기가 원본보다 훨씬 적다는 한계가 있다. 위 한계를 극복하기 위해선 upsampling을 사용한다.

 

    self.pool5   = nn.MaxPool2d(kernel_size=2, stride=2)
    self.gap      = nn.AdaptiveAvgPool2d(1)
    self.fc_out   = nn.Linear(512, num_classes)

FC layer를 사용하는 모델의 일부분. Linear 함수를 통해 선형화를 진행하며 (512, 7) 사이즈로 결과를 만든다.

    with torch.no_grad():
      self.conv_out = nn.Conv2d(512, 7, kernel_size = 1)

해당 부분을 FCN 네트워크로 변경하면 Conv2d(512, 7, kernel_size = 1)을 통해 1x1 연산으로 7개의 채널을 가지게 만든다.

 

Upsampling

feature map의 크기를 입력 이미지만큼 키워주기 위한 작업으로 Transposed convolution 방식이 있다. 

 

Tranposed convolution 

convolution network의 forward, backward 진행을 반대로 진행하여 수행하는 연산으로 

다음 이미지와 같이 수행된다. 하지만 이 방법에는 overlap issue가 있는데 이는 이미지에 생기는 체크보드 형식의 노이즈를 발생시킨다. upsampling에서 해당 현상을 방지하기 위한 방법으론 NN-resize convolution, Bilinear-resize convolution등의 기법이있다.

 

U-Net

FCN 기법을 사용한 모델로 feature map의 합을 통해 dense map을 구성한다. 또한 skip connection과 비슷한 개념을 FCN에서 사용하는 기법.

위 그림의 구조에서 왼쪽은 하강 구조인 Contracting Path, 오른쪽은 상승 구조의 Expanding Path이다.

 

Contracting Path

각 Contracting step마다 3x3 convolution 연산을 반복해서 두 번씩 적용한다. (ReLU 연산 포함)

이후 down-sampling을 통해 하강할때마다 2x2 max-pooling with stride 2 연산을 수행해 Feature map의 크기를 절반으로 줄이며, 채널의 수는 2배로 늘어난다.

 

Expanding Path

각 Exapanding Step마다 2x2 Up-convolution을 수행한다. 이 때 feature map의 크기가 두 배로 늘어난다.

Up-sampling을 통해 상승할 때마다 3x3 convolution 연산을 두 차례씩 적용한다. (ReLU 연산 포함)

Up-Conv를 통해 Up-sampling을 할 때마다 나온 특징맵은 Contracting Path에서 그 up-sampling feature map과 상응하는 feature map과 합 연산을 진행한다.

마지막 연산에 1x1 convolution 연산을 통해 결과값을 도출한다.

 

U-Net의 연산에서 7x7 사이즈의 블럭이 downsample을 통해 3x3 맵으로 바뀐다면, 3x3 맵을 Up-sampling을 하는 경우 7x7이 되야 할지, 6x6이 되어야 할지 헷갈릴 수 있기 때문에 input size로는 홀수x홀수 맵이 와서는 안된다.

 

 

DeepLab

DeepLab V1 : Atrous convolution을 최초로 적용한 모델.

kernel 구조 사이마다 공간을 넣어 확장시킨 후 deconvolution을 적용해 feature map의 크기를 넓힌다.

 

 

Depthwise separable convolution

 

각 Convolution 연산에서 채널을 분리 후 필터가 Channel축 길이를 항상 1로 가지는 여러 개의 Convolution 필터로 대체시킨 연산을 진행 후, 이를 합치는 과정을 수행하는 과정.

위 방법을 통해 기존의 Convolution과 유사한 성능을 보이지만 연산량을 획기적으로 줄일 수 있기에 사용되었다. 

Standard Conv : \({D_K}^{2}MN{D_F}^2\) 의 연산량에서

Depthwise separable Conv : \({D_K}^2M{D_F}^2+MN{D_F}^2\)의 연산으로 줄어든다. 예를 들어

입력값이 (8, 8, 3) 이며 16개의 3x3 Conv 필터를 사용하는 경우

standard : 3*3*3*16 = 432지만

Depthwise : 3*3*3 + 3*16 = 75로 획기적으로 줄어든다.

깊이를 기준으로 분리하여 연산하더라도 결국 두가지 축 모두를 처리한 결과값과 크게 다르지 않기 때문에 기존의 Conv 연산과 큰 차이가 나지 않아 매우 효율적이다.

 

 

 

 

 

Reference

https://kuklife.tistory.com/121

 

[Semantic Segmentation] DeepLab v3+ 원리

논문1. DeepLab V1 : https://arxiv.org/pdf/1412.7062.pdf 논문2. DeepLab V2 : https://arxiv.org/pdf/1606.00915.pdf 논문3. DeepLab V3 : https://arxiv.org/pdf/1706.05587.pdf 논문4. DeepLab V3+ : https://arxiv.org/pdf/1802.02611.pdf 1. Semantic Segmenta

kuklife.tistory.com

https://medium.com/@msmapark2/u-net-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-u-net-convolutional-networks-for-biomedical-image-segmentation-456d6901b28a

 

U-Net 논문 리뷰 — U-Net: Convolutional Networks for Biomedical Image Segmentation

딥러닝 기반 OCR 스터디 — U-Net 논문 리뷰

medium.com

 

'네이버 부스트캠프 학습 정리 > 4주차' 카테고리의 다른 글

4주차 회고  (0) 2023.04.02
[CV basic] Object Detection  (0) 2023.04.02
[CV basic] GoogLeNet/ResNet  (0) 2023.03.31
[CV basic] Data Efficient Learning  (0) 2023.03.31
[CV basic] AlexNet/VGGNet  (0) 2023.03.30