본문 바로가기
AIML 분야/Segmentation

[연구노트] Semantic Segmentation 살펴보기

by 포숑은 맛있어 2021. 2. 15.
반응형

팬옵틱에 이어 시맨틱 세그멘테이션 공부가 필요해져 오늘 서베이를 시작했다.

 

 

Semantic segmentation은 픽셀단위의 classification이라고 보면 될 것 같다.

semantic segmentation에서 주로 무슨 모델을 쓰고있는지를 몰라서 아래 글을 읽고 있다.

 

이미지 및 본문 내용 출처는 아래 링크이다.

 

개인적으로 두번째 글이 많은 연구를 커버한 것 같다.

 

instance seg = 녹색, semantic seg = 붉은색.

 

여기에 추가로, panoptic seg에는 저번 포스트에 언급한 EfficientPS(20), Panoptic Deeplab(19), UPSNet(19)도 있다.


 

 

일반적인 semantic segmentation (SS) 접근방식?

 

"인코더-디코더 구조"

 

인코더는 주로 Pretrained model을 사용한다. 예를 들면 VGG, ResNet.

이런 CNN모델들로 feature를 뽑은거다보니까 low resolution을 가지는데, 이걸 디코더에서 high resolution으로 맵핑한다.

그래서 discriminative space로 맵핑하는 것 뿐만 아니라, pixel space에서 굉장히 dense하게 보내는 것이 필요하다.

따라서 디코더파트가 어떤지 궁금한데, 디코딩 방식을 크게 두가지로 볼 수 있을 것 같다.

 

 

1. Region-based SS.

주로 recognition pipeline을 가진다.

이름은 한번쯤 들어봤을 Mask RCNN이 바로 여기에 해당한다.

예시)  SDS, Hypercolumns, Mask R-CNN.

 

 

Mask RCNN.

 

이 방식의 몇가지 문제점

  • encoder의 pretrained network로 뽑은 feature는 거의 classification task (ImageNet) 용도였지, 세그멘테이션 용도가 아니었다. 그래서 호환이 될까?에 대한 문제.
  • boundary에 대한 정보 부족.
  • segment기반의 proposals을 만드는데에 시간이 꽤 걸리는데, 또 이게 최종 성능에도 영향을 많이 미친다는 것.

 

 

2.FCN based.

Fully convolutional network (FCN)은 region proposal을 추출하지 않고도 pixel-to-pixel 맵핑을 어떻게 할 것인지 배운다.

여담이지만 난 시맨틱 세그멘테이션을 원래 이렇게만 푸는 줄 알았다.

U-Net도 여기 해당된다.

 

예시) SegNet, DeepLab-CRF, Dilated Convolutions.

 

주로 FCN 기반의 방법인 것 같으니, 약간 더 살펴봤다.

  • 먼저 classification -> segmentation으로 knowledge transfer 해줘서피쳐를 뽑아준다.
  • 그리고 1*1 conv 적용.
  • upsampling 해줘야한다. 이건 transposed convolution을 통해 수행한다.
    위 글의 예제를 보니까 bilinear interpolation filter 값으로 이니셜라이제이션 했다고 한다.

 

 

(추가) Weakly supervised.

아무래도 segmentation은 픽셀 모두에 레이블을 부여해야하니 어노테이션이 많이 들어간다.

그래서 여기에 초점을 둔 연구들도 있는 것으로 보인다.

 

 

DeepLab-Based.

두번째 medium 글에서는 딥랩도 소개된다.

해당 글이 2020년 10월말에 작성되었는데, 이때 기준 real-time이 되는 것 중 SOTA라고 한다.

 

딥랩v1은 기존의 FCN 기반에다가 두가지 업그레이드된 버전이라고 한다.

  1. atrous convolution (dilated)의 적용
    이를 통해 적은 파라미터로도 high resolution이 가능하도록 고려.
  2. fully connected CRFs.
    localization 성능 향상을 위해 도입.

 

 

 

딥랩 v2.

 

앗. panoptic deeplab에서 봤던 ASPP다. 어째 내 공부 순서가 바뀐 것 같은건 기분탓인가.

  • ASPP (Atrous Spatial Pyramid Pooling)의 도입
    이 블럭에서는 여러개의 dilation parameter를 가진 conv 연산을 다 적용해서 다양한 영역을 커버할 수 있게 한다.
    이를 통해서 object를 멀티스케일로 볼 수 있게 된 것.

 

 

딥랩 v3.

 

Atrous convolution이 조금 더 바뀌었다.

연속적으로 적용하기도 하고, 뒷부분에서는 parallel하게 적용하기도 한다.

거기에 ASPP모듈 맨 마지막에 GAP도 추가.

* 이 모듈은 ResNet 백본 사용한다.

 

딥랩 v3+.

arxiv.org/pdf/1802.02611v3.pdf

 

atrous separable convolution을 사용한다.

separable convolution을 쓰는 주된 이유는 연산의 효율성때문이니까, 같은 목적에서 도입된 것으로 보인다.

 

  • Xception backbone을 수정하여 사용했음.
  • Max pooling, BN 대신에 atrous separable conv로 대체.

 

 

그런데 딥랩v3라고 해봐야 2017년도라, semantic segmentation에 대해서는 더 최근 논문 리뷰가 필요할 것 같다.

아래 언급한 FastFCN이라든가, 어디선가 스쳐본듯한 HRNet같은 것.

 

 

그 외.

  • DETR: 트랜스포머 덕에 end-to-end가 가능해져 작년에 화제가 되었던 논문. panoptic segmentation에서 잘된다.
  • FastFCN: Joint Pyramid Upsampling(JPU) module을 사용하여 low resolution -> high resolution으로 upsampling한다.
  • Reverse Attention Network: trains the model to capture the opposite concept
    (i.e., features that are not associated with a target class) as well
  • Pyramid Attention Network: attention mechanisms + spatial pyramid pooling mechanism 두 개념을 합침
  • EfficientNet backbone을 요즘에는 세그멘테이션에서도 많이 쓴다고 한다.

 


Papers With Code 찾아보기

원래 FastFCN, HRNet을 찾아보려고 했는데 여기를 보니까 또 새로운 것들이 나왔다.

 

Pascal Conetxt

paperswithcode.com/sota/semantic-segmentation-on-pascal-context

 

Cityscapes

paperswithcode.com/sota/semantic-segmentation-on-cityscapes

여기엔 EfficientPS, Panoptic Deeplab처럼 원래 panoptic segmentation의 논문들도 최상위권에 있다.

 

 

그리고 Axial Attention 쓴 것도 순위권에 있다. arxiv.org/abs/2101.07434v1

NAS를 활용한 것도 있다. arxiv.org/pdf/2003.11883v1.pdf

 

 

그러면 봐야할 논문은 어느정도 추려진 것 같다.

반응형

댓글