SOLO : Segmenting Objects by Locations 논문요약
Introduction
-
기존 segmentation 방식
-
Top-down 방식 :
-
“detect-then-segment”
-
ex. FCIS, Mask R-CNN, PANet, TensorMask…
=> SOLO는 box-free해서 box 위치/크기에 제약이 없고 FCN의 장점을 활용함.
-
-
Botton-up 방식:
-
affinity relation 학습. 각 픽셀에 embedding vector를 할당함.
-
ex. SGN, SSAP,….
=> SOLO는 mask annotation을 직접 학습하고, grouping post-processing없이 마스크와 카테고리를 end-to-end로 예측함.
-
-
SOLO Architecture
SOLO는 instance category에 따라 픽셀을 분류(Classify)하는데, 카테고리는 위치와 크기에 따라 결정됨.
-
Loction :
-
이미지를 SxS grid로 나누고, instance의 중심이 특정 grid cell에 위치한다고 가정.
- 만약 object center가 어떤 grid cell에 들어가게 되면, 그 cell은 semantic category를 예측하고 object instance를 segment함.
- center location category를 채널축으로 인코딩함( # channels = S^2)
- object center를 찾을 때 regression이 아니라 classification으로 접근함 -> instance수는 가변적이지만 channel수(S^2)는 고정되어 있는 모델에 적합함.
-
-
Size:
- FPN 사용해서 다양한 크기의 object를 잡도록 함.
Semantic Category
-
각 grid cell은 C-차원의 output을 형성하고, 각 object instance의 class probability를 나타냄.
-
즉, 총 output space는 S x S x C
Instance Mask
- 만약 S x S grids로 나눈다고 하면, mask는 총 S^2개가 형성됨.
-
instance mask output shape = H x W x S^2
-
grid(i,j)에 대한 채널이 k번째라고 할 때, k = i*S + j
- “CoordConv” operator :
-
위치에 대한 민감성(Spatially variance)를 높이기 위해 도입.
-
채널 2개가 추가됨 : pixel의 x-y coordinates에 대한 정보.
-
최종적으로 각 grid cell에 해당하는 segmentation result가 나오게 됨 -> NMS로 중복 마스크 제거
-
Network Architecture
-
Backbone : FPN으로 특성 추출
-
Network head: instance segmentation result 계산
-
align = adaptive-pooling, interpolation or region-grid-interpolation
-
mask는 원본에서 업샘플링된 형태.
Loss Function
category loss : focal loss 사용(sample imbalance 완화에 좋음)
mask loss:
-
N_pos = # of positive samples
-
p* : category target
-
m* : mask target
-
indicator function : if p* > 0, 1 otherwise 0
-
d_mask : GT mask와 predicted mask 간의 차이
-
Dice Loss : foreground와 background pixel을 자동적으로 밸런싱해줌.
Experiments
- grid number를 고정하는 것 보다 FPN으로 multi-scale에 대해 학습시키는 것이 성능이 더 좋음.
- FPN pyramids를 사용하면 다양한 스케일의 instance를 segment할 수 있음.
- CoordConv operator는 layer 1개일 때 제일 적합함.
- Dice Loss를 쓸 때 성능이 제일 좋음.
- Network head의 깊이가 7일때 성능이 제일 좋음.
Result
- 다른 instance에 대해 다른 mask prediction channels가 활성화되었음.
- contour detection에도 활용할 수 있음.
Decoupled SOLO
-
object가 (i, j)에 있다고 하면, k = i*S + j
-
k번째 마스크는 X의 j번째 텐서와 Y의 i번째 텐서의 element-wise multiplication과 같음.
- 성능은 거의 똑같지만 GPU 메모리를 덜 사용함.a