코딩뚠뚠

[머신러닝 공부] 딥러닝/FCN (Fully Convolutional Networks) 본문

공부/ML&DL

[머신러닝 공부] 딥러닝/FCN (Fully Convolutional Networks)

로디네로 2021. 4. 6. 15:54
반응형

 

이번 포스팅에서는 Semantic Segmentation 문제를 위해 제안된 딥러닝모델인

 

Fully Convolutional Networks 에 대해 공부해보았다.

 

이 Network 는 U-Net에의 기본개념이기도 하다.

dbstndi6316.tistory.com/251

 

[머신러닝 공부] 딥러닝/U-Net

이전 포스팅에서는 2021년 인턴에서 사용한 GNN에 대해 포스팅했다. 이번엔 2019년 인턴에서 U-Net을 사용한 것에 대해 다시 알아보는 포스팅을 할 것이다. U-Net U-Net은 이미지 분할을 목적으로 제안

dbstndi6316.tistory.com


 

Semantic Segmentation 이란

입력이미지에서 물체를 Detect 하여 bounding box를 그리는 것 뿐 아닌 픽셀단위로 물체를 분할하며 예측하는 것이다.

 

이와 같이 말이다.

 

 

FCN은 Semantic Segmentation 을 위해 기존 이미지 분류에서 쓰인 CNN기반의 모델을 목적에 맞춰 변형시킨 것이다.

 

어떤 모델을 변형시킨걸까 ? -> VGG16

 

VGG16으로부터 Transfer Learning 을 사용한다.

 

Classification model -> Semantic segmentation model 의 과정

  1. Convolutionalization
  2. Deconvolution (Upsampling)
  3. Skip architecture

 


 

1. Convolutionalization

CNN 기반의 Image classification 모델들은 출력에서 이미지를 분류하기 위해 출력층이 Fully-connected layer 로 구성되어 있다.

 

하지만 이미지에서 픽셀 위치를 찾는 Semantic Segmentation에서는 FC의 단점이 드러난다

  • convolution 연산에서는 위치정보가 유지되지만 FC를 실행하는 순간 위치정보가 사라진다는 점
  • 마지막 Dense layer가 고정되어있기 때문에 가중치 유지를 위해 결국엔 Input Size도 동일해야 된다는 점

따라서 FCN(Fully convolution networks)에서는 FC(Fully connected layer)를 모두 Convolution layer로 대체하는 방법을 내세웠다.

= Dense layer 를 Conv layer로 대체한다

 

이렇게 될 경우 output 은 이미지의 위치정보를 내포하게 된다.

 

그러나 Input 에 비해 너무 거친 위치정보를 내포하게 된다. (정보는 있어도 Input에 대비하면 coarse하다)

 


2. Deconvolution (Upsampling)

따라서 Coarse한 feature map을 원본이미지 픽셀과 가까운 Dense map으로 변환해 주어야 한다.

 

아래의 방법을 이용한다.

  • Interpolation
  • Deconvolution
  • Unpooling
  • Shift and stitch

애초에 pooling 을 사용하지 않거나 stride를 줄이면 Feature map 크기가 작아지는 것을 방지할 수 있지만 이는

  • 파라미터 수를 감소시키지 못한다 -> 학습시간 증가
  • 필터가 세밀한 부분을 볼수는 있다 -> but Receptive Field가 줄어들어 이미지 컨텍스트를 놓친다.

위와 같은 문제를 발생시킬 수 있다.

 

FCN에서 사용한 방법 (Coarse -> Dense 위해)

1. Bilinear Interpolation

  • Linear interpolation을 2차원으로 확장시킨 개념으로 보간하여 확장시킨 것이다. 늘렸을 때 Feature map 의 빈 영역 추정이 가능하다.

2. Backwards convolution

  • Convolution 연산을 반대로 실행하여 Up-sampling 효과를 본다.

하지만 여전히 Dense map의 정보는 거칠다.

 

거친 Segmentation 결과가 GT에 가깝게 되려면 또 어떤 과정을 거쳐야 할까?

 


3. Skip architecture

Coarse(깊은 층에 존재) 레이어의 Semantic 정보와 fine (얕은 층) 층의 appearance 정보를 결합한 architecture

 

 

즉 앞에서 구한 Feature Map (=Coarse한, Dense) 에 얕은층 (=보다 위치정보가 많이 살아있는) 의 정보를 결합하여 (Upsampling) Segmentation 품질을 개선하였다.

 

 

  • FCN-32s는 input image의 1/32의 크기에서 32배만큼 upsampling 한 결과이고
  • FCN-16s는 pool5의 결과를 2배 upsampling 한 것과 pool4의 결과를 합치고 그 결과를 16배 upsampling 한 것
  • FCN-8s는 FCN-16s의 중간 결과를 2배 upsampling 한 결과와 pool3에서의 결과를 합쳐 8배 upsampling 한 것

주로 FCN-8s의 결과만을 사용한다. (그림과같이 가장 정확하기 때문)

 

추후 U-Net의 Architecture를 보면 이와 같은 Skip Architecture 방법을 한눈에 볼 수 있다.

 

 


 

결과적으로

 

FCN은 이미지 분류모델을 가져와 Semantic Segmentation 에 맞게 Architecture를 수정해 준 것이다.

 

이를 Transfer Learning 해주어 목적에 맞게 사용할 수 있다.

 

  1. Dense layer -> Conv layer = Coarse map
  2. Coarse map -> Up-sampling = size up 됨 (위치파악 쉽게하기위해)
  3. Skip architecture 를 사용해 얕은 층이 가지고 있는 위치정보와 깊은 층이 가지고 있는 의미정보를 결합

 

 


 

References

 

medium.com/@msmapark2/fcn-%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-fully-convolutional-networks-for-semantic-segmentation-81f016d76204

www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Long_Fully_Convolutional_Networks_2015_CVPR_paper.pdf

 

반응형