본 글은 네이버 부스트 캠프 AI Tech 기간동안
개인적으로 배운 내용들을 주단위로 정리한 글입니다
본 글의 내용은 새롭게 알게 된 내용을 중심으로 정리하였고
복습 중요도를 선정해서 정리하였습니다
✅ Week 5
- Instance Segmentation
- What is Instance?
- Mask R-CNN
- YOLACT
- YolactEdge
- Panoptic Segmentation
- What is Panoptic?
- UpsNet
- 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
모델의 네이밍 부터 벌써 어디서 많이 본 모델이다
바로 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 추출 영역을 가질 수 있게 되었다
🌸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
앞에서 살펴본 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
모델의 구조를 보아도 어디서 본듯한 구조이지 않은가?
바로 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로 확장한 모델로
간단하게 이전 프레임에서 특징을 빌려와서 진행을 하게 만들어
현재 프레임에서 추출되지 않은 feature도 detection하기 쉽게 만들어준다
그리고 여러 feature을 합쳐서 사용하여 시간적으로 연속적인 부드러운 segmentation이 가능해진다
VPN을 통해서 ROI 들의 feature 를 추출해서 tracking head를 통해서 기존 ROI들과 현재 ROI들이 어떻게 서로 연관 되어있는지, 이전에 몇번 id를 가졌던 물체였는지를 찾아서 연관성을 만들어주고
같은 물체는 같은 ID 를 가질 수 있도록, 시간에 따라서 tracking할 수 있게 해준다
이후 과정은 UPSNet과 같다
'네이버 부스트캠프 🔗 > ⭐주간 학습 정리' 카테고리의 다른 글
[네이버 부스트 캠프 AI Tech]Conditional Generative Model (0) | 2023.04.03 |
---|---|
[네이버 부스트 캠프 AI Tech]Landmark Localization & Detecting objects as keypoints (0) | 2023.04.03 |
[부스트 캠프]Week 4 회고 및 Week 5 목표 정리 (0) | 2023.04.02 |
[네이버 부스트 캠프 AI Tech] Object Detection의 흐름 (0) | 2023.03.31 |
[네이버 부스트 캠프 AI Tech] Semantic segmentation의 흐름 (0) | 2023.03.30 |