본문 바로가기
Artificial Intelligence/Paper

Semantic Segmentation, DeepLab V3+ 분석

by 개발자J의일상 2021. 8. 3.
반응형
Semantic Segmentation,  DeepLab V3+ 분석

Semantic Segmentation과 Object Detection의 차이!

 

semantic segmentation은 이미지를 pixel단위로 분류합니다. 아래 고양이의 발쪽 픽셀을 고양이 그 아래 잔디 pixel을 잔디로 분류하는 것입니다. 

Object detection은 이미지 안에 객체들을 각각의 클래스로 분류하고 해당 객체 주위에 bounding box를 만듭니다.

Soure : http://cs231n.stanford.edu/slides/2017/cs231n_2017_lecture11.pdf

Image segmentation은 이미지에서 특정 class에 속하는 각 pixel을 분류하는 과정

  • Semantic segmentation : 특정 label에 속하는 각 pixel을 분류. 동일한 개체의 다른 인스턴스는 같은 것으로 취급. 위의 예에서 위의 강아지 2마리가 있으면 2마리의 pixel들을 강아지로 label 함.
  • Instance segmentation : 이미지에 있는 특정 객체의 모든 인스턴스에 고유한 label을 부여. 위의 예에서 두 강아지에 대해 다른 색상, 즉 다른 label을 지정함. 

Semantic segmentation의 대표적인 논문 1 - FCN

 

FCN방식의 가장 큰 문제점 중 하나는 연속적인 pooling 작업으로 인해 과도하게 Downscale 된다는 점입니다.

연속적인 pooling으로 인해 입력 이미지가 32x로 Downscale 되고 이후 upscale을 진행하여 segmentation 결과를 얻습니다. 이는 정보가 많이 손실되고 segmentation output을 얻는데 좋지 않습니다. 또한 32x upscale을 하기 위해 deconvolution을 수행하면서 매개변수가 많이 들기 때문에 computation cost가 올라가고 메모리가 많이 드는 문제점이 있습니다.

 

Source: https://arxiv.org/abs/1411.4038

이 문제를 해결하기 위해 2개의 다른 아키텍처 FCN-16, FCN-8을 제안했습니다.

FCN-16에서는 이전 pooling layer의 정보가 최종 feature map과 함께 사용되므로 FCN-32에 비해 더 나은 16x upscaling을 학습하게 됩니다. FCN-8은 하나 이상의 이전 pooling layer의 정보를 포함하여 더 좋은 성능을 냅니다.

 

Semantic segmentation의 대표적인 논문 2 - DeepLab V3+

 

DeepLab V1, DeepLab V2, DeepLab V3까지 나온 이후 DeepLab V3+가 나왔습니다.

https://arxiv.org/pdf/1802.02611.pdf

 

Google에서 제안한 기술로서 기존의 결과를 개선하고 더 낮은 computation cost로 더 나은 결과를 얻을 수 있는 network를 제안했습니다. 그 방안으로 3가지를 제안했습니다.

  1. Atrous convolution
  2. Atrous Spatial Pyramid Pooling (ASPP)
  3. Conditional Random Fields usage for improving final output

 

먼저 Atrous convolution부터 알아보겠습니다.

Source : https://towardsdatascience.com/review-deeplabv3-atrous-convolution-semantic-segmentation-6d818bfd1d74

 

Atrous에서 trous는 구멍이라는 뜻입니다. 그래서 기존의 Convolution과는 다르게 필터 내부에 빈 공간을 두고 Convolution을 수행합니다. 

 

위의 그림을 보면 rate에 따라 얼마만큼 빈 공간을 둘지 결정되는데, r이 커질수록 빈 공간이 늘어나는 것을 볼 수 있습니다. 

 

Atrous Convolution은 기존 Convolution과 동일한 parameter수와 computation양을 유지하면서, FOV(Field Of View)를 더 크게 가져갈 수 있는 이점이 있습니다. 

FOV는 한 픽셀이 볼 수 있는 영역을 의미합니다. 

 

Pooling 과정에서 디테일한 정보가 줄어들게 되는데 Atrous Convolution은 이를 어느 정도 방지할 수 있는 장점이 있습니다. 그래서 DeepLab 논문에서는 Atrous Convolution을 적극 활용합니다. 또한 위에서 말한 FCN의 단점을 개선하기 위해 동일한 수의 parameter를 사용하여 큰 context를 이해하는데 도움이 됩니다.

 

다음으로 Atrous Spatial Pyramid Pooling(ASPP)에 대해 살펴봅시다.

 

Spatial Pyramid Pooling은 SPPNet에서 도입된 개념으로, feature map에서 multi-scale 정보를 캡처하기 위해 사용되었습니다. 

SPP가 도입되기 전에는 다양한 해상도의 입력 이미지가 제공되고 계산된 feature map을 함께 사용하여 multi-scale 정보를 얻을 수 있었지만 더 많은 computation cost와 time이 필요했습니다. 

Spatial Pyramid Pooling을 사용하면 단일 입력 이미지로 multi-scale 정보를 캡처할 수 있습니다.

 

Source: http://kaiminghe.com/eccv14sppnet/index.html

 

SPP module을 사용하여 network는 1x1, 2x2, 4x4의 3가지 출력을 생성하고 이러한 값은 1차원 벡터로 변환하여 합쳐지게 됩니다. 결국 여러 정보가 하나로 합쳐지게 되는 것이죠. 

SPP사용의 또 다른 장점은 모든 크기의 입력 이미지를 제공할 수 있다는 점입니다. 

https://kuklife.tistory.com/121

ASPP는 여기에 한 숟가락을 더 얹어서 아까 1x1, 2x2, 4x4의 출력 3가지를 생성하는 것에서 Atrous convolution의 rate를 조정하여 합쳐지게 되고, AdaptiveAvgPool2d를 수행하고! 이후 1x1 convolution이 추가되어 있습니다. 

 

Spatial Pyramid Pooling처럼 Atrous Spatial Pyramid Pooling도 multi-scale context정보를 얻을 수 있습니다. 이를 통해 정확한 Semantic Segmentation을 수행할 수 있도록 돕습니다.

 

마지막으로 Conditional Random Fields usage for improving final output입니다.

 

Pooling은 신경망에서 parameter를 줄이는데 도움이 됩니다. 하지만 pooling은 invariance 합니다.

invariance는 input의 위치가 달라져도 output이 동일한 값을 갖는 것을 말합니다. max-pooling은 small translation invariance 함수입니다. 예를 들어보겠습니다.

image의 pixel의 값이 [255, 0, 0, 0]라고 해봅시다. 이 이미지를 shift 해서 [0, 255, 0, 0]를 만들었다고 하면

255 0
0 0
0 255
0 0

이들을 각각 2x2로 max pooling 하면 output은 동일하게 1을 갖습니다. 이러한 성질을 invariance라고 합니다.

그래서 CNN은 "translation invariance" 합니다.

Source: http://liangchiehchen.com/projects/DeepLab.html

Pooling의 이러한 성질 때문에 신경망에서 얻은 segmentation 결과는 거칠고 경계가 구체적으로 정의되지 않습니다. 

이를 해결하기 위해 본 논문에서는 그래픽 모델 CRF의 사용을 제안합니다.

Conditional Random Field는 후처리 단계를 수행하고 셰이퍼 경계를 정의하기 위해 생성된 결과를 개선합니다.

Label 뿐만 아니라 다른 pixel Label을 기반으로 pixel을 분류하여 작동합니다.

위의 그림에서 알 수 있듯이 신경망에서 생성된 거친 경계는 CRF를 통과한 후 더욱 정교해집니다. 

 

Deeplab-v3는 batch normalization을 도입하였고, Resnet block의 각 layer 내부에 (1, 2, 4) rate를 사용하였습니다.

또한 위에서 언급한 ASPP 모듈을 도입하였습니다.

 

Deeplab-v3+에서는 Bilinear Upsampling을 16배 하던 것 대신에 Decoder를 사용하도록 변경되었고, U-Net과 같은 아키텍처 구조, Encoder-Decoder 구조를 도입하였습니다.

 

  • Encoder : Xception으로 구현
  • Decoder : Bilinear Upsampling을 U-Net style decoder로 구현

 

Decoder의 입력은 bilinear Upsampling을 사용하여 4x Upsampling 되고 3x3 convolution을 수행한 후 다시 4x Upsampling을 수행하게 됩니다. 

이 접근 방식은 직접 16배 Upsampling보다 더 나은 결과를 보여줍니다.

Atrous convolution 위에 depthwise separable convolution을 사용하여 computation cost를 줄입니다.

300x250

댓글