https://kimjy99.github.io/논문리뷰/segment-anything/

어떤 object던지, 어떤 Image던지 또 다른 task specific한 training 없이 segmentation 할 수 있는 tool

웹 규모 데이터셋에서 사전학습 된 대규모 언어모델은 강력한 zero-shot 및 few-shot 일반화로 NLP를 혁신하고 있다(=foundation model).

위와 같은 foundation model은 학습 중 볼 수 있는 것 이상으로 task와 데이터 분포를 일반화할 수 있다.

목표: Image segmentation을 위한 foundation model을 구축하는 것. 즉 일반화를 가능하게 하는 task를 사용하여 광범위한 데이터셋에서 promptable model을 개발하고 사전학습 하는 것

질문

  1. zero-show 일반화를 가능하게 하는 task는 무엇인가?
  2. 해당 모델 아키텍처는 무엇인가?
  3. 어떤 데이터가 이 task와 모델에 힘을 실어줄 수 있는가?

Task

프롬프트의 아이디어를 segmentation으로 변환하는 것으로 시작

프롬프트: 전경, 배경, 대략적인 박스, segmentation 대상을 나타내는 모든 정보

Promptable segmentation task는 프롬프트가 주어지면 유효한 segmentation task를 반환하는 것이다.

유효한 마스크의 요구사항: 프롬프트가 모호한 경우에 출력이 그 객체 중 적어도 하나에 대한 합리적인 마스크여야함을 의미함

이 요구사항은 모호한 프롬프트에 대해 일관된 응답을 출력하는 언어모델을 기대하는 것과 유사함

Pre-training

Promptable segmentation task는 각 학습 샘플에 대한 일련의 프롬프트를 시뮬레이션하고 모델이 예측한 마스크를 ground truth와 비교하는 사전 학습 알고리즘을 제안한다.

prompt가 모호한 경우에도 항상 유효한 마스크를 예측하는 것이 목표이다.

Zero-shot transfer

사전학습 task는 모델이 모든 프롬프트에 적절하게 응답할 수 있는 능력을 부여한다. 그러므로 하위 task는 적절한 프롬프트를 엔지니어링하여 해결할 수 있다.

예를 들어 고양이에 대한 boundary box detector가 있는 경우 예측된 boundary box를 모델에 프롬프트로 제공하여 고양이 instatnce segmentation을 해결할 수 있다.

일반적으로 실용적인 segmentation task는 프롬프트로 캐스팅될 수 있다.

Segment Anything Model

image.png

SAM에는 위 그림처럼 세 가지 구성요소가 있다.

  1. 이미지 인코더

  2. 유연한 프롬프트 인코더

  3. 빠른 마스크 디코더

  4. 이미지 인코더

  5. 프롬프트 인코더

  6. 마스크 디코더

Data engine: segmentation의 ground truth를 포함하는 dataset

SAM은 대규모 데이터셋이 중요한데, web에서 쉽게 얻을 수 없다.

Data endine has three stages: Assisted-manual stage, Semi-automatic stage, Fully automatic stage

  1. Assisted-manual stage
  2. Semi-automatic stage
  3. Fully automatic stage