JLOG

[Paper Review]FCN 논문 리뷰 - Fully Convolutional Networks for Semantic Segmentation 본문

논문정리/Sementic Segmentation

[Paper Review]FCN 논문 리뷰 - Fully Convolutional Networks for Semantic Segmentation

정정선선 2021. 3. 25. 14:00

PAPER

요약

CNN은 image recognition에 큰 발전을 가지고 왔다. semantic segmentation에도 CNN Deep learning model을 사용하기 위한 방법으로 FCN의 방법을 제시했다.

 

Network for Classification

일반적으로 Conv와 Pool을 통해 입력 이미지는 작아지고 FC를 통해 하나의 입력 이미지에 따른 예측 label을 출력한다.

 

Network for Segmentation

이 때, classfier의 FC 부분을 1x1 CNN으로 변경함으로서, 공간 정보를 가진 activation map을 출력으로 가질 수 있다.

FC를 사용하면, 고정된 크기의 input을 받아야 하지만 모두 CNN을 사용하면 이미지 크기에 상관 없이 모두 입력으로 받을 수 있다.

 

작아진 output activation map을 Upsampling하여 원래의 크기를 가진 predicted segmentation 결과를 출력할 수 있다.

 

 

즉, 논문에서 말하는 기술을 정리하자면

CNN으로 사진의 feature들을 추출하고, classifier 부분을 FC에서 CNN 부분으로 변경하여, 공간적 정보를 보존하고 image size에 상관 없이 입력 받을 수 있다.

사이즈가 작아진 activation map을 Upscaling을 이용해 원래의 input 이미지 크기를 가지도록 만들어주고, skip connection을 사용하여 깊은 network의 거친 semantic 정보와 얇고 가는 겉 모습의 정보를 합쳐주어 예측한 segmentation 결과를 출력할 수 있다.

 

 

 

 

 

FCN(Fully Convolution Networks)

image recognition에서 일반적으로 사용하는 FC classfier를 CNN으로 바꿔주어 공간 정보를 보전하고 다양한 image size를 입력으로 받을 수 있다.

 

 

model에서 일반적으로 사용하는 components(conv, pooling, activation func)의 동작을 식으로 나타내면 아래와 같이 된다.

  • k : kernel size
  • s : stride or subsampling factor
  • f : layer type

 

 

 

Q) 밑의 식과 3. - 3.1 부분이 이해가 가지 않는다

하단 레이어와 이어진다는 의미의 식 같은데, 정확하게 모르겠다.

 

 

 

 

3.1 Adapting classifier for dense prediction

기존 이미지 Convolution network 뒤에 FC로 구성된 classifier를 이용해, 이미지에 대한 예상 label을 출력했다. 이 구조를 그대로 segmentation에 사용하기에는 Flatten → FC 부분에서 spatial 정보가 소실 되게 된다.

그래서 NIN(Network In Network, 1x1 Conv)로 FC를 대체하여 spatial한 정보를 보존시켰다.

 

모든 layer에 Conv를 사용함으로서 ground truth를 각 layer의 출력을 얻을 수 있어 forward, backward passes가 간단해 효율적인 연산을 할 수 있다고 한다.

 

 

+용어

receptive field

3x3 filter가 3개가 쌓였을 때 7x7 filter 1개일 때와 유사하게 작동하여 큰 범위의 패치를 알 수 있다.

 

 

3.2 Shift-and-stitch is filter rarefaction

coarser output에서 dense prediction feature를 생성하기 위하여 shift-and-stitch 방법이 고려되었다.

shift-and-stitch 방법은 위와 같이 max pooling을 하고 위치 정보를 저장하여 원래의 이미지 크기로 upscaling할 수 있다. 하지만 계산 비용이 크다는 단점이 있다.

 

이 논문에서는 filter와 stride를 조절하여 shift-and-stitch과 유사한 효과를 내는 trick을 언급하였다.

본 논문에서는 skip connection을 사용한 Upsampling 기법이 더 효과적이기 때문에 이 trick을 사용하지 않았다.

 

 

 

3.3 Upsampling is backwards strided convolution(Transposed Convolution)

Upsampling의 다른 방법으로 backward convolution(Transposed Convolution)이 있다.

위와 같이 사이를 띄워주고 padding 해준 Input을 convolution하면 원하는 사이즈의 Output을 얻을 수 있다. 또한 Deconvolution의 kernal도 dense prediction을 위한 training이 가능하다.

그래서 원래 이미지 사이즈로 Upsampling하면, pixelwise loss를 구할 수 있어서 backprop 하기가 용이하다.

 

후에 각 Conv에서 얻은 activation map을 skip connection을 이용해 깊은 network에서 얻은 coarse한 segment 정보와 얇은 network에서 얻은 fine한 apperance 정보를 합칠 수 있다.

 

3.4 Patchwise training is loss sampling

Patchwise training란 하나의 이미지에서 객체가 존재하는 위치 또는 주변 위치를 crop하여 하나의 patch로 만든 뒤 모델에 입력하는 training 방식이다.

Patchwise training을 사용하는 이유는 이미지에 필요 없는 정보들이 존재할 수 있고, 하나의 이미지에서 서로 다른 객체가 존재하는 경우 redundancy가 발생한다(고양이에 관련된 feature를 추출해야하는데, 필요 없는 배경까지 모두 봐야 하는 문제).

 

이미지에서 patch 이미지를 뽑아내서 필요한 부분을 위주로 training 시킬 수 있다. class imbalance 문제를 완화할 수 있지만 공간적 상관 관계가 부족해진다는 단점이 있다.

 

patchwise training을 통해 하나의 이미지를 100개의 patch로 분할해 각 patch마다의 loss 값을 구하게 된다. 이 때, 모든 loss를 사용하는 것이 아니라 중요한 patch들의 loss만 사용하거나 가중치를 주어 loss 값을 샘플링해 사용할 수 있다고 한다.

 

결과적으로는 patchwise training을 사용하지 않았다. whole image training이 dense prediction을 위한 training 속도 측면에서 더 효과적이고 효율적이었다고 한다.

 

-참고 블로그 : https://eremo2002.tistory.com/118

 

 

 

 

Segmentation Architecture

FCN, Upsampling 그리고 pixelwise loss를 사용한 모델을 이용해 dense prediction을 구했다.

여기서 skip connection을 이용해 coarse, semantic 정보와 local, appearance 정보를 합친 개선 된prediction을 구했다.

 

4.1 From classifier to dense FCN

AlexNet, VGG, GooLeNet의 네트워크의 classification 부분을 fc를 fcn으로 대체해 사용했다.

channel을 PASCAL의 class 개수와 맞추기 위해 1x1 conv를 사용했다.

VGG의 결과가 제일 잘 나왔고, GoogLeNet의 경우는 segmentation 결과 예측이 적절하지 않았다.

 

  • mean IU(mean pixel intersection over union) (=mean IoU)
    실제 이미지와 예측된 이미지 사이에 픽셀 단위로 얼마나 겹치는지를 비율로 나타내는 값이다.참고블로그
  •  
  • 1에 가까울 수록 좋은 성능을 가졌음을 의미한다.

4.2 Combining what and where

 

깊은 layer의 output일 수록 픽셀의 개수가 줄어들고(activation map)이 줄어들고, upsampling하여 디테일 한 정보까지 얻기에는 한계가 있다.

그래서 얇은 layer과 깊은 layer의 activation map을 더하여 coarse정보와 fine apperance 정보를 합칠 수 있다.

이렇게 다양한 cnn feature들을 사용하는 것을 deep jet이라고 논문에서 칭하였다.

 

 

1x1인 pool5의 activation map을 32배 한 upsampled prediction을 FCN-32s라고 한다.

2x2인 pool4의 activation map과 pool5를 2x upsampled prediction을 더해, 16x upsampled prediction(FCN-16s)를 구했다.

이와 같이 4x4 pool3과 앞서 더해주었던 prediction을 합해 8x upsampled predicton(FCN-8s)를 구했다.

 

 

결과를 보면 low 레이어의 prediction을 더한 FCN-8s가 가장 디테일한 부분까지 가지고 있는 것을 확인할 수 있다.

또한 결과표를 봐도 FCN-8s의 결과가 가장 좋은 것을 확인할 수 있다.

 

 

4.3 Experimental framework

  • OptimizationSGD with momentummomentum : 0.9doubled the lr for biases
  • dropout included in original classifer net
  • weight decay : 5e-4, 2e-4
  • lr : 10e-3, 10e−4 and 5e−5 for FCN-AlexNet, FCN-VGG16, and FCN-GoogLeNet

 

patch sampling

 

Results

i : number of pixels of class

j : predicted class

ncl : diffent classes

ti : total number of pixels of class i

 

 

PASCAL VOC에서 가장 높은 성능을 가진 것을 확인할 수 있었다.

 

Comments