네이버 부스트캠프 학습 정리/14~16주차

[Semantic Segmentation] FCN

AI쟁이J 2023. 6. 16. 23:47

Overview

Semantic Segmentation을 수행하기 위해 image classification을 진행했던 CNN에 대해 이를 변형시킨 네트워크.

backbone으로는 (VGG16, GoogLeNet) 등을 사용한다.

 

기존의 CNN에서 image classification을 진행할 때 FC layer를 통해 정보를 통합해 계산한 class 별 확률을 통한 task 예측을 수행했다.

하지만 semantic segmentation에서는 이 feature map의 위치 정보가 FC layer에서 사라지는 것을 방지하고자 이 부분을 FC layer 대신 CNN을 통해 위치 정보를 유지했고, 이를 통해 segmentation task가 가능하게 했다. 또한 이 방법을 통해 input image의 size가 고정되는 문제 역시 해결했다.

Linear의 경우 input 이미지의 사이즈에 영향을 받지만 1x1 convolution 연산을 수행하는 경우는 kernel의 사이즈에 영향을 받을 뿐, 이전 이미지 혹은 레이어의 크기에 대해 상관이 없기 때문이다.

 

Tranposed Convolution

1x1 convolution 연산을 통해 발생하는 heatmap은 위치 정보를 가지고는 있지만, 해상도가 매우 낮다. (convolution layer를 지나며 계속 작아졌기 때문) 따라서 이를 Up-sampling 하는 과정이 필요한데, 여기서 사용되는 것이 tranposed convolution이다.

그렇다면 애초에 Down-sampling을 안하면 되지 않나? 라고 생각할 수 있지만 feature map의 사이즈를 원본 이미지 그대로 유지하며 학습을 진행하는 것은 현실적으로 학습에서 비용과 시간의 문제 때문에 불가능하다.

따라서 위와 같은 tranposed convolution을 통해 feature map을 up-sampling한다. 더 이해하기 쉽게 애니메이션으로 보이면 

다음과 같은 과정을 거친다.

값을 통해 더 쉽게 보면

다음처럼 2x2 input의 왼쪽 위 34라는 값에 임의의 3x3 커널을 연산시켜 4x4 output과 같이 진행된다. output에서 겹치는 부분은 그 부분의 상수끼리 값을 더한다.

따라서 최종 output은 이런 값을 가지게 된다.

 

Skip architecture

Tranposed convolution을 통해 up-sampling하는 과정에서 최종 피처맵이 지역정보를 대략적으로 유지하는 형태를 가지게 된다. 여기서 지난 convolution 연산을 하며 down-sampling되는 과정에서도 피처맵들이 생겼을 텐데, 이 피처맵들의 정보도 가져와서 함께 사용해서 정보의 손실을 최대한 막자는 아이디어이다.

 

FCN-32s

기존의 FCN으로 conv5 블록을 지난 후 1/32로 감소한 이 feature map을 FC6, FC7의 1x1 연산을 통해 위치 정보를 유지한 후 마지막에 32배 up-sampling을 통해 최종 upsampled prediction을 가지게 된다.

 

FCN-16s / FCN-8s

위 이미지처럼 conv4 블록에서의 feature map역시 가져와 1x1 conv를 한 후, 기존 32s에서 up-sampled 된 feature map에 이 값을 더한다. 이후 다시 up-sampled를 시켜 16x upsampled prediction을 추출한다.

8s 역시 conv3에서 위와 같은 과정을 거쳐 3곳의 layer에서 나온 feature map들의 정보를 모두 사용해 8s의 prediction을 추출한다.

이 정보를 많이 사용할수록 더 디테일한 부분까지 잡아내는 것을 볼 수 있다.

 

 

 

Reference

https://wikidocs.net/147359

 

1) FCN

FCN은 이미지 분류에서 우수한 성능을 보인 CNN 기반 모델(AlexNet, VGG16, GoogLeNet)을 Semantic Segmentation Task를 수행할 수 …

wikidocs.net

https://velog.io/@cha-suyeon/%EB%94%A5%EB%9F%AC%EB%8B%9D-Segmentation3-FCNFully-Convolution-Network

 

딥러닝 Segmentation(3) - FCN(Fully Convolution Network)

Segmentation을 위한 대표적인 방법이 있다고 합니다.FCN(Fully Convolution Network)U-NetDeepLab 계열이렇게 크게 세 가지가 있는 것 같은데 이번 게시글은 FCN의 내용을 다뤄볼 예정이며0️⃣ 해당 논문📃: Ful

velog.io