Paper review

[논문리뷰] Fully Convolutional Networks for Semantic Segmentation

_DK_Kim 2024. 1. 9. 11:19
논문 원본 링크 : https://arxiv.org/abs/1411.4038

 

Fully Convolutional Network (FCN)은 Semantic  segmentation을 수행한 초창기 모델로서, 당시의 SOTA 모델로서 큰 의의를 갖고있다. 물론 현재는 이를 뛰어넘는 다양한 모델들이 있지만, 초창기의 CV 모델들의 구조와 어떤 식으로 제약들을 해결하고자 하였는지 분석해보는 것도 좋을 것 같아서 리뷰를 하게 되었다.

 

그리고 솔직하게 말하자면 FCN 논문은 좀... 이해가 난해하다. 때문에 나의 주관적인 해석이 많이 들어가서 저자의 의도와

다를 수도 있다.


1. 논문 간략 소개

  • 저자 : 

    Jonathan Long, Evan Shelhmaer, Trevor Darrell

  • 게재 정보 :

    Proceedings of the IEEE conference on computer vision and pattern recognition. 2015.

 

  • Main Contribution :

    1. Introduction of Fully convolutional Networks(FCN) :
         최초로 End-to-end의 pixel 단위 semantic segmentation model을 제안
    2. Efficient dense prediction :
         기존의 방식들처럼 patch 단위의 input을 사용하는 것이 아닌, 한 개의 이미지를 사용
    3. Elimination of Pre- and Post-Processing Complications :
          super-pixels, proposals, post-joc refinment 등과 같은 전처리 혹은 후처리 과정을 제거함으로서
          불필요한 계산 복잡도를 줄임
    4. Adaption of classification :
          classification task로 학습된 model을 transfer learning과 fine-tunning하여 semantic segmentation
          task에 적용

2. Introduction

2.1 기존의 모델과 FCN 모델의 차별점

   논문의 저자들이 주장하는 FCN의 차별점은 다음과 같다.

 

 

      (1) Patchwise가 아니라 전체 이미지에 대한 semantic segmentation을 수행 :

            저자들은 patch 단위의 학습이 fully convolutional learning에 비해 비효율적이라고 주장하며, 제안된 FCN 모델은

            전체 이미지를 한번에 처리하는 방식을 통해 훨씬 효율적인 학습을 수행한다고 말한다.

 

      (2) 전, 후처리 과정이 생략되어 불필요한 계산 복잡도(Computational cost)가 감소 :

           Super-pixels, proposals 과 같은 전처리나 후처리등의 과정이 불필요하여 task 수행 중 발생하는 계산 비용을
           감소시켰다.

      

      (3) Transfer-learning & fine tunning 사용 :

           저자들은 classification으로 학습된 network(nets)를 reinterpreting(=transfer learning)과 fine tunning을
           통해 dense prediction(=segmentation)을 수행했다고 한다. 이와 반대로, 기존의 모델들은 작은 규모의
           convolution net을 사용했을 뿐만 아니라, 사전 학습을 적용하지 않았다고 한다.여기서 작은 규모라는 것은
           모델 전체에 걸쳐 convolution layer를 사용한 것이 아닌, 일부에서만 사용했다는 말인 것 같다.

 

 

2.2 Semantics VS Location

 

 

논문에서는 Semantic segmentation이 갖는 고질적인 문제로, semantics(의미론적 관점에서의 정보)과

Location(위치 정보)를 언급한다. 정확하게 어떤 문제를 말하는 걸까?

   

Semantics는 이미지 전체의 관점에서 보았을 때, 이미지가  의미하는 것이 무엇(what)인지를 판단하는 정보이고,
Location은 말 그대로 어디(where)에 있는지 판단하는 정보다. 

 

저자들은 서로 다른 두 개념의 정보를 잘 반영시키기 위해 "Skip"이라는 novel한 구조를 사용함으로써, 의미론적 정보와

위치적 정보를 통합했다고한다. 이러한 모델 구조를 분석하며 알아보겠다.

 

 

2.3 Fully connected layer based model과의 차이점

 

이 부분은, 논문에서 명시적으로 나와있지 않지만, VggNet이나 AlexNet과 같은 Fully connected layer 기반의 모델들에

대한 이해를 전제로 표현하는 부분들이 꽤 있기 때문에 이해를 위해 추가하였다.

 

AlexNet :  ImageNet Classification with Deep Convolutional Neural Networks, VGGNet : https://www.researchgate.net/publication/333242381_Convolutional_Neural_Network_Layers_and_Architectures/figures?lo=1

 

위 그림에서알 수있듯이, FCN이 발표되기 전 모델들은 Convolution network(Conv)를 일부 사용하고, image classification task를 위해 모델의 뒷 부분에 Fully connected layer(FC layer)를 사용하였다.

 

물론, image classification task를 고려한다면 뒷 부분에 FC layer가 있다는 것은 꽤 합리적이다. 반환값은 픽셀 하나하나에 대해 label을 나타내는 것이 아닌, image 전체에 대한 의미를 분류하는 것이기 때문이다.

 

다만, segmentation이라는 task 관점에서 FC layer는 큰 단점이 존재한다. 바로, 2D 정보를 1D로 바꾸는 과정 중에 오는

공간적 정보의 손실이다. 사실, 이런 손실을 줄이기 위해 Computer vision에서는 CNN을 많이 사용하는 이유기도 하다.

 

또한, FC layer의 가중치가 고정되어있기 때문에, 고정적인 input을 사용해야한다는 단점도 있다. 

 

이러한 관점에서 저자들은 Convoultuion network로만 구성된 모델을 고안하게되었고, 이미지의 공간정보 손실을 최소화

하며, 입력 크기가 자유로운 모델로서 FCN을 제안하게 된 것이다.

 

그리고 논문에서 사용되는 용어들은 사실 요즘 사용하는 용어랑은 다르게 표현된 것들이 많다. 빠른 이해를 위해 아래와 같은 용어들은 다음 표현이라고 생각하면 쉽다.

  • Dense prediction : semantic segmentation
  • Coarse :
    object class를 개괄적으로 표현한 것. 예를 들면, 한 이미지의 개, 접시, 사람, 자동차에 대해 각각의 class로 구분하는 것. 
  • Fine :
    object class를 조금더 자세하게 표현하는 것. 개에도 여러가지 품종이 있듯이, 조금 더 detail한 부분까지도 인식
    하는것. 

 


3. Network Architecture

저자들은 segmentation을 수행하기 위해 기존의 classifcation model을 최대한 활용하는 방향으로 모델을 구상하였다. 

이 챕터에서는 그 방향성과 FCN 모델을 구현하기까지의 중요한 포인트를 순서대로 설명하고 있다.

 

3.1 Fully Convolution Networks

 

FCN에서 데이터 형태는 $h \times w \times d$ 형태다. 여기서, $h$는 height를 의미하며 $w$는 width를 $d$는 우리가 흔히 아는 channel 값을 나타낸다.

 

(확실히 초창기 모델 및 CV 논문이라 그런지 요즘에는 당연시 여기는 형태를 언급하니 괜시리 낯설게 느껴진다.)

 

그리고 각 layer에 대해 더 높은 layer에 반환에 영향을 주는 영역을 연결한 것을 receptive fileds라고 한다. 이 개념은 말로 설명하는 것보다 아래의 그림을 보면 더 직관적으로 이해할 수 있다.

 

  • Receptive fields란?

Receptive fields 개념

 

쉽게 생각하자면 kernel 계산에 영향을 주는 영역을 layer별로 나타낸 것이라고 생각하면 편하다. 위 그림에서처럼

$3 \times 3$ kernel을 사용한다고 생각했을 때, Layer 3의 feature map 중 노란 부분을 계산하기 위해서는 Layer 2의 노란 부분이 필요할 것이고, 같은 방식으로 Layer 2의 feature map 중 필요한 부분의 값은 Layer 1의 feature map을 통해 얻을 수 있다. 이렇게 kernel 계산에 필요한 부분을 연결한 것을 의미한다.

 

즉, FCN에서의 high layer의 feature map들은 이전 layer의 정보들과 유기적으로 연결되어있다는 것이다.

 

FCN의 각 layer에서는 지정된 kernel size 영역에서 아래와 같은 연산이 이루어진다.

$$ y_{ij} = f_{ks}(\{\text{x}_{si+{\delta}i,sj+{\delta}j}\}_{0\leq {\delta}i, {\delta}j\leq k}) $$

 

여기서 $f$는 max pooling이나 convolution 같은 연산자를 의미하는 함수이고, $x_{ij}$는 kernel 영역에서 위치한 feature 값을 나타낸다. 이때, $i$와 $j$는 전체 이미지에서의 위치가 아닌, kernel 영역에서 정의된 상대적인 위치를 나타낸다.

 

위 수식에서 $k$와 $s$는 각각 kernel size와 stride 값을 나타낸다.

 

이 부분도 수식이 들어가서 복잡해 보일 순 있지만, 단순히 FCN의 각 layer에서 일어나는 다양한 연산들이 저 수식을 바탕으로 계산된다는 것 정도로만 이해하면 된다.

 

 

 

논문에서 나와있듯, general deep net (AlexNet, VGGnet 등)은 ReLU나 Sigmoid 함수같은 비선형 함수를 사용하지만, FCN은 단순히 layer들을 연결함으로써,  kernel 단위의 계산 (nonlinear filter)를 계산한다.

 

그래서 nonlinear filter를 계산하는 방법을 택함으로써 얻는 장점과 그 근거는 무엇일까?

 

   사실, 이렇게 비선형 함수(활성화 함수)를 사용하지 않는 명확한 이유는 언급되지 않았다. 다만, 문맥상 이렇게 함으로써
   다양한 이미지의 크기에도 사용할 수 있고, 공간적 정보의 손실을 줄여준다는 뉘앙스로 적혀있긴하다.

 

   나는 개인적인 생각은 비선형 함수를 사용하지 않아서 얻은 효과라기 보다는, Convolution layer로만 연결해도 충분히         성능이 괜찮아서 굳이 computational cost를 늘리고 싶지 않아서 그랬지 않았을까라고 생각하고 있다.

   만약, 모델 구현 포스팅에서 기회가 된다면 layer에 activation function을 추가하였을 때의 성능을 비교해보겠다.

 

 

이 부분에 대한 해석은 사실 좀 난해했다. 내가 생각하기에 저자들이 저 부분을 적은 이유는 앞서 설명한 kernel 단위의
연산 구조를 취했을 때, loss 를 계산하는 관점에서도 FCN 구조가 유효하다는 말을 하고싶었던 것 같다.

 

최대한 내가 이해한 바를 풀어보자면, 예를 들어 어떤 task를 수행하기 위한 모델을 만들었고 그 모델의 loss function을

마지막 layer의 공간 차원을 기준으로 모든 값을 합산한 것이라고 가정한다면, final layer의 loss값은 결국 final layer를
산출하기 위한 kernel 단위들에 대해 loss를 구하고 그 값을 합산한 것과 같다는 것이다.

 

때문에, 최적화 과정 중 loss function에 대한 최종 layer에 대한 모든 receptive fields를 mini batch처럼 생각하고 최적화했을 때와 동일하다는 것이다... (이게 뭔소리야)

 

저자들은 이렇게 mini batch로 계산되는 receptive fields들이 많이 겹치면 각각에 patch-by-patch로 feedforward랑 back-propagation 을 계산할 때보다 layer-by-layer로 전체 이미지에 대해 계산하는 것이 훨씬 더 효율적이라고 주장한다.

 

왜 receptive fields가 많이 겹치면 feedforward와 back propagation을 이미지 단위로 계산하는 것이 더 효율적일까?

 

   이 당시에 VGGNet의 Sliding window convolution처럼 patch간 겹치는 부분이 많도록 분할을 진행했었는데, 이 경우

   contextual information을 잘 보존할 수 있지만, feed forward나 backpropagation을 계산할 때, 겹치는 부분의 대한

   연산이 중복되며 불필요한 연산이 발생할 수 있다. 때문에, receptive fields가 많이 겹쳐서 high layer에서도 충분히

   context에 대한 이해가 된다면, image를 한번에 입력해서 처리하는 것이 더 효율적이라고 주장하는 것 같다.

 

결국 이 부분은 기존 모델들과 달리 FCN은 오직 Convolution 위주의 layer들로만 구성했고, 특히 kernel의 개념을

최대한 살려서 모델을 구성했다는 것이다. 저자들이 주장는 이 구조의 장점은 Receptive field가 반영되어 각각의 feature
map이 이미지 전체의 정보를 잘 반영하고 있다는 것, 그리고 손실 함수 관점에서도 전체 이미지에 대해 FCN의 구조를

사용하면 더 효율적이라는 것이다.

 

3.2 Adapting classifiers for dense prediction

 

LeNet의 경우 AlexNet과 같이 image classifcation task model이나, convolutional model이 아니므로 이러한 변환이 안된다고 언급한다.

 

앞서 언급하였듯,  AlexNet 같은 FC layer 기반의 모델들은 입력 이미지의 크기가 고정적이고, 공간적 정보를 미반영한 결과를 반환한다. 하지만, 이 FC layer를 $ 1 \times 1$의 convolution layer로 변환한다면, 이러한 제약을 해결할 수 있다.

무엇보다도 픽셀 단위의 classification 즉, segmentation이 가능해진다. 저자들의 생각은 위의 그림에서 확인할 수 있다. 

 

 

저자들은 AlexNet에 위의 변환을 적용했을 때를 예시로 들며, 이 변환이 상당히 효율적임을 강조한다.

저자들에 의하면 $227 \times 227$크기의 image를 classfication해서 loss를 계산하는데 걸리는 시간이 1.2ms였지만,

이 변환을 적용한 버전으로 $500 \times 500$크기의 image를 통해 $10 \times 10$크기의 grid map을 산출하여

평가하는데 걸린 시간은 22ms로 5배 이상으로 빠르다고 한다. 그리고 backward time에서도 기존 모델은 2.4ms가

소요된 반면, 변환된 버전은 37ms가 소요되었다고 한다.

 

AlexNet의 비교 실험 결과에 대한 의문

 

   처음에 읽었을 때는 어떻게 5배라는 숫자가 나왔을까..? 라는 생각이 들었다. 아마 segmentation이 일종의 pixel-wise

   classifcation이므로 $10 \times 10$ 즉, 100개의 pixel에 대한 classification과 loss를 계산하는데 22ms가 걸렸으므로 

   평균적으로 한 pixel당 계산하는 데 대략 $22\textbf{ms} / 100 = 0.22\textbf{ms}$이 걸렸다고 생각할 수 있다.

   그렇다면, 대략 5배 이상이라고 하는 수치가 얼추 맞는다.

   근데, 단순히 변환을 통한 계산이 더 효율적이라고 보여줄려면 image의 resolution이 동일한 조건에서 비교했다면

   더 좋았을 것 같다는 생각이 들었다. 

 

이처럼 FC layer를 Convolution layer로 변환하면, 이미지 크기의 무관성을 얻을 수 있다. 하지만, 결과로 산출된

segmentation map은 image의 크기보다 작아지는데 (subsampling) 이는 완벽한 segmentation 이라고 볼 수 없다.

저자들은 과연 이 subsampling을 어떤 식으로 해결했을까?

 

3.3 Shift-and-stitch is filter rarefaction

 

지금은 image의 크기를 유지하기 위한 다양한 방법(padding 혹은 upsampling)이 존재하지만, 이 당시 image의 shifting을 사용하여 해결하는 방법도 존재했다. Shift-and-stitch 라고  언급된 방법은 아래의 그림에서 확인할 수 있다.

 

https://stackoverflow.com/questions/40690951/how-does-shift-and-stitch-in-a-fully-convolutional-network-work 그림 응용

 

그림에서 알 수 있듯이, feature map을 3가지 방법으로 이동시켜 계산한 feature map의 결과를 제일 하단과 같이 조합하여 원래 feature map의 크기를 유지하는 방식이다. 하지만, FCN에서는 이 방법은 사용하지 않았다.

 

 

저자들에 의하면, 저 방법을 적용해도 결국 다음 layer에서는 upsample된 feature map의 줄어든 부분만을 보기때문에 그냥 적용할 순 없다고한다. (솔직히 이해는 잘 안간다. 저런 방식으로 계속 layer 연산이 되면 receptive field도 뭔가 서로 이상하게 꼬일 것 같고, 무엇보다 가장 큰 이유는 연산량 증가때문에 안쓰는 것 같다. )

 

때문에, 저자들은 이 방법을 응용하여 아래와 같이 stride값으로 나눠지는 경우에만 연산을 진행하고 나머지는 0을 채워넣어서 유지하는 방법으로 적용해보려고 했다.

 

 

하지만, 이 방법도 결국 사용하지 않았다. 저자들은 shift-and-stitch와 그 응용 방식을 사용하지 않는 결정적인 이유로서
크게 2가지 trade-off를 거론했다.

 

 

  • Subsampling을 줄이는 과정 자체의 trade off :
    모델이 finer 정보를 이해하는 것과 receptive field의 크기 및 연산량의 증가가  서로 대치됨.
  • Shift-and-stitch 방식의 trade off :
    receptive field의 크기가 보존되지만, 원래 모델이 갖는 성능보다도 finer information에 대한 이해가 낮아짐.

결과적으로, 저자들은 다른 방식으로 subsampling문제를 해결하였다.

 

3.3 Upsampling is backwards strided convolution

 

논문에서는 Upsampling을 위한 방법으로 방법으로 다시 2가지를 언급한다. 첫 번째는 bilinear interpolation과 같은

interpolation이고, 나머지 하나는 바로 Deconvolution 혹은 backward convolution(Transposed convolution) 이다. (사실, Deconvolution과 backward convolution은 다른 개념이지만, 논문에서는 구분없이 같은 방법을 지칭한다.)

 

먼저, 보간법(interpolation)부터 알아보면 기본 개념은 아래와 같다.

 

 

제일 위는 두 점 사이의 거리 관계를 통해 가운데 지점의 위치를 유추하는 보간법 예제이다. 이를 똑같이 2차원에 적용하면

아래의 직사각형 모양으로 위치한 ABCD와 거리 관계를 사용하여 M지점의 위치한 지점의 값을 알아낼 수 있다.

 

하지만, 저자들은 이 방식 또한 사용하지 않았다. 계산량도 많고 저런 식으로 feature map을 채운다면 정보가 왜곡될 확률이 높기 때문인 것 같다.

 

그렇다면 이제 FCN에서 적용된 backward convolution에 대해 알아보자. 엄밀히 말하자면, deconvolution과 backward convolution은 약간 다른 개념이고, 논문에서는 뭉뚱그려 쓴 느낌이 있다. 정확하게 따지자면, backward convolution으로 보는 것이 맞다. (이에 대해 더 자세한 내용은 https://eremo2002.tistory.com/118 에서 확인할 수 있다.)

 

 

https://towardsdatascience.com/what-is-transposed-convolutional-layer-40e5e6e31c11

 

위의 그림은 backward convolution을 나타낸 그림이다. Input에 입력된 feature map을 2, 3단계를 거치면서 0을 넣어서 padding해주고 convolution layer와 마찬가지로 kernel을 거쳐 원하는 크기의 feature map을 얻을 수 있다.
마찬가지로, 이 kernel 또한 학습이 가능하다는 장점이 있다.저자들은 이 방식을 사용해서 skip connection까지
적용하면 더 빠르고 효과적인 segmentation이 가능하다고 주장한다.

 

3.4 Patchwise training is loss sampling

 

저자들은 확률 최적화(Stochastic optimization)의 관점에서 gradient 계산은 학습 데이터셋의 분포(training distribution)에 따라 좌우된다고 주장한다. 그 과정에서 patchwise, whole image training 두 방식 모두 임의의 형태로 분포를 형성할 수 있지만, 계산의 효율성은 각 데이터간의 겹치는 정도(overlap)와 minibatch 사이즈에 영향을 받는다.

 

논문에 의하면 만약 patchwise를 통해 생성된 batch들이 loss에 계산되는 모든 receptive field를 포함할 시 두 방식은 동일하다고 볼 수 있다고 한다.

 

말이 거창해서 그렇지, patch를 분할하고 보니  기가막히게 원본 이미지와 비슷하여 두 방식이 차이가 없다는 걸 말하는 거 같다.

 

근데 이렇게 patch를 분할하면 사실 원본이미지를 그냥 쓰는게 맞다. 굳이 노력을 들여 이미지를 분할할 필요가 없기 때문이다. 그리고 patch 분할을 하는 이유 중 하나는 augmentation을 위한 것도 있는데, 이 경우 augmentation을 기대할 수 없다.

 

때문에, 저자들은 이러한 문제점에 의해 random crop하여 patch 분할하는 방법을 거론한다. 하지만, 이것조차도 random crop으로 발생하는 patch간의 overlap을 생각한다면 image 전체를 학습하는 방식이 더 효율적이라는 것이 저자들의 주장이다. 또한, patch 분할 방식 자체가 lass imbalance 문제를 완화할 수 있지만, 공간적인 상관 관계(spatial correlation)가 감소한다. 결국 저자들은 image 단위의 학습을 진행하였고, 이렇게 진행해서 더 효율적으로 학습할 수 있었다고 한다. 논문에서는 이에 대한 주장을 뒷받침하는 실험을 진행하였다. 

 

과연 Patchwise와 Whole image 어떤 방식이 더 좋을까?

   사실 논문에서 Patchwise보다 whole image가 더 좋다는 의견에 대해서는 나는 조금 다르게 생각한다. 아마, 지속적인
   연구를 통해 Patch 분할을 더 효율적으로 수행하는 다양한 연구가 진행된 것이 큰 것 같다. 병렬 연산을 통해 한 개의
   이미지를 학습하는 속도도 더 빠를 것이고, ViT에서 사용한 거처럼 positional embedding을 통해 overlap 되지않으면서
   spatial correlation을 유지하는 방식( 근데 이건 토큰이 아니니까 적용하려면 조금더 생각해봐야할 것 같다.)도 적용할
   수 있을 것이다. 또 경우에 따라서 augmentation이 필연적일 경우 나였으면, Patchwise 방식으로 최대한 생각해볼 것
   같다. 결국 상황에 따라 다를 것 같지만, 요즘에는 patch 방식이 더 좋게 사용될 확률이 높다는게 내 생각이다.


4. Segmentation Architecture

 

4.1 From classifier to dense FCN

 

3.2에서 소개된 방식을 통해 저자들은 classifcation task로 학습된 모델(AlexNet, VGGNet, GoogLeNet)을 segmentation task를 수행하도록 바꾸었다. 각 모델의 성능은 PASCAL VOC 2011 데이터셋을 사용하여 검증하였고, mIoU(mean Intersection over Union)을 기준으로 삼았다.

 

 

 

위의 결과에서 알 수 있듯이, VGG가 제일 좋은 결과를 얻었다.

 

4.2 Combining what and where

 

앞선 내용들에서 우리는 layer가 깊어짐에 따라 feature map의 크기가 줄어드는 현상을 다루었고, 이를 해결하기 위해 upsampling 하는 방법에 대해서도 알아보았다. 하지만, 아무리 upsampling을 통해 original image size로 segmentation map을 복원해도 이미지의 fine(detail)한 부분까지 정보를 파악하는 것은 한계가 있다. 

 

저자들도 이러한 문제점을 해결하기 위해서 고안한 것이 바로, 얕은 layer에서 연산된 feature map을 사용하여 detail한
부분까지 합쳐서 segmentation map을 형성하는 것이다. 즉, 서두에 언급한 Semantic과 Location의 정보를 통합하기 위한 구조이며, 우리에게는 skip connection으로 알려진 개념이다. 논문에서는 이 방식을 "deep jet"이라고 언급한다.

 

 

위 그림은, FCN-32s와 16s, 8s의 구조를 나타내고있다. FCN-32s는 pool5 layer의 결과에서 32배로 upsampling한 segmentation map을 반환하는 모델이고, 16s는 pool5의 결과를 2배 upsampling하고 pool4의 feature map을 더한 결과를다시 16배로 upsampling하여 결과를 반환한다. 마지막으로, 8s는 앞서 pool5와 pool4를 더한 결과를 다시 2배 upsampling하고, 이를 pool3의 feature map과 더한 뒤 8배의 upsampling한 결과를 반환한다. 즉, 32에서 8로 갈수록 얕은 layer에서 얻은 fine한 정보가 더 많이 반영되는 것이다.

 

 

저자들의 의도와 일치하게, 위 그림처럼 FCN-8s 모델이 가장 ground truth와 비슷한 결과를 보임을 알 수 있다. 

 

 

추가적으로, 저자들은 shift-and-stitch 응용 방식을 통해 prediction 위와 같이 fine한 정보를 추론할 수 있겠지만, 실험상의 제약으로 이 방식으로 개선되는 비율이 skip 방식보다 현저히 떨어짐을 확인할 수 있었다고 언급만 한다.


5. Experiments

논문에서 언급된 실험의 framework를 간략히 요약하면 다음과 같다.

  • SGD optimizer, momentum 0.9, weight decay $5^{-4} \textbf{or} 2^{-4}$
  • learning rate : $10^{-3}, 10^{-4} \textbf{and} 5^{-5}$ for each FCN-AlexNet, FCN-VGG16 and FCN-GoogLeNet.
  • doubled the learning rate for biases.

 

Patch sampling 

 

 

좌측의 그림을 통해 두 방식 모두 비슷한 성능을 보이지만, 우측의 그래프에서 알 수 있듯이 whole image가 더 데이터를 효율적으로 사용하여 relative time이 더 빠른것을 알 수 있다. (loss 계산속도가 더 빠르다는걸 의미하는것 같다)

 

다음은 실험의 전반적인 결과이다. 

 

 

먼저, PASCAL VOC 2011과 2012 데이터셋에 대해 성능을 비교했을 때, FCN-8S가 더 빠르고 정확한 성능을 보이는 것을 알 수 있다.

 

 

다음으로, NYUDv2라는 RGB값에 depth 값까지 추가된 RGB-D 데이터셋에서도 제안된 모델들이 더 좋은 성능을 보였다.

 

 

마찬가지로, SIFT Flow 라는 데이터셋에서도 가장 좋은 성능을 보이고  있다.


6. Conclusion

FCN은 End-to-End 형태의 CNN으로 이루어진 모델을 통해 semantic segmentation을 진행한 큰 의미가 있는 모델이다.

당시의 SOTA 모델이었고, 이 모델을 시작으로 다양한 CNN 기반의 모델들이 연구되었다고 말해도 과언이 아니다.

 

FCN의 핵심은 결국 떻게 classifcation model을 segmentation model로 바꿀 것인지, fine한 정보와 coarse한 정보를 동시에 얻을 수 있는 방법(skip connection)인 것 같다. 

 

논문 자체는 이해하기 어려웠으나, 그만큼 당시의 혁신적이고 기발한 아이디어를 느낄 수 있었다. 

728x90