네이버 부스트캠프 🔗/⭐주간 학습 정리

[네이버 부스트 캠프 AI Tech] Instance & Panoptic Segmentation

Dobby98 2023. 4. 3. 14:25

본 글은 네이버 부스트 캠프 AI Tech 기간동안

개인적으로 배운 내용들을 주단위로 정리한 글입니다

 

본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고

복습 중요도를 선정해서 정리하였습니다

 

✅ Week 5

  1. Instance Segmentation
    1. What is Instance? 
    2. Mask R-CNN
    3. YOLACT
    4. YolactEdge
  2. Panoptic Segmentation
    1. What is Panoptic?
    2. UpsNet
    3. VpsNet

✅1. Instance Segmentation

우리는 지난 시간까지 Semantic Segmentation과 Object detection의 흐름을 살펴보았다

그러나 이러한 task들은 최근 들어서 연구가 활발하게 진행되지 않고 있다

 

그 이유는 무엇일까?

바로 Instance Segmentation과 뒤에서 살펴볼 Panopitc Segmenataion과 같이 

조금더 상위호환적이고 실용적인 task가 등장했기 때문이다

 

따라서 이 task들을 살펴보고 대표적인 모델들을 탐구해 보면서

전체적인 흐름을 이해해보자


1.1 What is Instance Segmentation?

 

사실 Instance Segmentation은 간단하게 한줄로 요약할 수 있다

바로 Semantic Segmentation에 객체 구별을 포함한 것이다

 

기존의 Semantic Segmentation의 경우에는 같은 사람 클래스에 속하는 픽셀은 같은 결과 같으로 출력했다

즉, 이미지 내에 사람이 5명 존재한다고 해도 이들을 사람으로 처리할 뿐 구별을 하지는 못했다

 

하지만 Instance Segmentation은 이러한 Semantic Segmentation에 instance 구별을 추가한 것이다

즉, 이미지 내에 사람이 5명이 존재한다면 사람1, 사람2, 사람3 ... 사람5로 구별하는  task인 것이다

 

위의 사진을 보면 이해가 빠를 것이다

 

어떤 면에서는 Semantic Segmentation과 Object detection을 합쳐놓은 느낌이다

 

따라서 Instance Segmentation도 기존 Semantic Segmentation과 Object detection에서 활용된 방법들을 기반으로 발전했다

이제부터 Instance Segmentation의 대표 모델들을 살펴보자

 


1.2 Mask R-CNN

 

Mask R-CNN 논문(Mask R-CNN) 리뷰

이번 포스팅에서는 Mask R-CNN 논문(Mask R-CNN)을 읽고 리뷰해보도록 하겠습니다. Mask R-CNN은 일반적으로detection task보다는 instance segmentation task에서 주로 사용됩니다. Segmentation 논문을 읽어본 경험이

herbwood.tistory.com

 

Mask R-CNN 리뷰

작성자 1 : 한양대학원 융합로봇시스템학과 유승환 석사과정 (CAI LAB) 작성자 2 : 한양대학교 로봇공학과 정석훈 학부생 오늘은 Pixel 단위로 물체를 localize하는 Segmentation 모델인 Mask R-CNN 논문 리뷰

ropiens.tistory.com

모델의 네이밍 부터 벌써 어디서 많이 본 모델이다

바로 Object detection에서 살펴본 R-CNN 계열의 모델이다

 

우리가 살펴본 R-CNN 계열 중 마지막 모델을 떠올려 보자

바로 Faster R-CNN이다 

 

그렇다면 Faster R-CNN과 Mask R-CNN의 차이점은 무엇일까?

여러가지가 있지만 정리하면 크게 아래 두가지 이다

 

(1) RolAlign

(2) Mask branch

 

🌸RolAlign

기존 R-CNN 계열의 모델을 살펴보면 - Fast R-CNN부터 ROI pooling을 사용을 했다

하지만 이 ROI pooling의 경우 정수 좌표만을 지원했다 따라서 정수 영역에서만 Feature을 추출할 수 있었다

이를 위해서 Stride를 반올림하여 정수를 유지해줄 수밖에 없는데 이러한 방법은 정보 손실을 가져오면

feature와 RoI 사이가 어긋나는 misalignment문제가 발생한다 

 

그러나 Mask R-CNN은 RolAlign을 사용하는데 이는 실수 좌표를 지원해 준다

따라서 조금더 정교한 Feature 추출 영역을 가질 수 있게 되었다

 

Understanding Region of Interest — (RoI Pooling)

Quick and easy explanation of what is RoI Pooling and how it works? Why do we event using it in Fast R-CNNs?

towardsdatascience.com

 

🌸Mask branch

 

'

위의 사진을 통해서 이해할 수 있듯이 Mask R-CNN은 기존의 Faster R-CNN에 Mask FCN을 추가한 모델이다

Mask Branch에 대해서 조금더 자세히 살펴보자

간단하게 Faster R-CNN에서는 ROI pooling된 feature Map을 통해서 class를 분류하고 Box regreesion을 진행했다

반면, Mask R-CNN은 여기에 하나의 과정을 병렬로 진행한다 

바로 Mask predict이다 

앞에서 만들어진 feature map을 활용해서 FCN의 구조를 지나가게 해서 마지막에 클래스 갯수 만큼 채널을 가진 마스크를 출력하는 것이다 

여기서 만들어지는 output은 ROI의 클래스별 binary mask인데

쉽게 말해서 클래스가 80개라면 해당 ROI에 해당 클래스의 픽셀이 있는지 없는지로 나타내는 것이다

따라서 80개 채널은 각각 1개의 클래스의 Binary Mask로 표현된다

 

+ loss function은 multi loss function을 사용한다

 Loss_class + Loss_box + Loss_mask을 합쳐서 loss function으로 사용한다

여기서 Loss_class와 Loss_box는 기존 object detection의 loss와 같다

그리고 새롭게 축사된 Loss_mask의 경우 average binary cross-entropy를 활용한다


1.3 YOLACT

 

논문 리뷰 - YOLACT: Real-time Instance Segmentation

Instance segmentation 문제를 real-time으로 해결할 수 없을까? 라는 의문으로 시작이 된다. 여태까지의 instance segmentation 모델은 잘 만들어진 object detection에 병렬적으로 모델을 추가하여 (e.g., mask R-CNN(Fas

byeongjokim.github.io

앞에서 살펴본 Mask R-CNN이 two stage model이었다면

이번에 살펴볼 모델인 YOLACT는 one stage model이다 

object detection에서 이미 익숙한 이름들이기 때문에 충분히 유추했을 것이다

 

모델의 핵심은 간단하다 

이름에서 알 수 있듯이 YOLO계열의 모델이기 때문에 당연히 real time을 목표로 한다

따라서 성능보다는 속도에 초점을 맞추고 있다

 

따라서 YOLACT는 Mask R-CNN과 비교했을 때 몇가지 과정을 생략한다

바로 feature localization과정이다

이 내용은 object detection 에서 다룬 내용이다

 

그렇다면 YOLACT는 어떻게 문제를 해결했을까?

아래의 두가지 방법이 핵심이다

(1) 전체 이미지에 대한 prototype mask dictionary 생성

(2) instance 마다의 linear combination coefficients 예측

 

이를 위해서 두개의 task로 모델이 나누어진다

(1) prototype masks 생성

 

FCN을 활용해서 최종 layer가 k개의 채널을 가지게 하는데 

이는 클래스 갯수로

클래 갯수 만큼의 prototype mask를 생성하는것이다

쉽게 클래스별 prototype mask를 생성한것이다

 

 

(2) mask coefficients를 예측하기 위한 object detection task

이는 기존의 object detection 과정과 같다 anchor box를 이용해서 object을 detect하여 

class confidences와 x,y,w,h를 계산한다

그리고 이를 통해서 k mask coefficient를 예측하여 각 prototype에 해당하는 내용을 갖는다

 

결국 위에서 만들어진 prototype mask와 mask coefficient를 weight sum하고 - linear combination

이를 sigmoid를 사용하여 최종 mask를 출력한다

 

prototype mask shape -> h * w * k 

mask coefficients shape -> n * k


1.4 YolactEdge

하지만 이렇게 형성한 YOLACT는 아직 작은 기기에서 작동하지 못한다는 단점이 있었다

이를 해결하기 위해서 만든 모델이 YolactEdge로 조금더 모델을 경량화 했다고 이해하면 된다

이전 frame에서 key frame의 feature를 추출하고 다음 frame에 전달하여서 feature map의 계산량을 줄였다 

하지만 독립적으로 processing 되기 때문에 mask가 불안정하다는 문제점도 존재한다

 


지금까지 Instance Segmentation에 대해서 알아보았다

하지만 이러한 Instance Segmentation은 배경을 무시한다

즉, 움직이는 객체에만 관심이 있고 뒤에 존재하는 배경은 탐지 하지않는다

 

이를 탐지하기 위해서 Semantic Segmentation을 사용해야한다

그러나 그럴 경우 instance Segmentation의 장점을 활용할 수 없다

 

따라서 이를 해결한 task가 바로 Panoptic Segmentation이다 

이제 Panoptic Segmentation에 대해서 알아보자


✅2. Panoptic Segmentation

2.1 What is Panoptic Segmentation?

위에서 이미 언급을 했기 때문에 간단하게 살펴보면

Instance segmentation의 단점인 background 구별을 개선한 task로

 

instance segmentation + semantic segmentation이라고 볼 수 있다

즉, instance와 background를 같이 구별하는 task이다

 

이제 Panoptic Segmentation의 대표적인 모델들을 살펴보자

 


2.2 UPSNet

 

Review — UPSNet: A Unified Panoptic Segmentation Network

Panoptic Head, Combine Semantic & Instance Segmentation Heads

sh-tsang.medium.com

모델의 구조를 보아도 어디서 본듯한 구조이지 않은가?

바로 Semantic Segmentation과 Instance Segmentation을 합쳐놓은 구조같다

간단하게 Semantic Head와 Instance Head를 진행하고 이를 Panoptic Head를 통과시켜서 

하나의 출력을 만드는 과정을 구성한 모델이 UPSNet이다

 

핵심인 Panoptic Segmentation head 구조를 자세히 살펴보면 다음과 같다

 

Semantic head에서 만들어진 semantic map과

Instance head에서 만들어진 instance mask를 활용하여 진행하는 과정으로

 

각 instance들을 b-box가 아니라 전체 image 중 해당하는 위치에 넣기 위해 을 mask해서 더한 후 최종출력으로 보내고

Instance와 object 모두에 해당하지 않는 부분은 제외해서 unknown class로 만든 후 1 channel로 최종 결과에 추가한다

 

 


2.3 VPSNet

Panoptic segmentation을 video로 확장한 모델로 

 

CV 7강) Instance/Panoptic Segmentation and Lankmark Localization

같은 물체라도 instance에 따라 구분Semantic segmentation + Digtingushing instances기존의 Faster R-CNN과 거의 동일한 구조RoIAlign이라는 새로운 pooling layer를 제안, interpolation을 통해

velog.io

간단하게 이전 프레임에서 특징을 빌려와서 진행을 하게 만들어

현재 프레임에서 추출되지 않은 feature도 detection하기 쉽게 만들어준다 

그리고 여러 feature을 합쳐서 사용하여 시간적으로 연속적인 부드러운 segmentation이 가능해진다

 

VPN을 통해서 ROI 들의 feature 를 추출해서 tracking head를 통해서 존 ROI들과 현재 ROI들이 어떻게 서로 연관 되어있는지, 이전에 몇번 id를 가졌던 물체였는지를 찾아서 연관성을 만들어주고 

 

같은 물체는 같은 ID 를 가질 수 있도록, 시간에 따라서 tracking할 수 있게 해준다

 

이후 과정은 UPSNet과 같다

오) VPSnet output