본문 바로가기

부스트캠프 AI Tech/[Week12] Segmentation (1)

[Week12] Semantic Segmentation

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

 

1.1 Abstact

 

Segmentation에서는 대표적인 CNN을 backbone으로 활용한다. predtrained backbone 모델을 활용하면 시간도 절약하고 성능도 좋음. 

ex) VGG, Alexnet ...

 

1.2 Fully Connected Layer vs Convolution Layer

 

  • Segmentation은 FC layer를 Convolution layer로 바꾼다. 
  • Flatten을 하지 않기 때문에 위치정보를 그대로 반영할 수 있음.
  • Classification에서는 위치는 관계없이 특징만을 필요로 했지만 Segmentation에서는 픽셀의 위치정보가 중요하기 때문에 Convolution layer를 활용한다. 


  • 1x1 Convolution을 사용할 경우, 임의의 입력값에 대해서도 상관 없는 이유 -> Convolution은 kernel의 파라미터에 의해 영향을 받고, 이미지 혹은 레이어의 크기에 대해서는 상관 없음

 

1.3 Transposed Convolution

 

  • Pixel-wise prediction을 진행하기 위해 Transposed Convolution을 활용한다.
  • VGGNet을 예로들면, 5번의 max pooling을 통해 224x224x3의 입력이 7x7x512가 되었고, 다시 224x224x3의 이미지로 pixel-wise prediction을 하기 위해서는 up-sampling이 필요하다.

 

 

Transposed Convolution

 

  • Transposed Convolution의 값은 이전 Convolution의 값과 동일한 값이 아니라 Convolution처럼 학습이 가능한 파라미터이다. 따라서 Backpropagation 과정에서 Update되는 값이다.

 

Transposed convolution (1)

 

Transposed convolution (2)

 

 

최종 output

 

  • 4 x 4 output이 아닌 5 x 5 output을 만들고 싶다면 stride를 올릴 수 있음
  • 5 x 5 output을 3 x 3 output으로 만들고 싶다면 padding을 1개 주면 된다.
  • Upsampling = Deconvolution = Transposed Convolution 라고 표현하기도 한다.
  • But, Deconvolution은 Convolution의 역이 아니기 때문에 엄밀히 말하면 틀린 말이다.
  • 중요한 점은 Convolution과 마찬가지로 학습이 가능한 파라미터를 통해서 줄어든 이미지를 다시 키우는 Convolution이라는 점
  • 엄밀한 명칭은 Transposed Convolution이라고 부르는게 정확 하지만 많이들 Deconvolution이라는 용어와 같이 사용하니 참고

 

1.4 FCN에서 성능을 향상시키기 위한 방법

  • FC6 Layer의 Convolution을 지나면, 이미지의 크기가 1x1 으로 변동되는 문제 발생 
  • 우선, 편의상 FC6 Layer에 1x1 Convolution을 적용한 것을 설명
  • “2.1 Further Reading” 에서 7X7 Convolution 을 적용했을 때의 발생하는 이슈에 대해 설명

 

  • Conv + ReLU

 

  • conv1 block

 

  • 1x1 convolution 활용

 

  • 1x1 convolution 활용

 

  • class 갯수만큼 output을 만듦

 

  • 다시 up-sampling을 하기 위해 kernel_size=64, stride=32, padding=16을 줘서 up-sampling을 한다.
  • 이렇게 한번에 엄청나게 크기를 키우게 되면 어떤 문제가 발생할까?
    32 strides, 16 strides, 8 strides, Ground truth 결과
  • 따라서 논문에서는 Stride를 줄이면서 이전의 output과 summation을 하는 skip connection을 적용한다.

 

Skip connection

  • 1/32 크기의 predict1을 Deconv1를 통해 1/16로 만들고 4번까지만 pooling을 수행했던 predict2와 summation을 하여 Deconv2를 통해 up-sampling한다.
  • 위와 같은 방법을 통해 MaxPooling에 의해 잃어버린 정보를 복원해주는 작업을 진행
  • Upsampled Size를 줄요주기에 좀 더 효율적인 이미지 복원이 가능

 

 

 

  • Score에 1x1 Conv진행

 

 

  • 사이즈를 2배 키워주기 위해 Transposed convolution 수행

 

 

 

  • summation 수행

 

 

  • 이후 16배 사이즈를 키워주기 위해 Transeposed Convolution 수행

 

 

 

FCN-8s

  • FCN-8s Skip connection

 

 

FCN-8s

 

  • FCN-16s와 같은 원리

 

 

Result

  • 성능향상이 있음

 

 

1.5 평가지표

*Pixel Accuracy

 

*Mean IoU