본문 바로가기
TIL/Boostcamp AI tech

[Segmentation] FCN, Semantic Segmentation의 기초와 이해 :: seoftware

by seowit 2021. 10. 20.

1. 대표적인 딥러닝을 이용한 세그멘테이션 FCN

Abstract

1. VGG 네트워크 백본을 사용 (Backbone : feature extracting network)
2. VGG 네트워크의 FC Layer (nn.Linear을  nn.Conv2d로 대체)
3. Transposed Convolution 을 이용해서 Pixel Wise prediction 을 수행

 

✔ VGG를 백본으로 사용

  • AlexNet, ResNet 등의 다른 모델모다 VGG의 가장 좋았음
  • pretrained weight를 사용할 수 있음

 

Fully Connected Layer vs. Convolution Layer

FCN의 두번째 특징인 FC layer를 Convolution Layer로 바꿈으로써 위치정보를 해치지 않은채로 특징 추출이 가능해짐.

또한 입력값의 크기(width, height)가 상관없어짐

 

Transposed Convolution

💥 Transposed Convolution에 사용되는 Convolution 과정에서 사용되는 같은 값의 kernel이 아니고 Backpropagation에서 Update되는 학습 가능한 파라미터 입니다! 

✔ Transposed Convolution의 과정

각각의 input 픽셀과 kernel 픽셀을 stride만큼 이동하여 elementwise product를 수행한 후 같은 위치의 값은 모두 summation

  • 여기서 5x5 output을 만들고 싶다면? stride를 2로!
  • 5x5 output에서 padding을 1로 하면 다시 3x3

✔ 용어 

Upsampling == Deconvolution == Transposed Convolution 모두 동일하게 쓰이지만 Transposed Convolution이 가장 정확한 표현. Deconvolution이라는 단어는 Conv의 input과 Deconv의 output이 동일하지 않기 때문에 정확하게 맞는 표현은 아님.

Transposed Convolution 으로 표현하는 이유는 Convolution을 한 결과를 Transpose 하여 Convolution을 진행했을 때, 앞서 계산했던 Transposed Convolution의 결과가 나오기 때문

Convolution
Transposed Convolution

 

FCN 성능 향상 시키는 방법

우선 FC6 Layer의 Convolution을 1x1이라고 가정

  • 각 Conv layer(Conv - Relu)
  • Conv1 : pooling 과정을 통해 size가 1/2이 됨
  • Conv5 (Conv2~Conv4 생략)
  •  FC6, FC7
  • Score : output channel의 개수는 num_classes
  • Up Score : kernel size, stride, padding을 통해 원본 사이즈와 크기 맞춤(32x32)

위의 과정으로 만들어진 FCN-32s가 GT와 비교했을 때 디테일을 잘 예측하지 못함.

이 문제를 해결하기 위해 중간에 pooling의 output 값을 Deconvolution 과정에서 사용하기로 함

1. MaxPooling 에 의해서 잃어버린 정보를 복원해주는 작업을 진행
2. Upsampled Size 를 줄여주기에 좀 더 효율적인 이미지 복원이 가능

 

댓글