Learning Deconvolution Network for Semantic Segmentation 본문

ML & DL/Paper Review

Learning Deconvolution Network for Semantic Segmentation

eremo2002 2021. 1. 29. 23:46

www.cv-foundation.org/openaccess/content_iccv_2015/papers/Noh_Learning_Deconvolution_Network_ICCV_2015_paper.pdf

 

Abstract

  • Deep deconvolution network라는 모델을 제안하여 semantic segmentation 문제를 해결
  • VGG-16 모델을 가져와서 top layer부분을 튜닝하고 deconvolution, upooling layer를 추가함 이를 통해 픽셀단위의 정교한 prediction이 가능함
  • 객체 구조의 디테일한 특징과 multiple scale까지 핸들링이 가능하며 PASCAL VOC dataset에서 72.5%의 accuracy 달성

 

Introduction

FCN기반 모델들은 다음과 같은 한계점을 가지고 있다.

 

1. 고정된 receptive field를 사용하므로 객체의 크기가 receptive field보다 점점 작아지거나 커졌을 때 prediction mask가 제대로 그려지지 않을 수 있다.

 

고정된 receptive field를 사용하는 FCN은 아래와 같이 객체 크기에 따라 잘못된 output을 만들어낼 수 있다. (a)의 경우, bus가 receptive field보다 크기가 훨씬 크기 때문에 bus가 가지고 있는 전체적인 특징을 보지 못하고 제한된 local 정보만 추출하게 된다. (b)의 경우 객체의 크기가 너무 작아서 background로 인식해버리는 문제가 발생한다.

 

FCN에서는 dense prediction을 위해 skip architecture을 적용하여 이를 개선하고자 했다. 그러나 고정된 receptive field를 사용하는 문제에서 skip architecture는 근본적인 해결책이라고 보기 어렵다. skip architecture는 boundary detail과 semantic 정보 사이의 trade-off 정도로 볼 수 있다.

 

 

2. deconvolution layer에 입력되는 coarse map은 local 정보도 많이 부족하고 dense하지 않다. 또한 16x16 feature map을 single bilinear interpolation layer만 사용해서 original input size와 동일한 size로 맞춰주기 때문에 객체의 detail structure 정보를 제대로 복원하지 못한다.

 

 

본 논문에서는 이러한 limitation을 극복하기 위해 기존과 다른 방법을 적용하였으며 주요 contribution은 다음과 같다.

  • deconvolution, unpooling, ReLU로 구성된 deep deconvoltuion network를 제안한다. 기존에는 semantic segmentation task에서 deep deconvolution network를 사용하지 않았다는 점에서 더욱 의미가 있다.
  • 객체의 크기와 detail한 정보를 잘 추출하고 복원하기 위한 방법으로 object proposal을 이용하여 instance-wise segmentation을 수행하고 semantic segmentation result와 combine한다.
  • PASCAL VOC dataset에서 높은 성능을 냈고 FCN 모델과 앙상블 했을 때 best accuracy를 달성했다.

 

System Architecture

본 논문에서 제안하는 deep deconvolution network의 구조는 아래 그림과 같다. 크게 convolution network, deconvolution network로 나눌수 있으며, 각 network가 encoder-decoder 역할을 수행하는 것과 비슷한 구조다. 다시 말해, convolution network는 입력 이미지로부터 feature를 추출하는 feature extractor 역할을 수행하고 deconvolution network는 입력 사이즈와 동일한 크기로 object segmentation map을 생성하는 역할을 수행한다.

 

VGG16 모델을 가져와서 fully-connected layer를 convolution layer로 대체하였다. 여기까진 FCN 구조와 같고 deconvolution network는 convolution network의 mirrored 버전으로 unpolling, deconvolution layer를 통해 feature size를 동일한 크기로 복원해나간다.

 

Unpooling

일반적으로 pooling은 noise값을 필터링하여 feature의 크기를 줄이기 위해 사용된다. pooling의 단점 중 하나는 spatial information 정보가 손실되는 단점이 있다. 2x2 filter를 사용하는 max pooling의 경우 4가지 값 중 가장 큰 값을 가져오게 되는데 pooling을 수행하고 난 뒤에 각 element 값은 기존의 입력 matrix에서 어느 위치에 해당하는 값인지 알 수가 없다. 특히나 공간정보가 손실된다는 점은 semantic segmentation task에서 더욱 critical한 문제가 된다.

 

따라서 deconvolution network에서는 pooling의 역연산인 unpooling 연산을 통해 feature의 original size를 복원한다. pooling layer를 거친 값이 기존 matrix에서 어느 위치에 존재했는지 그 값을 기억하고 있으면 동일한 위치의 값으로 복원할 수 있기 때문에 위치정보가 손실되는 문제를 해결할 수 있다.

 

Deconvolution

unpooling layer가 size를 복원하긴 하지만 max 값이 아닌 값들은 0으로 채우기 때문에 결국에는 sparse activation map이 된다. 논문에서는 이 sparse activation map을 deconvolution layer를 통해 dense하게 만들어준다.

 

convolution layer는 multiple input activation을 하나의 single activation으로 만들어내지만 deconvolution layer는 하나의 single input activation을 여러 개의 multiple output으로 만들어낸다.

  • Q) 따지고 보면 convolution도 하나의 single input activation을 여러 개의 multiple output으로 만들어내는 건 마찬가지 같은데..?

 

 

unpooling과 마찬가지로 deconvolution layer 또한 feature size를 upsampling한다. 논문에서는 unpooling layer output과 동일한 size로 맞춰주기 위해 deconvolution layer output을 동일한 사이즈로 crop했다고 한다.

  • Q) deconvolution layer에서 upsampling이 되는 게 맞는지? 코드에서는 deconvolution layer에서는 upsampling이 안되는 거 같음. 그러면 굳이 deconvolution layer가 아니라 unpooling+conv 조합을 쓰는 것과 무엇이 다른지?

 

deocnovlution layer의 필터는 입력 object의 shape을 복원하기 위해 학습된다. 따라서 deconvolution network 역시 hierarchical 구조로 레이어를 쌓게 되면 서로 다른 level의 shape detail 정보를 추출할 수 있게 된다. deconvolution network에서 low-level layer는 객체의 전반적인 shape을 추출하고, 클래스를 구분짓는 fine detail 정보들은 high-level layer에서 추출된다. 이러한 방식으로 deconvolution network는 semantic segmentation을 위한 class-specific shape 정보를 잘 뽑아낼 수 있는 것이다.

 

 

Analysis of Deconvolution Network

FCN의 경우 coarse feature를 가져와서 dense prediction하기 때문에 detail 한 정보를 제대로 추출하지 못한다. 물론 skip architecture를 적용하여 어느정도 보완하긴 했지만 deconvolution network처럼 feature reconstruction을 제대로 하기엔 부족한 점이 많다. deconvolution network의 경우 당장 사용하는 uppooling layer, deconvolution layer 개수만 봐도 알수 있듯이 FCN과 reconstruction 성능이 차이날 수밖에 없다.

 

아래 그림 4는 deconvolution network에서 각 layer output을 시각화한 결과다. 빨간색으로 box친 b, d, f, h, j는 deconvolution layer output이고 c, e, g, i는 unpooling layer output이다. 각 레이어를 거듭하면서 추출되는 feature가 coarse → fine으로 바뀌는 것을 볼 수 있다. 즉, lower layer에서는 객체의 전반적인 형상(location, shape, region)을 추출하게 되고 higher layer에서는 좀 더 복잡한 패턴이 추출된다.

 

또한, unpooling layer의 경우 pooling layer에서 계산된 위치값을 기억하여 복원하기 때문에 위치정보가 손실되지 않으면서 dense한 output을 만들어내기 때문에 객체의 detailed structure 정보를 효과적으로 reconstruction할 수 있다. 이와 반대로 deconvolution layer는 class-specific shape 정보를 잘 추출하는 역할을 한다.

 

논문에서 unpooling layer는 example-specific structure를, deconv layer는 class-specific shape을 뽑아낸다고 한다. 내가 생각해본 example-specific structure와 class-specific shape 두 키워드의 차이는 다음과 같다.

 

입력 이미지에서 자전거를 다른 방향에서 찍더라도 자전거가 가지고 있는 고유한 feature는 여전히 존재한다. 따라서 deconvolution layer는 자전거의 방향이 다르더라도 자전거가 가지고 있는 고유한 특징들을 잘 뽑아낼 수 있을 것이다. 따라서 자전거라는 class가 갖는 feature를 잘 추출하기 때문에 class-specific shape이라는 용어를 사용한 것이고, 반대로 unpooling layer의 경우 학습을 통해 feature를 추출하는 레이어가 아니고 주어진 input을 잘 reconstruction하는 것이 목표기 때문에 example-specific라는 용어를 사용한 것이다.

 

 

deconvolution layer와 unpooling을 사용하기 때문에 coarse feature map만 사용하는 FCN보다 정교한 output을 만들어낸다.

 

 

System Overview

제안하는 알고리즘은 원래 semantic segmentation task를 풀기 위한 것이 목적이지만 semantic segmentation을 instance-wise segmentation 문제로 재해석해서 해결하고자 하였다. 기존 이미지에 여러 개의 객체가 존재할 시 객체가 존재하는 영역을 crop하여 sub-image로 만든다. 하나의 이미지에서 여러 개의 sub-image가 만들어질 수 있고 이러한 sub-image의 prediction을 모두 통합하여 semantic segmentation 결과를 얻는다.

 

하나의 이미지를 통째로 입력하는 것보다 instance 단위로 잘라서 prediction하게 되면 다양한 scale의 객체를 핸들링할 수 있고 객체의 detail한 feature를 추출할 수 있다는 장점이 있다. 또한 search space를 감소시켜 training complexity를 줄일 수 있다. 그러나 여전히 고정된 receptive field를 사용하게 됐을 때 뒤따라오는 단점은 존재한다.

 

 

Training

논문에서 제안하는 네트워크는 꽤나 deep한 구조를 가지기 때문에 파라미터 또한 많이 존재한다. 네트워크 크기에 비해 PASCAL VOC dataset의 데이터 규모가 상대적으로 작기 때문에 네트워크를 제대로 학습하는 것이 쉽지 않다. 즉, 오버피팅이 일어날 확률이 높아진다. 논문에서는 네트워크를 효과적으로 학습하기 위해 다음과 같은 Batch Normalization, Two-stage training 방법을 적용하였다.

 

Batch Normalization

internal-covariate-shift는 딥러닝 네트워크를 학습하기 어렵게 만드는 요인 중 하나이다. covariate-shift는 학습에 사용하는 데이터의 분포와 test 시 사용하는 데이터의 분포가 다른 현상을 의미한다. internal-covariate-shift란 네트워크에 존재하는 각 layer들의 입력 분포가 일정하지 않아 학습이 어려워지는 문제를 의미한다.

 

본 논문에서는 BN을 통해 internal-covariate-shift 현상을 줄여 네트워크를 최적화 하였으며 Conv → BN, Deconv → BN의 구조를 사용하였다.

 

 

Two-stage Training

BN을 사용한다 하더라도 semantic segmentation task 자체가 search space도 워낙 커서 네트워크를 최적화하기가 쉽지 않다. 본 논문에서는 two-stage training method를 사용하여 모델을 학습시켰다. two-stage training이란 처음에는 easy example들로 학습시킨 후에 challenging example을 이용하여 fine-tuning하는 방법이다.

  • First stage training

    easy example을 만들기 위해 GT annotation에서 객체가 중앙에 오도록 crop한다. 이렇게 객체의 위치나 사이즈를 조절함으로써 적은 training 데이터로도 semantic segmentation의 search space를 상당히 줄일 수 있다고 한다.

  • Second stage training

    second stage는 좀더 challenging example을 만들어낸다. object proposal(객체가 있을법한 위치에 bounding box를 그림)방법을 이용하여 이미지를 crop한다. 여기서 GT segmentation 영역과 IoU 값이 50% 이상인 sample만 사용한다.

Two-stage training을 통해 testing 시 misalignment 문제를 좀 더 robust하게 만들 수 있다고 한다. 물론 학습 과정이 좀 더 challenging해지는 건 어쩔 수 없다.

 

 

Inference

인퍼런스 과정은 개개의 instance들을 segmentation한 뒤 이 값을 combine하여 사용한다. 일단 입력 이미지가 들어오면 객체가 있을 법한 후보군을 충분히 생성하고 각 후보군(sub-image)이 네트워크에 입력되어 나온 결과를 모두 aggregate하여 최종적으로 semantic segmentation output을 만들어낸다.

 

 

Aggregating Instance-wise Segmentation Maps

입력 이미지에서 생성된 proposal들은 misalignment, 불필요한 background 정보 등을 포함할 수 있기 때문에 부정확한 prediction이 생성될 수 있다. 따라서 이러한 노이즈를 surpass할 수 있도록 aggregation해야 한다. proposal 생성 방법은 edge-box 라는 기법을 이용한다. edge-box란 말 그대로 edge를 기반으로 객체가 있을 법한 위치를 찾아내는 방법이다.

  • 여기선 컨셉정도만 이해하고 Edge Box에 대한 자세한 내용은 논문을 읽어봐야 될 것 같다. 

https://pdollar.github.io/files/papers/ZitnickDollarECCV14edgeBoxes.pdf

 

 

i 번째 proposal에 대한 WxHxC output score map이 나왔을 때 해당 score map에 zero-padding을 추가하여 original image와 동일한 사이즈로 만들어준다. 각 proposal에서 나온 모든 score map을 모두 더하거나 혹은 max값만 취하여 aggregating한다. (1), 또는 (2)번 수식을 사용한다.

 

(여기서 G_i는 output score map에 zero-padding을 추가한 것)

최종 output은 aggregating map에 softmax를 취한 뒤, fully-connected CRF를 통해 pixel-wise labeling을 만들어낸다.

 

 

Ensemble with FCN

논문에서 제안하는 모델과 FCN을 ensemble하여 더 좋은 퍼포먼스를 낼 수 있다. 두 모델을 앙상블한 이유는 FCN의 경우 객체의 전체적인 shape을 잘 추출할 수 있다는 장점이 있고 deconvolution network의 경우 객체의 fine-detail 정보를 잘 추출하기 때문이다.

 

각 모델에서 나온 두 개의 output의 평균 값을 구한 뒤 CRF를 적용하여 final map을 만들어낸다.

 

 

Experiments

정량적 평가 결과로 DeconvNet과 FCN을 앙상블한 뒤 CRF를 적용한 모델의 성능이 가장 우수했다. CRF를 적용했을 때 1% 가량 정확도가 더 개선되었다.

 

 

아래 그림 6은 instance-wise prediction을 적용했을 때 결과를 보여준다. 입력 이미지에 다양한 스케일의 객체가 존재할 때 proposal 수를 늘릴수록 작은 크기의 객체 또한 잘 잡아내는 것을 볼 수 있다.

 

 

각 모델의 정성적 결과는 아래 그림과 같다. (a)에선 대체로 Deconvnet의 경우 FCN보다 fine segmentation 결과를 보여주고 multi-scale object 또한 잘 분할하는 모습을 보여준다. FCN의 경우 고정된 receptive field를 사용하기 때문에 객체 크기가 너무 크거나 작은 경우 정확도가 상당히 떨어지는 결과를 보여준다.

 

 

아래 그림 (b)의 경우 DeconvNet의 결과에 노이즈가 생기는 걸 볼 수 있는데 proposal이 misalign 되거나 배경에 너무 치우쳤을 때 발생하게 된다. → 양질의 proposal을 사용하지 않을 시 이러한 노이즈가 낄 수밖에 없는 것 같다.

 

그러나, DeconvNet+FCN 앙상블 모델의 경우 노이즈가 발생하지 않으며 multi-scale 객체가 존재하더라도 정확한 segmentation이 가능한 걸 볼 수 있다.

 

 

FCN, DeconvNet의 개별 모델에서 잘못된 labeling map이 그려졌음에도 불구하고 두 모델을 앙상블 했을 때 오히려 개선된 결과를 보여준다. 나아가 여기에 CRF를 적용하게 되면 더 정확한 segmentation map이 만들어진다.

 

 

Conclusion

본 논문에서는 deconvolution network라는 novel semantic segmentation 알고리즘을 제안하였다. deconvolution layer를 통해 dense하고, precise한 segmentation mask를 그릴 수 있게 된다. 또한 FCN에서 문제가 되었던 fixed size receptive field문제를 instance-wise prediction을 통해 해결하였으며 이미지에 다양한 스케일의 객체가 존재하더라도 이를 잘 핸들링할 수 있게 된다. 제안하는 모델을 FCN과 앙상블 했을 때 성능이 더욱 개선되었으며 PASCAL VOC segmentation task에서 SOTA를 달성하였다.

 

 

My opinion

딥러닝 기반의 semantic segmentation 모델 중 초석이 되는 FCN의 단점을 개선하였다.

 

FCN의 fixed receptive field 문제를 지적하였고 이러한 문제를 instance-wise prediction를 통해 객체 크기에 구애받지 않고 multi-scale object image에서도 핸들링이 가능하다. 또한 FCN이 객체의 정교한 shape, detail한 부분에서 성능이 떨어지는 문제를 unpooling layer + deconvolution layer를 결합한 deconvnet으로 보완하였다. 모델의 구조만 봤을 땐 크게 어렵지 않기 때문에 쉽게 응용이 가능할 것 같다.

 

그러나 고정된 receptive field를 갖는 문제는 커널 사이즈를 다양하게 설정해서 해결하면 어땠을까 하는 생각이 든다.

왜냐하면 논문에서 적용한 proposal 테크닉을 일반 유저가 활용하기엔 쉽지 않다.

 

deconv layer말고 그냥 conv layer써도 되지 않나? (후속 논문들에선 그냥 conv만 써서 성능이 많이 올라감, deconv layer를 사용했다는 점에서 의의가 있는듯)

 

스터디원분들의 의견

  • 실험 테이블에 FCN+CRF를 보여줬으면 어땠을까?
  • deconvnet에서 나온 feature map을 시각화해서 해석해준 점이 좋았다.
  • two-stage learning에서 object proposal에 대한 내용이 부족했다.
  • FCN+DeconvNet 앙상블해서 성능을 올렸으면, deconvnet에서도 충분히 skip connection을 적용해도 됐을텐데 왜 안 썼을까?

 

References

https://medium.com/@sunnerli/simple-introduction-about-hourglass-like-model-11ee7c30138

Comments