꺼내먹는지식 준
YOLACT 본문
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를 채택하여 사용