꺼내먹는지식 준

YOLACT 본문

카테고리 없음

YOLACT

알 수 없는 사용자 2022. 3. 14. 12:51

https://www.youtube.com/watch?v=2i56S0tNUj8 

 

내가 좋아하는 PR series 

https://byeongjokim.github.io/posts/YOLACT,-Real-time-Instance-Segmentation/

 

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

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

byeongjokim.github.io

생각보다 이번 PR 시리즈 이해가 어려워서 참고한 블로그 


동기

 

실시간 instance segmentation 을 위한 논문 

같은 class 라도 개체들을 분류해낼 수 있는 해결방법 

 

성능은 저하되지만 속도가 향상된 one stage 

기존 one stage깁버 computation이 무거운 계산량이 들어간 경우들을 개선 

One stage - Real time instance segmentation이 목표이기에 간단하고, 병렬적 구조 

 

1) Prototype mask 생성 

2) Instance 별로 mask coefficient 예측 단계 

  • Residual neural net 을 통해서 c1 ~ c5 feature map 구성 $\rightarrow$ FPN 구조를 통해서 P3 ~ P7 총 5개 feature map 새로 생성 
  • feature를 뽑은 후, prototype mask 생성 
  • Instance 별로 mask coefficient 따로 따로 예측 단계 
  • mask 와 coefficient 값을 선형 결합하여 최종적 하나의 coefficient 값을 구함 (RoI 영역 없이도 특정 영역 localize 가능)
  • 마지막 부분에서 해당 방식으로 가장 적합한 instance 하나만을 출력 

 

1)Protoype mask 생성 branch 

 

: k개의 prototype mask 예측

2 stage 였다면 먼저 RoI pooling을 통해 가장 적합한 영역을 먼저 축소시키고, 그 안에서 segmentation을 진행하겠지만,  

제안 모델은 1 stage, FCN 사용으로 어떤 section을 먼저 뽑지 않고 전체 이미지가 들어간다. 

전체 이미지 활용으로 k 개 mask 예측 

 

protoNet: feature map localize할 수 있도록 학습된다. 

 

장점 

 

backbone feature로부터 protoNet을 사용하고 feature 를 extraction 

(backbone: FPN retina net 에서 제안된 작은 object에 대해 좋은 성능)

robust 한 mask 를 얻는다. 

해상도가 좀 더 좋다. 

이전에는 이전 해상도의 feature map의 정보를 담보를 담기 위해서 특정 operation하거나 이전 정보를 점차 무시해갔는데, 

제안 모델은 FPN에서 이전 해상도의 feature map 정보를 담기 위해서 feature map을 더한다. 이 부분에서 c3 ~ c5 의 정보가 p3 feaure map 에 반영 될 수 있어서 좀 더 딥하고, robust한 마스크 생성이 가능하다. 

 

output이 bound가 정해져 있지 않다. activation을 어느정도 할지 제한두지 않기에, 확실한 background, foreground 에는 과하게 activation할 수 있게끔 과하게 자유도를 높힐 수 있도록 한 것 

 

FCN 사용, 최종 layer은 k개의 채널을 가짐 

P3인 경우

, deep 한 backbone의 featuremap이고, upsample을 하였기 때문에 조그마한 물체에서도 좋은 성능을 내는 고 사양 masks를 얻을 수 있다. 마지막으로 ReLU activation function을 사용하여 background를 확실히 구분하였다. 

기존 anchor box 이용 object detection 모델들은 두가지를 예측 

c class confidence

x,y,w,h의 4 bounding box regression 

 

본 논문에서는 k mask coefficients 를 추가로 예측하여 각 prototype에 해당하는 정보를 가지고 있다. 

즉 한 anchor 당 4 + c + k 개의 값을 예측한다. 

 

Mask Assembly 

 

$M = \sigma(PC^T)$

 

prototype masks에 mask coefficient를 계수로 사용하여 linear combination 

위 수식에서 P 는 prototype masks로 h x w x k 의 shape

C는 NMS (FAST NMS)와 score thresholding에서 살아남은 n개의 instance의 mask coefficents 로 n x k 의 shape

$\rightarrow$ 두 매트릭스를 matrix multiplication 후 sigmoid 를 사용하면 최종 mask 

 

NMS

 

 

LOSS

 

classification, box regression loss는 SSD 와 같은 방식으로 계산 

mask loss는 GT와 pixel wise binary cross entropy 를 이용하여 계산 

각각 loss에는 weight가 주어졌는데 classification: box regression: mask = 1: 1.5: 6.125

 

최종 mask 에서, evaluation할 때에는 예측한 bounding box 를 이용하여 crop한다. 

반면에 training 일 때는 작은 object를 잘 보존하기 위해 GT bbox 를 이용하여 crop 한다. 

mask loss에 GT bounding box를 나누어 계산한다. 

 

 

Prototype 

 

Mask R CNN이나 FCIS 경우 traslation variance하도록 신경을 썼다. 

저자는 crop을 통해 이 단계 해결 

crop 단계를 빼도 중간 크기 이상의 물체에는 translation variance 하다. 

YOLACT가 다양한 prototype을 통해 instance의 위치를 잘 학습 할 수 있다. 

이미지 특정 부분을 activate하기 위해 다양한 prototype 사용. 

위 그림의 1,2,3 prototype을 보면 각 한 부분에 위치하는 물체만을 활성시킨 것을 알 수있다. 

이 세가지를 합치면 overlapping되어도 다른 instance를 잘 구분할 수 있다. 

추가로 학습된 mask coefficient를 이용하여 이미지에 알맞는 mask를 생성하도록 적절하게 prototype을 압축시킬 수 있다. 

실험시 k=32 prototype만 써도 성능은 나빠지지 않지만, coefficient를 예측하는게 쉬운일이 아니라 효과적이지 않다. 

 

결과

k 개수가 64 일 때 AP 가 최대를 기록하고, 8일 때 가장 빠르다. balance를 고려하여 논문에서는 32를 채택하여 사용 

Comments