관리 메뉴

TEAM EDA

Pyramid Scene Parsing Network (PSPNet) 본문

EDA Study/Image Segmentation

Pyramid Scene Parsing Network (PSPNet)

김현우 2021. 9. 23. 17:20

Pyramid Scene Parsing Network (PSPNet) Review

0. Abstract

  • FCN 기반의 모델은 global scene category clue를 활용하지 못하기 때문에 Open Vocabulary 와 diverse secens 두 가지 어려운 점을 가지고 있습니다.

  • 위의 문제를 해결하기위해서 Pyramid Pooling Modules를 이용한 PSPNet을 제안합니다.

    • Global context information을 탐색하는 능력을 가집니다.
    • 서로 다른 영역을 기반으로 하는 Context를 탐색할 수 있습니다.
    • 이는 local 및 global clue를 모두 활용해서 reliable prediction을 수행합니다.
  • Secne Parsing에서 좋은 성능을 거두었으며 ImageNet scene parsing challenge 2016, PASCAL VOC 2012, Cityscapes에서 좋은 성능을 차지했습니다.

  • 참고로 Open Vocabulary Problem이란 정확히는 모르겠지만 카테고리가 굉장히 많은 경우와 카테고리 사이의 상하위 관계가 있는 문제를 의미하는 것 같습니다.


    출처 : Open Vocabulary Scene Parsing

1. Introduction

  • Scene parsing 같은 경우 몇가지 어려운 점이 있습니다.

    figure2

    • 의자와 소파, 말과 소 등과 같이 유사한 모습을 가지지만 다른 라벨들이 존재합니다.

      image-20210206193424786

    • Global Scene category clues를 통해서 예측하는 능력이 부족합니다.

      • 예) 강, 선착장 등을 통해서 보트를 예측
    • The new ADE20K dataset [43] is the most challenging one with a large and unrestricted open vocabulary and more scene classes.

image-20210206193525845

  • FCN이 비록 좋은 성능을 보였지만 몇가지 한계점을 보입니다.
    • 보트의 경우 물 위에 떠있는 특징이 있지만 외관이 자동차와 비슷해서 잘못 예측하는 문제가 있습니다.
    • 고층빌딩처럼 객체가 큰 경우에 대해서 비슷한 클래스인 빌딩으로 착각하게 됩니다.
    • 배게와 같이 침대와 유사한 모습, 색을 가지는 경우 잘못 분류하는 문제가 있습니다.
  • 위와 같은 문제는 객체의 지역 지역적인 정보만을 가지고 예측해서 발생한 문제입니다.
  • 이를 해결하기 위해서는 객체 주변의 전체 정보를 통해서 예측할 필요가 있습니다.
    • 예를들어, 첫번째 사진의 경우 강 위에 보트가 떠있고 그 주변에 보트를 넣을 공간이 있다라는 "Context"를 통해 예측하면 문제를 해결할 수 있습니다.
  • PSPNet에서는 FCN처럼 지역적인 정보를 이용해서 예측하는 방법에 더해서 global pyramid pooling을 통해 전역적인 정보까지 결합해서 예측하는 방법입니다.
  • 추가적으로 "deeply supervised loss"라는 최적화 전략을 제시해서 좋은 성능을 달성했습니다.

2. Related Work

3. Pyramid Scene Parsing Network

3.1 Important Observation

Mismatched Relationship

image-20210206193620991

  • Context Relationship을 잘못 파악하는 경우
    • 복잡한 배경을 이해하기 위해서는 객체들 간의 관계를 파악하는게 중요합니다. 예) 하늘에 비행기가 떠다닌다.
    • 하지만, 위의 경우 보트가 강 위에 떠있음에도 외관이 자동차와 비슷하다는 이유로 잘못 분류한 것을 볼 수 있습니다.

Confusion Categories

image-20210206193735629

  • Confusion Categories를 가지는 경우
    • 산과 언덕, 들과 땅, 벽과 집, 건물 과 고층 건물처럼 비슷하지만 조금 다른 라벨들이 많고 이를 잘못 분류할 가능성이 높습니다.
    • FCN의 경우 고층빌딩을 빌딩과 고층빌딩으로 섞어서 분류한 것을 볼 수 있습니다.
    • 위의 문제들은 범주 간의 관계(고층빌딩 – 하늘)를 통해서 해결할 수 있습니다.

Inconspicuous Classes

image-20210206193810496

  • Inconspicuous Classes (눈에 띄지 않는 클래스)
    • 신호등이나 표지판같이 객체들은 중요하지만 작아서 잘 분류되지 않는 문제가 있습니다.
    • 고층 빌딩과 같이 크기가 큰 객체들은 Receptive Field를 벗어나서 예측이 잘 안되는 문제가 있습니다. (다양한 Sub-region 들을 모두 고려하지 못합니다.)

Summary

  • 객체마다의 크기가 달라서 서로 다른 Receptive Field가 필요합니다.
  • 그리고 주변 정보(문맥)를 파악해서 객체를 예측하는데 사용해야 합니다.

3.2 Pyramid Pooling Module

image-20210206193956060

  • CNNreceptive field의 크기가 고정되어 네트워크가 global scenery prior를 통합하지 못하게 한다는 한계가 있습니다.
  • 또한, Global average pooling은 global contextual prior로 사용할 수 있지만, ADE20K와 같은 complex scene에서는 중요한 정보들을 모두 고려하기에 부족합니다.
    • Scene image는 많은 object들과 연관되어 있는데, 이들을 바로 single vector로 만들어 버리면 spatial relation을 잃을 수 있습니다.
  • 따라서, PSPNet에서는 다음과 같이 동작하는 pyramid pooling module을 global scene prior로 사용해 다양한 scale 및 sub-region에 따른 정보들을 포함하는 방법을 사용합니다. (Figure 3 - (c))

Global Average Pooling

  • Global Average Pooling (1)

image-20210206201356924

  • Average Pooling (2)

image-20210206201440726

  • Global Average Pooling vs Convolution

출처 : https://www.youtube.com/watch?list=WL&v=siwbdHhQPXE&feature=youtu.be (임정근님의 A-GIST 비전&로보틱스 발표)

image-20210206201519467

하나의 Global Average Pooling만 적용한 경우 복잡한 ADE20K 데이터 셋에서는 적합하지 않았습니다.

  • 위의 문제를 극복하기 위해서 여러 형태의 Receptive Field를 가진 Global Average Pooling을 적용합니다.
  • 그럴 경우 서로 다른 영역의 정보들을 뽑을 수 있고 이를 통합해서 다양한 크기의 Context를 생성할 수 있습니다.

image-20210206201533724

  • PPM의 구조를 자세히 보면 4개의 크기를 가지는 풀링(1, 2, 3, 6)에 의해서 부분 영역들을 추출합니다.
  • 이후, Conv을 통해서 채널의 수를 정제하고 Upsampling으로 크기를 키운 후에 이를 원래의 피처 맵과 결합 함으로서 다양한 크기의 문맥 특징을 추출할 수 있습니다.

image-20210206201602741

4. Deep Supervision for ResNet-Based FCN

image-20210206201619826

PSPNet의 ResNet은 2가지의 loss를 통해 optimization을 수행합니다.

  • Master branch loss (loss 1)
    • Softmax Loss
    • 더 많은 responsibility (weight 0.6)
  • Auxiliary loss (loss 2)
    • Softmax Loss
    • 더 적은 responsibility (weight 0.4)
    • 학습 과정에서 optimize를 돕는 역할로만 사용되며 test시에는 사용되지 않음
  • 위의 2가지 loss는 모든 previous layer에 전파되도록 합니다.

5. Experiments

5.1 Implementation Details

  • Augmentation
    • Random mirror
    • Random Resize
    • Random Rotation
    • Gaussian Blur
    • Crop

5.2 ImageNet Scene Parsing Challenge 2016

Ablation Study for PSPNet

image-20210206201727713

Ablation Study for Auxiliary Loss

image-20210206201734537

Ablation Study for Pre-trained Model

image-20210206201739301

Multi Scale Testing


출처 : “Single-Shot Refinement Neural Network for Object Detection”, RefineDet

PASCAL VOC 2012

table_6

Table 6test set에서 PSPNet을 다른 모델들과 비교한 결과입니다.

  • DeepLab을 비롯한 몇가지 모델들과의 공정한 비교를 위해 ResNet101 기반의 PSPNet으로 비교합니다.
  • $\dagger$가 붙은 모델은 MS-COCO dataset에서 pre-training을 수행한 모델을 의미합니다.
  • PSPNet이 가장 좋은 성능을 보입니다.
    • 심지어 MS-COCO에서 pretraining을 수행한 다른 모델들보다 좋은 성능을 보였음
  • ResNet이 나온지 얼마 되지 않은 시점이어서 ResNet을 적용했기 때문에 좋은 성능이 나온것이라는 반박이 있을 것으로 예상하여 최신 모델들과의 성능도 비교합니다.
    • FCRNs, LRR, DeepLab 등의 SOTA 모델들보다도 좋은 성능을 보임

image-20210206201919742

Figure 7은 PASCAL VOC에서 Baseline보다 PSPNet이 더 정확하고 세밀하게 segmentation을 수행한다는 것을 보여줍니다.

  • 첫번째 행에서 cows를 horse와 dog로 잘못 인식한 문제를 해결합니다.
  • 두번째 행, 세번째 행에서 각각 aeroplane, table의 missing part를 찾습니다.
  • 세번째, 네번째 행에서 person. bottle, plant를 잘 찾으므로 작은 object에 대해서도 잘 동작한다는 것을 알 수 있습니다.
fig_9
  • Figure 9은 PASCAL VOC에서의 PSPNet을 포함한 여러 모델들의 segmentation 결과이다.

Cityscapes

table_7

Table 7은 Test set에서 PSPNet을 다른 모델들과 비교한 결과입니다.

  • 학습에는 fine annotation data만을 사용하였고, coarse annotation data까지 함께 학습시킨 모델은 $\ddagger$로 표시합니다.
  • DeepLab과의 공정한 비교를 위해 ResNet101 기반의 PSPNet으로 비교합니다.
  • PSPNet이 가장 좋은 성능을 보입니다.

image-20210206201928062

  • Figure 8은 Cityscapes datset에서의 PSPNet의 segmentation 결과를 나타낸 것입니다.

6. Concluding Remarks

6.1 Advantages

  • Global Average Pooling이라는 이미 나온 개념을 가져와서 해당 문제의 특징을 잘 해결한 논문입니다.
  • GAP의 크기를 다양하게 적용해서 다양한 크기의 정보를 추출했습니다.

6.2 Disadvantages

참고자료

[이론]

[코드]