[P stage 2 DAY 51] Sementic Segmentation (2)

먼지감자·2021년 10월 19일
0

AI Boostcamp 2기

목록 보기
40/48
post-custom-banner

강의 내용 복습

(04강) FCN의 한계를 극복한 모델들 1

1. FCN의 한계점

  1. 객체의 크기가 크거나 작은 경우 예측을 잘 하지 못하는 문

    큰 Object의 경우 지역적인 정보만으로 예측 - 유리창에 비친 자전거를 자전거로 인식하는 문제
    같은 Object여도 다르게 labeling
    작은 Object가 무시되는 문제가 있음

  2. Object의 디테일한 모습이 사라지는 문제 발생
    Deconvolution의 절차가 간단해 경계를 학습하기 어려움

2. Decoder를 개선한 models

2.1 DeconvNet

Decorder 를 Encoder와 대칭으로 만든 형태
1. Convolution Network는 VGG16을 사용
• 13개의 층으로 이루어짐
• ReLU와 Pooling이 convolution 사이에서 이루어짐
• 7 x 7 Convolution 및 1 x 1 Convolution 을 활용
2. Deconvolution Network는 Unpooling, deconvolution, ReLU으로 이루어짐

  • Unpooling vs Deconvolution
    Unpooling과 Transposed Convolution이 반복적으로 이루어진 형태
    • Unpooling은 디테일한 경계를 포착
    • Transposed Convolution은 전반적인 모습을 포착

Unpooling ; 위치 정보 기억
Pooling의 경우 노이즈를 제거하는 장점이 있지만, 그 과정에서 정보가 손실되는 문제가 생김
• Unpooling을 통해서 Pooling시에 지워진 경계에 정보를 기록했다가 복원
• 학습이 필요 없기 때문에 속도가 빠름
• 하지만 sparse한 activation map을 가지기 때문에 이를 채워 줄 필요가 있음
• 채우는 역할을 Transposed Convolution이 수행
Deconvolution ; Pooling의 경우 노이즈를 제거하는 장점이 있지만 그 과정에서 정보가 손실되는 문제가 생김
• Deconvolution layers를 통해서 input object의 모양을 복원
• 순차적인 층의 구조가 다양한 수준의 모양을 잡아냄
• 얕은 층의 경우 전반적인 모습을 잡아냄
• 깊은 층의 경우 구체적인 모습을 잡아냄

  • Analysis of Deconvolution Network
    빨간 네모 박스가 Transposed Conv 의 경우

Deconvolution Network의 Activation map을 보면 층과 pooling 방법에 따라 다른 특징이 있음
• Unpooling의 경우 “example-specific”한 구조를 잡아냄 (자세한 구조를 잡아냄)
• Transposed Conv의 경우 “class-specific”한 구조를 잡아냄 (위의 구조에 빈 부분을 채워넣음)
• 실제로 둘을 병행시에 FCN보다 DeconvNet의 활성화 맵이 디테일해지는 모습을 볼 수 있음

2.2 SegNet

SegNet의 발전 동기
• Road Scene Understanding applications라는 분야에서 Semantic Segmentation을 수행하기 위해
모델이 필요한 능력에 대한 고민
• 특히, 자율 주행에 있어 차량, 도로, 차선, 건물, 보도, 하늘, 사람 등의 class를 빠르고, 정확하게 구분할 수 있어야함
-> Real Time segmentation


1. 가운데 부분 제거해서 파라미터 수 감서 -> 속도 향상
2. 크기 키우는 부분 Transposed 사용하지 않고 Unpooling 사용해서 학습 필요없음
3. Secoder 부분에서 Sparse -> Dense 로 바꾸어 줄때 Deconv가 아닌 conv 사용 | 마지막에 Deconv 두개 였는데 Conv 하나로 바꿈
4. Score 예측시 1x1 -> 3x3 Conv 사용

2.3 DeconvNet vs SegNet

3. Skip Connection을 적용한 models

3.1 FC DenseNet

  • Skip Connection
    Neural network에서 이전 layer의 output을 일부 layer를 건너 뛴 후의 layer에게 입력으로 제공하는 것
    Resnet

  • Architecture

    feature map합치는 방법은 channel 별 concat

3.2 Unet


인코더의 정보를 skip connection을 통해 decoder로 건네줌

4. Receptive Field를 확장시킨 models

4.1 DeepLab v1

  • Why the receptive field is so important?
    Case I : bird Image (A) 에서, 서로 다른 receptive field를 가지는 segmentation을
    진행한다면?

    Case II : 아래 image에서, receptive field가 작은 segmentation을 진행한다면?
    receptive field가 bus에 대한 정보를 다 포함하지 못하므로 예측 정확도가 낮음

  • What is the receptive field?
    (Case I : Conv → Conv 의 receptive field)

    (Case II : Conv → Max Pooling → Conv 의 receptive field)

    conv-maxpooling-conv 반복시 효율적으로 receptive field를 넒힐 수 있음
    그러나, Resolution 측면에서는 Upsampling 시 해상도가 낮아지는 문제점 발생
    -> 이미지의 크기는 많이 줄이지 않고 마라미터의 수도 변함이 없는 채로 Receptive Field 만 넓게 하는 방식이 없을까?

  • Dilated Convolution

    파라미터 갯수 동일하지만 Receptive Field만 넓어짐

  • DeepLab v1

    2x2 max pooling -> 3x3 max pooling
    dilated conv

    conv4, 5는 pooling 시 padding 1 주어 이미지 사이즈 그대로 유지
    conv 5는 dilation rate =2 주어 receptive field 더 크게 함 -> 코드에서는 max pool 과 avg pool 두번 하는 방법 사용

    conv1,2,3 를 통해 input image 크기 1/8이 되었고, 이를 Bilinear Interpolation UpSampling 해줌

  • Bilinear Interpolation
    내분을 이용한 계산

  • Dense Conditional Random Field (Dense CRF, a.k.a Fully-Connected CRF)
    Bilinear Interpolation 으로는 픽셀 단위의 정교한 segmentation이 불가능
    이를 개선하기 위한 후처리 방법 → Dense CRF

DeepLab v1 전체 pipeline

4.2 DilatedNet


2x2 max poolong 적용
conv4,5 에서 pooling 제거
FC6 에서 7x7 conv에 rate = 4
UpSampling 시 Deconv 사용

conv5에서 dilate eate = 2를 줘서 이미지 크기 변함 없게 함

  • Basic Context module

    dilate 비율 다양하게 -> receptive field도 다양하게

Further Reading
DeconvNet
SegNet
DeepLabv1
DilatedNet


(05강) FCN의 한계를 극복한 모델들 2

1.Receptive Field를 확장시킨 models

1.1 DeepLab v2


서로 다른 dilate rate 를 가지는 branch 4개를 sum을 취하는 형태 : 논문에서는 ASPP 라고 표현

rate 작 : 작은 이미지 / rate 큰 : 큰 이미지

  • resnet 101
    conv4,5 에서는 dilated conv 사용

결과
ASPP 적용은 1.2 증가
CRF 적용시 훨씬 더 큰 성능향상 보임

1.2 PSPNet

PSPNet 도입배경
FCN의 문제점

  • Mismatched Relationship
    • 호수 주변에 boat가 있는데 기존 모델(FCN)은 car로 예측
    • 이유 :boat의 외관이 car와 비슷하기
      때문
    • idea :주변의 특징을 고려
      (e.g.water 위의 boat)
  • Confusion Categories
    • FCN은 skyscraper를 skyscraper 와 building을 혼돈하여 예측
    • 원인 : ADE2OK data set의 특성상 비숫한 범주인 building과 skyscraper 존재
    • idea : category간의 관계를 사용하여 해결 (global contextual information 사용)
  • Inconspicuous Classes
    • FCN은 pillow를 bed sheet로 예측
    • 원인: pillow의 객체 사이즈가 작을 뿐만 아니라 bed sheet의 커버와 같은 무늬 예측에 한계
    • idea : 작은 객체들도 global contextual information을 사용

Pooling이 진행될수록 이론적인 사이즈오 실제 사이즈의 크기 차이가 커짐

  • Global Average Pooling
    주변 정보(문맥)을 파악해서 객체를 예측하는데 사용
    Average pooling은 4개의 영역으로 나누어 평균을 내므로 golbal context 정보를 가짐

    따라서 PSPNet에서는 grid 크기가 서로 다른 global Average pooling을 여러번 진행t 이후 (b)Feature map과 (c)pyramid pooling Module을 Upsample한 output을 서로 concat

  • 결과

1.3 DeepLab v3


ASPP에 global Average Pooling (Feature map을 전부 평균내서 1x1 크기를 만들어줌) 추가로 golbal context 더 잘 캐치
차이점

  • dilate rate 6,12,18,24 에서 6,12,18 세가지 사용
  • 1x1 conv 추가
  • 기존에는 summation / v3 에서는 concat 후 1x1 conv 적용
  • Bilinear interpolation 사용

1.4 DeepLab v3+

Architecture

  • Encoder - decoder 구조
    Encoder에서 spatial dimension의 축소로 인해 손실된 정보를 Decoder에서 점진적으로 복원

Encoder

  • 수정된 Xception을 backbone으로 사용
  • Atrous separable convolution을 적용한 ASPP모듈 사용
  • Backbone 내 low-level feature와 ASPP모듈 출력을 모두 decoder 에 전달

Decoder

  • ASPP 모듈의 출력을 (bilinear)up-sampling하여 low-level feature와 결합

  • 결합된 정보는 convolution 연산 및 up-sampling 되어 최종 결과 도출

  • 기존의 단순한 up-sampling 연산을 개선시켜 detail을 유지하도록 함

  • modified Xception Backbone
    Xception 구조는 Depthwise Separable convolution을 사용

    • Depthwise convolution
      각 채널마다 다른 filter를 사용하여 convolution 연산 후 결합
    • Pointwise Convolution
      = 1x1 convolution
    • Depthwise Separable convolution
      Depthwise + Pointwise 합침
    • modified Xception Backbone
    1. Entry Flow : Maxpooling 연산을 (Depthwise Separable Convolution + BN + ReLU) 로 변경
    2. Middle flow : 반복 횟수 8->16 증가로 더 깊은 layer 사용 ,
    3. Exit flow : Maxpooling 연산을 (Depthwise Separable Convolution + BN + ReLU) 로 변경 , Depthwise Separable Convolution 연산 추가

1.5 DeepLab v1 부터 DeepLab v3+까지 정리

2. 결론

2.1 정리

  1. 인코더-디토더 구조를 갖는 DeconvNet, SegNet
    Upsampling 기법으로 UnPooling사용(Max UnPooling) -> 자세한 구조적인 모습 복원
    Transposed Conv 사용하여 구조 안을 채움 | 둘을 함께 쓰면 성능 향상
    Segnet 은 real time가능

  2. Skip Connection
    FC Dense Net, UNEt

  3. receptive field 크게
    Dilated Convolution 사용 - DeepLab v1

    Dense CRF - DeepLab의 단점을 보완하는 후처리 기법

    Dilated Net - DeepLab v1에서는 3x3 maxpooling , 여기서는 2x2 3번 적용 / covnv4,5 max pooling 제거 / conv5, fc6 에서 dolated conv적용 / UpSampling시 Transposed conv 사용 | Basic Context module 추가로 dilate 비율 다양하게 적용

    DeepLab v2 - covn5 avg pooling제거 / ASPP 적용 - 다른 rate를 가지는 dilate conv 이후 summation / backbone resnet

    PSPNet - FCN의 3가지 문제점(객체들간의 관계 캐치 못함, 비슷한 클래스 객체 혼동, 무늬 비슷하고 작은 객체 구분 못함) 해결 -> global context -> global average pooling + average pooling 함께 사용

    DeepLab v3 - global average pooling을 ASPP 영역에 적용 / sum이 아닌 concat하여 결과 합침

    DeepLab v3+ - backbone에 modified Xception 적용 / 인코더-디코더 구조로 low level + ASPP feature 결합해서 사용 / 단계적인 UpSampling

Further Reading
DeepLabv2
PSPNet
DeepLabv3
DeepLabv3+


과제 수행 과정 및 결과


피어 세션


학습 회고

profile
ML/AI Engineer
post-custom-banner

0개의 댓글