논문

Segment Anything

Beige00 2024. 7. 4. 13:41

0. Abstract

본 논문에서는 "Segment Anything (SA)" 프로젝트는 이미지 세분화를 위한 새로운 task, model, dataset을 소개한다.

Meta는 독자적인 efficient model을 data collection loop에서 사용하여 지금까지 가장 큰 segmentation dataset을 구축하였다. 이 데이터 셋은 1100만 장의 라이선스가 부여되고 privacy를 준수한 이미지에 대해 10억개 이상의 마스크를 포함하고 있다.

이 모델은 프롬프트 가능하도록 설계 및 훈련되어 새로운 이미지 분포 및 작업에 대해 zero-shot으로 전환할 수 있다.

다양한 task에서 모델의 능력을 평가한 결과, zero-shot 성능이 인상적이었다고 한다.

(Segment Anything은 Meta AI에서 개발한 새로운 이미지 분할 모델, 데이터셋, Task를 소개하는 프로젝트이다.)


1. Introduction

웹 규모 데이터셋에서 pre-train된 LLM들이 NLP 분야에 혁명을 일으키고 있으며, 이들은 강력한 zero-shot 및 few-shot 일반화 기능을 제공한다. 이러한 "foundation model"들은 훈련 중에 본 적 없는 작업과 데이터 분포에 일반화할 수 있는 능력을 가지고 있다. 이 기능은 Chain of thought과 같이 종종 프롬프트 엔지니어링을 통해 구현되는데, 이 논문에서는 수작업으로 만든 텍스트를 사용하여 LM이 해당 task를 위한 유효한 응답을 출력하도록 유도한다.  웹에서 풍부한 text corpus와 함께 확장 및 훈련될 때, 거의 Fine tuning된 모델들과 비교되기도 한다.

 

CV분야에서도 foundation model들이 연구도었지만, LM만큼 광범위하게는 아니다. CV분야에서 foundation model이라고하면 CLIP 등의 경우가 있고 훈련이 완료되면 설계된 text prompt를 통해 새로운 시각적 개념과 데이터 분포에 대한 zero-shot 일반화가 가능해진다. 또한 이러한 인코더들은 또한 다른 모듈들과 조합되며 downstream task도 수행할 수 있다.(DALL-E) 그러나 비전과 언어 인코더에 많은 진전이 이루어졌지만, 여전히 CV는 이 범위를 넘어서는 다양한 문제가 있으며 대부분의 경우 훈련데이터가 부족하다.

 

따라서, 이 연구에서는 Image segmentation을 위한 foundation model을 구축하는 것을 목표로 한다. 즉, prompt 가능한 모델을 개발하고  넓은 데이터셋에서 강력한 일반화를 가능하게 하는 task를 사용하여 pre-training을 한다. 이 모델을 사용하면 unseen data 분포에 대한 다양한 downstream segmentation task를 수행하고자 한다.

 

이 계획의 성공은 task, model, dataset에 달려있고 이들을 개발하기 위해 Image Segmentation에 대한 3가지 기준을 도입했다.

1. 어떤 task가 zero-shot generalization을 가능하게 할까?

2. 해당 모델의 아키텍처는 무엇인가?

3. 이 task와 모델을 지원할 data는 무엇일까?

 

이 질문들은 서로 연관이 되어 있으며 종합적인 솔루션이 필요하다. 먼저 충분히 일반적이어서 강력한 pre-training 목표를 제공하고 다양한 downstream applcation을 사용 가능하게 하는 prompt 가능한 segmentation "task"를 정의한다. 이 task는 유연한 프롬프트를 지원하고, 프롬프트에 따라 실시간으로 Segmentation mask를 출력할 수 있는 모델을 요구한다.

이러한 "model"을 훈련시키기 위해서는 다양한 대규모의 데이터 소스가 필요하다. 이를 해결하기 위해 "data engine"을 구현한다. 즉, 효율적인 모델을 사용하여 데이터 수집을 돕고 그렇게 수집된 데이터를 사용하여 모델을 개선하는 사이클을 반복하는 것이다. 

 

요약하자면, 모델이 어떻게 다양한 분할 작업을 처리할 수 있도록 설계되었는지, 그리고 필요한 대규모 데이터를 어떻게 수집하고 활용하는지에 대한 설명이다.

 

* Task : 자연어 처리(NLP)와 최근의 CV 분야에서, Foundation model은 새로운 dataset과 task에 대해 zero-shot 및 few-shot 학습을 수행할 수 있는 유먕한 development로 여겨진다. 그리고 이러한 zero-shot, few-shot 능력은 "prompting" 기술을 활용하여 이루어진다. (본 블로그에서도 CLIP과 Grounding DINO의 사례를 다루었다.)

이러한 사례에서 영감을 받아, Meta AI 팀은 "Promptable segmentation task"를 제안하며, 이 task의 목표는 어떠한 Segmentation prompt에 대해서도 전부 유효한 segmentation mask를 반환하는 것이다.
Prompt는 이미지에서 어떤 것을 분할할지에 대해 간단히 명시할 것이고, 구체적으로는 공간적 정보나 텍스트 정보를 포함할 수 있다. (ex. 가운데 남자가 입고 있는 노란색 셔츠)

이러한 prompt에 의해 출력될 마스크에 대한 요구사항은 Prompt가 모호하고 여러 객채를 가리키고 있더라도, 적어도 그 객체들 중 하나에 대해 합리적인 마스크를 추론해야 한다는 것을 의미한다.

이러한 task는 pre-training 목표로도 활용되며, Prompt 엔지니어링을 통해 일반적인 downstream segment task를 해결하는데도 사용된다. 이 task를 활용함으로써, 모델은 다양한 분할 요구에 대응이 가능하게 된다.

요약하자면, 본 논문에서 정의된 Prompt 가능한 task는 이미지에 대한 설명 정보를 토대로 Segment mask를 출력하는 것인데, 어떠한 Prompt가 오더라도 합리적인 mask를 추론하는 것이 TASK의 목표라고 할 수 있다.

 

* MODEL :  Promptable segmentation task와 real-world use를 목표로 한다면, 모델 아키텍처에 여러가지 제약이 걸린다.

1. Flexible : 모델은 다양한 형태의 프롬프트를 처리할 수 있어야한다.

2. Real time : Interactive use를 가능하게 하기 위해 이미지에서 mask를 실시간으로 계산할 수 있어야 한다.

3. Ambiguity-aware : 주어진 프롬프트가 모호할 때도 인식이 되어야한다.

Meta AI팀은 이러한 3개의 제약 조건을 모두 만족하는 간단한 디자인을 찾았다고한다. 그 모델의 구조는 다음으로 구성된다.

1. A powerful image encoder : 이미지에서 이미지 임베딩을 계산

2. A prompt encoder : 입력된 prompt를 임베딩

3. A lightweight mask decoder : 상기한 embedded image, embedded prompt를 결합하여 예측된 Segmentation mask

 

이 모델은 "Segment Anything Model"(SAM)이라고 이름지어졌다. SAM은 image encoder, fast prompt encoder, mask decoder를 분리함으로써, 동일한 이미지 임베딩을 다양한 프롬프트에 재사용할 수 있게 한다.

이를 통해 계산 비용을 분산시킬 수 있으며, 웹 브라우저에서 이미지 임베딩이 주어지면, prompt encoder, mask decoder가 50ms 내에 mask output을 낼 수 있다고 한다.

또한, SAM은 모호한 프롬프트에 대해 flexible하게 대응할 수 있도록(Ambiguity-aware) 여러 마스크를 예측하는 형태로 모델의 출력이 구성되어있다. 즉, 프롬프트에 대해 여러 유효한 분할 결과를 제공할 수 있는 것이다.

더보기

* Embedding

=> 고차원의 데이터를 저차원 공간으로 표현하는 방법.

이미지 임베딩이란 복잡한 object인 이미지를 변환 과정을 통해 저차원(Vector 등)으로 변환한 것을 의미한다.

이 과정에서 정보의 손실은 피할 수 없으며, 다양한 기법을 통해 핵심 정보만 추출하여 변환할 수도 있다.

Meta AI팀은 이 과정을 수행하는 것을 A powerful image encoder라고 표현하였다.

 

* SAM이 이미지 인코더, 프롬프트 인코더, 마스크 디코더를 분리함으로써 동일한 이미지 임베딩을 재사용할 수 있는 이유

=> 이미지 임베딩은 꽤나 Cost가 드는 복잡한 작업 중 하나이다. 따라서 여러번 계산이 들어가는 것은 효율적이지 못한 경우가 많고, real-time을 어렵게 만드는 중요 요인이었을 것이다.

이를 줄이기 위해 Meta AI는 해당 인코더, 디코더를 분리함으로써, 이미지 인코더의 임베딩 결과 벡터를 프롬프트 디코더에서 접근하게 하는 방식으로 구현하였다.

이렇게 되면 동일한 이미지의 여러 프롬프트를 적용할 때마다 이미지를 새로 인코딩할 필요가 없으므로 계산 비용을 절약할 수 있다.

 

* Data engine : 데이터 엔진의 목적은 새로운 data distribution들에 대한 강력한 일반화 기능을 제공하는 것이다.

이를 이루기 위해 Meta AI 팀은 기존에 존재하는 어떤 Segment dataset보다도 크고 다양한 mask set으로 SAM을 훈련시켰다. (결국 이것도 대기업의 힘으로 밀어붙인 거를 거창하게 표현한 거 아닐까?... 내가 너무 꼬여있는 거일지도 모르겠다.)

기존 Foundation model의 일반적인 접근 방식은 온라인으로 데이터를 얻는 것이었다.(CLIP 등) 그러나 mask는 자연적으로 데이터가 풍부하게 존재하지 않기 때문에 대안 전략이 필요했다. 즉, mask set을 만들기 위해 "Data engine"을 구축하는 것을 목표로 하는 것이다.(루프 내 데이터 세트 주석과 모델을 공동 개발한다.)

Meta AI의 data engine은 3단계를 거친다.

1. Assisted-manul stage : 전통적인 상호작용 분할 방식과 유사하게, 사람들이 마스크를 annotation하는데 도움을 준다.

2. Semi-automatic stage : SAM이 이미 알려진 객체 위치를 프롬프트로 사용하여 객체의 부분 집하에 대한 마스크를 자동으로 생성. 사람들은 남은 객체를 주석하며 마스크의 다양성을 높이는데 집중.

3. Fully automatic stage : SAM에 프롬프트를 제공하면, 평균적으로 이미지 당 약 100개의 고품질 마스크를 생성. 스스로 마스크를 생성하고 검증을 반복한다.

더보기

* Model-in-the-lop

=> 기계 학습에서 사용되는 전략. 이 접근법에서는 데이터 주석 과정과 모델 훈련을 반복적으로 연결하여, 각 단계에서 얻은 피드백을 바탕으로 모델과 데이터셋을 지속적으로 개선해나간다.

 

1. 초기 모델 훈련

2. 모델을 이용한 자동 데이터 주석 생성

3. 수동 검토와 수정

4. 수정된 데이터로 모델 재훈련

5. 반복

* Dataset : SA-1B라고 이름이저인 최종 데이터셋은 1100만개의 라이선스가 부여되고, 개인 정보 보호가 보장된 이미지로부터 얻은 10억 개 이상의 마스크를 포함된다. 이 데이터 셋은 상기한 데이터 엔진의 마지막 단계를 통해 완전 자동으로 수집되었으며, 기존 어떤 분할 데이터셋보다도 400배 많은 마스크를 포함한다. 이는 공개되어있으며, 다른 연구를 위해 사용을 하게 허용되어있다.

 

* Responsible AI : SA-1B는 지리적으로 다양하며 경제적으로 다양한 국가들을 대상으로 수집되었으며, 다양한 인구 집단에 걸쳐 SAM이 비슷한 성능을 보인다는 것을 확인했다.

 

* Experiments : 23개의 다양한 새로운 분할 데이터셋을 활용한 실험에서 SAM이 single foreground point에서 고품질의 마스크를 생성할 수 있었다. 이 마스크들은 수동으로 작성된 ground truth에 근접한 수준이었다.

또한 prompt engineering을 사용한 zero-shot transfer protocol 아래, downstream task에서 강력한 성능을 발견했다고 한다. 이러한 downstream task에는 edge detection, object proposal generation, instance segmentation, text-to-mask prediction 등이 포함된다.

 

SA-1B이다. 평균적으로 이미지당 약 100개의 마스크가 있으며, 마스크 수에 따라 그룹화되어있다.


2. Segment Anything Task

NLP에서는 다음 토큰 예측 task를 기초 모델의 pre-training 및 prompt engineering을 통한 다양한 downstream task 작업에 사용한다. CV의 관점에서 이를 해석해서, 이미지 분할을 위한 foundation model을 구축하기 위해 이와 비슷한 능력을 가진 task를 정의하고자한다. (Segment task에서도 NLP의 토큰 예측과 같은 일반화 가능한 학습 접근법 사용.)

 

- Task : Meta AI 팀은 NLP의 prompt idea를 Segmentation 식으로 맞추었다. 이미지에서 특정 부분을 분할하도록 지시하는 정보가 Prompt가 될 수 있으며(Ex : 이 사진에서 상자 위의 고양이를 분할해줘.) 이는 foreground/background points, 대략적인 상자나 마스크, 자유형의 텍스트 등이 될 수 있다. 

"Promptable Segmentation Task"의 목표는 주어진 프롬프트에 대해 유효한 분할 마스크를 반환하는 것이라고 했었다.

여기서 "유효한" 마스크라는 뜻은 프롬프트가 모호하거나 여러 객체를 지칭할 수 있음에도 불구하고, 그중 하나의 객체에 대해 합리적인 마스크를 출력해야한다는 의미이다. 이런 제약 조건(요구 사항)은 모호한 프롬프트에 대해 일관된 응답을 출력해야하는 LM의 기대와 유사하다.

이러한 task의 선택은 자연스럽게 pre-training algorithm으로 이어진다. 또한 프롬프팅을 통해 downstream segmentation task들에서 zero-shot transfer의 일반적인 방법이 될 수 있다.

 

- Pre-training : 상기한 promptable segmentation task는 각 training sample에 대한 일련의 prompt(ex : point, box, mask)를 시뮬레이션하고 모델의 마스크 예측을 ground truth와 비교하는 자연스러운 pre-training algorithm으로 이어진다.

이 방법은 interactive segmentation에서 적용되었던 방법을 변형한 것이며, interactive segmentation이 충분한 사용자의 입력 후에 유효한 마스크를 예측하는 것을 목표로 하는 반면, 이 알고리즘은 프롬프트가 모호하더라도 언제나 유효한 마스크를 예측하는 것을 목표로 한다.

이렇게 Pre-training algorithm을 적용하여 사전 훈련된 모델은 모호함을 포함하는 Prompt에서 효과적으로 추론할 수 있도록 보장하며, Data engine에 의해 생성되는 자동 주석을 포함하여 다양한 실제적 상황에 유용하다. 이러한 task를 잘 수행하기 위해서는 특별한 모델링과 Loss function 선택이 중요하며, 이는 후술하도록 한다.

 

- Zero-shot transfer : 사전 훈련된 task는 모델이 추론 시점에서 어떠한 프롬프트에서도 적절하게 반응할 수 있게 도와준다. 그러므로 downstream task들은 적절하게 프롬프트들을 engineering하는 것만으로 해결될 여지게 있다. 예를 들어 고양이에 대한 bounding box detector가 있다면, detector의 box output을 SAM 모델 prompt로 제공함으로써 고양이 인스턴스 분할 문제를 해결할 수 있다. 본 연구에서는 다양한 실용적 분할 작업을 실험하기 위해 5가지의 example task를 탐구하였다.

 

- Related tasks : Segmentaiton은 다양한 분야에서 이용될 수 있으며, 예시로는 interactive segmentation, edge detection, super pixelization, object proposal generation, foreground segmentation, semantic segmentation, instance segmentation, panoptic segmentation 등등에 적용될 수 있다. 이러한 다양한 분야에서 Promptable Segmentation Task의 목표는 다양한 기존 및 새로운 Sementation task에 적응할 수 있는 Zero-shot transfer 능력이 있는 모델을 생성하는 것이다.

이 접근법은 Task generalization의 한 형태로, 모델이 특정 task에만 국한되지 않고 다양한 요구에 대응할 수 있도록 한다. 

이는 이전 연구들의 multi-task segmentation system들과는 다르다는 점을 명심해야한다.

multi-task system에서는 단일 모델이 고정된 set of task들을 수행하지만(ex: joint semantic, instance, panoptic segmentation) promptable semantic task를 훈련받은 모델은 추론 시 사전 고정된 set of task들이 아닌 새로운 task를 수행할 수 있다.

예를 들어, 인스턴스 분할을 수행하기 위해 Promptable한 segmentation model이 기존 object detection와 결합될 수 있다. 이로한 유연성은 실제 세계의 다양한 시나리오에서 모델의 유용성을 향상시킨다.

 

- Discussion : Prompting과 composition은 single model을 확장가능하게 하는 강력한 방법이다. 이를 통해 모델은 설계시 알려지지 않은 작업을 수행할 수 있으며, NLP의 foundation model과도 같이 동작하게 된다. 예를 들어 CLIP은 텍스트와 이미지를 매칭하는 컴포넌트로써, DALL-E 이미지 생성 시스템에서 중요한 역할을 한다.

Prompting과 같은 기술을 활용해 구성된 시스템 디자인은 특정 task set에만 훈련된 시스템보다 더 다양한 적용을 할 수 있을 것으로 기대된다. 

또한 Interactive Segmentation과 Promptable Segmentation을 composition의 관점에서 비교하는 것도 도움이 된다.

Interactive Segmentation model은 인간 사용자를 염두에 두고 만들었지만, Promptable Segmentation 을 훈련 받은 모델은 더 큰 알고리즘에 통합될 수 있다. 이는 모델이 단순히 특정 domain에서 작업을 수행하는 것을 넘어서 다양한 환경과 상황에 유연하게 적용될 수 있음을 시사한다.

SAM의 구조

heavyweight image incoder는 image embedding을 출력하고 이 임베딩은 분할되어있는 mask decoder, prompt encoder에 의해 반복적으로 조회될 수 있다.(Cost down) 그 결과로 real-time mask inference가 가능하다. 또한 한 object에 여러 valid mask가 가능할 경우, 모델은 점수와 함께 결과들을 모두 display 가능하다.


3. Segment Anything Model

이전까지 Segment Anything Task에 대해서 Promptable Segment Task를 중점적으로 다뤘다면,

이 문단에서는 SAM에 대해 설명하고 있다. SAM은 Image encoder, Prompt encoder, Mask decoder의 3가지 구성요소로 이루어져있다. 이 모델 역시 Transformer based model을 사용하며 간략하게 정리하면

 

1. Image encoder : 이미지로부터 중요한 특성을 추출하여 임베딩 형태로 변환한다. 확장성과 powerful pre-traning method에 초점을 맞춘 결과, 높은 해상도 입력을 처리하기 위해 최소한으로 조정된 Masked AutoEncoder pre-trained Vision Transformer를 사용하였다. 이 이미지 인코더는 이미지당 한 번씩만 작동하며 모델에 prompt를 제공하기 전에 적용된다.

 

2. Prompt encoder : 다양한 형태의 입력 프롬프트를 처리하여 모델이 이해할 수 있는 형태로 변환한다. 프롬프트는 2가지로 구분된다.

- Sparse : points, boxes, text. 텍스트는 CLIP의 기존 텍스트 인코더를 사용하여 처리된다. 이러한 방식은 위치나 객체의 bounding box와 같은 구조적 정보를 제공하여 이미지 내 특정 위치나 객체를 식별하는데 도움을 준다.

- Dense : masks는 Convolution을 사용해 임베딩되며, 이미지 임베딩과 각 element마다 합산된다.

이는 마스크를 통해 제공되는 영역 정보를 이미지의 시각적 특성과 통합하여 분할을 돕는 것 이다.

 

3. Mask decoder : mask decorder는 이미지 임베딩, 프롬프트 임베딩 그리고 output token을 마스크에 효과적으로 매핑하는 역할을 한다. 이 디자인은 transformer decorder 블록의 변형을 사용하며, 동적 마스크 예측 헤드를 포함한다. 변형된 디코더 블록은 prompt self attention 및 cross-attention을 활용하여 prompt에서 이미지 임베딩으로, 그리고 그 반대 방향으로 모든 임베딩을 업데이트한다. 두 개의 블록을 실행한 후, 이미지 임베딩을 업샘플링하고 MLP가 출력 토큰을 dynamic linear classifier에 매핑한다. 이 classifier는 각 이미지 위치에서 마스크의 foreground 확률을 업데이트한다.

더보기
Mask Decorder

임베딩된 image와 mask 값이랑 convolution된 image embedding 값, prompt encoder를 통해 임베딩된 prompt token, pre-train된 output token을 입력으로 받은 Mask Decorder는 self-attention, cross-attention으로 각각 자체적인 관계 조정, 이미지 임베딩과의 상호작용을 모델링하고 포인트 별 MLP로 각 토큰들을 업데이트 한다.후에 image to token attention으로 이미지 임베딩을 최적화된 프롬프트 정보로 업데이트하고, 2x conv trans를 거쳐 업샘플링 된다.업데이트 된 이미지 임베딩에 다시한번 token to image attention을 하고, 3개의 mlp를 거쳐 해당 값과 이미지 임베딩 사이의 공간 포인트별 곱셈을 통해 최종적으로 마스크를 예측한다.

 

detail

=> transformer는 임베딩 차원이 256이며, MLP 블록은 내부 차원이 2048이다.

=> cross-attention 계층에서는 채널 차원을 128로 줄인다.

=> 모든 attention layer는 8개의 헤드를 사용하며, 각 레이어에는 Residual connection, layer normalization, 0.1 dropout이 적용된다.

- Resolving ambiguity : 만약 모델이 하나의 출력만을 제공할 경우, 모호한 프롬프트가 주어지면 여러 유효한 마스크의 평균을 취하는 방법을 사용할 수 있다. 그러나 이러한 상황을 피하기 위해, 모델은 단일 프롬프트에 대해 여러 출력 마스크를 예측하도록 수정되었다.

연구 결과 대부분의 일반적인 경우에, 3개의 마스크 출력이면 충분히 결과 값이 신뢰성이 생긴다는 것을 발견했다.

따라서 (Whole, Part, Subpart)로 나눈 중첩 마스크로 출력을 구성한다. Training 중에는 마스크들 중 최소의 Loss만을 Backpropagation한다. 또한, 마스크를 순위 매기기 위해 모델은 각 마스크에 대한 신뢰도 점수를 예측한다.

 

- Efficiency : Meta AI 팀의 목표는 합리적인 Mask를 real-time에 제공하는 것이었다. 따라서 모델 설계는 효율성에 영향을 받을 수 밖에 없었으며, 그 결과 50ms안에 모델의 실행을 구현해낼 수 있었다.

 

- Losses and training : 결국 모델을 학습하는데 어떤 Loss function을 채택할지 역시 중요한 과정이다. Meta AI 팀은 Focal loss와 Dice loss의 linear combination을 활용하여 Mask prediction을 supervise learning 한다. 이 2개의 손실 함수는 특히 클래스 불균형이 있는 상황에서 성능을 개선하는데 도움을 주며, Segmentation task에서 널리 사용된다.

Promptable Segmentation Task(PST)를 위한 training은 geometric prompt 과의 혼합을 사용하여 수행된다.

여기서 geometric prompt와의 혼합은 다양한 형태의 프롬프트를 사용하여 모델이 다양한 시나리오에서 객체를 정확히 식별하고 분할할 수 있도록 훈련하는 과정을 의미한다.

또한, interactive setup을 시뮬레이션하기 위해 prompt를 11단계에 걸쳐 무작위로 샘플링하는 방법을 따른다.

자세히 말하자면, 훈련 과정에서 다양한 prompt를 임의로 선택하여 모델에 제공하는 것이다.(사용자의 입력 모사)

이는 SAM이 데이터 엔진에 원할하게 통합될 수 있도록 지원한다.

더보기

* Dice Loss

=> 두 샘플의 유사성을 측정하는 데 사용되며 주로 두 데이터 집합 사이 공통 요소를 특정하는데 사용된다.

 

Dice Loss = 1 - Dice


4. Segment Anything Data Engine

이 단락에서는 11억 개의 마스크 데이터 셋,  "SA-1B"를 수집하기 위해 구축된 Data Engine의 3가지 주요 단계를 설명한다.

(인터넷에 데이터는 많지만 같은 이미지를 Mask한 Segment mask 데이터는 거의 존재하지 않는다.)

 

1. Assisted-manual stage : 이 단계는 전통적인 interact segmentation 방식과 유사하며, 전문가들이 브라우저 기반의 대화형 분할 도구를 사용하여 foreground, background 객체 포인트를 클릭하여 마스크를 라벨링한다. 이 도구는 SAM에 의해 구동되며, 전문가는 픽셀 정밀도의 브러시와 지우개로 마스크를 다듬을 수 있다.

주석 작업은 사전에 계산된 이미지 임베딩을 사용하여 브라우저 내에서 실시간으로 실행되며, 브라우저 내에서 실시간으로 실행되며 이는 interactive experience를 가능하게 한다. 특이사항으로는 마스크 주석에 30초 이상 소요되면 다음 이미지로 넘어가도록 했다는 점이다. 초반에는 전부 재훈련을 반복하다가 충분한 데이터 주석 후에는 새로 주석된 마스크만을 사용하여 재훈련을 하는 방법으로 넘어갔다고 한다. 이미지 인코더는 ViT를 사용하였다고 한다.

이 단계에서 430만 개의 마스크가 12만 개의 이미지에서 수집되었다.

 

2. Semi-automatic stage : 이 단계에서는 마스크의 다양성을 증가시켜 모델이 다양한 객체를 분할할 수 있는 능력을 향상시키는 것을 목표로 하였다. 전문가들이 상대적으로 덜 부각된 객체에 집중할 수 있도록 먼저 자동으로 신뢰도가 높은 마스크를 SAM 모델이 탐지하였다. 그 후 마스크 탐지가 된 이미지를 전문가한테 제시하고, 추가적으로 주석되지 않은 객체에 대한 주석을 요청하였다.

 

3. Fully automatic stage : 데이터 엔진의 마지막 단계인 완전 자동 주석 단계이다. 이 단계에서는 2가지의 개선을 통해 주석 과정이 완전히 자동화 되었다.

- 첫 번째로 이전 단계에서 수집된 다양한 마스크들 덕분에 충분한 데이터가 확보되어 모델의 성능이 크게 향상되었다. 이러한 모델은 이제 스스로 마스크 예측을 할 때 정확도가 신뢰할 만한 수준으로 올라왔다.

- 두 번째로 모호함을 감지할 수 있는 모델이 개발되었다. 이 모델은 32x32의 정규 그리드 포인트를 활용하여 이미지를 Cropping한 prompt를 제공하고 각 포인트에 대해 유효한 객체에 해당할 수 있는 마스크 세트를 예측했다. 만약 포인트가 part나 sub-part에 위치한다면, 모델은 해당 sub-part, part, whole object에 대한 마스크를 반환한다.

이러한 모델의 IoU 예측 모듈은 신뢰할 수 있는 마스크를 선택하는 데 사용되며 또한 안정적인 마스크만을 식별하고 선택한다. 최종적으로, cofident, stable mask를 선택한 뒤, 중복을 필터링하기 위해 non-maximal suppression을 사용했다.

(안정적의 기준은 0.5+- δ threshold에서 유사한 마스크가 생성되는 경우로 정의)

이 단계를 마지막으로 SA-1B가 완성되었다.

더보기

Non-Maximal Suppression

=> CV에서 객체 검출에 널리 사용되는 기술이다. 특히 이미지나 비디오 내에서 여러 객체를 인식할 때 중복된 탐지를 제거하는 용도로 사용된다. (이미지 내에 하나의 객체가 여러번 탐지시 가장 확률이 높은 탐지 결과만을 선택한다.)

 

 

* Detail

1. Cropping

- 이미지에서는 32x32의 정규 그리드와 추가적으로 2x2 및 4x4 겹치는 window에서 추출 20개의 확대된 이미지 크롭을 사용한다. 원본 고해상도 이미지가 Cropping에 활용되었고, Crop의 내부 경계에 닿는 마스크는 제거되었다.

 

2. NMS

- 두 단계에서 표준 탐욕적 박스 기반 NMS를 적용했다. 첫 번째는 각 Crop 내에서, 두 번쨰는 Crop 간에 적용되었다.

- Crop 내 NMS는 모델이 예측한 IoU로 마스크를 순위 매겼고, Crop 간 NMS는 출처 Crop에 따라 마스크를 순위 매겼다.

 

3. Filtering

- 마스크 품질을 높이기 위해 세 가지 필터를 사용했다.

a. IoU 점수 88.0 threshold filter

b. 두 개의 이진 마스크(같은 기본 soft mask에서 다른 값의 threshold를 가지는)가 유사하면 마스크 유지.

c. 전체 이미지(95% 이상)커버하는 마스크는 삭제


5. Segment Anything DataSet

이 문단에서는 SA-1B 데이터 셋에 대한 설명을 제공한다. SA-1B는 다양하고 고해상도의 1100만 개 이미지와 11억 개의 고품질 Segmation mask로 구성되어 있으며, 이 데이터는 특별히 개발된 데이터 엔진을 통해 수집되었다.

전체적으로 자동으로 생성된 마스크 들이 99.1% 였으며 이 마스크들은 전문가들이 평가한 마스크와 IoU를 사용해 평가했을 때 90% 이상의 IoU를 기록했으며, 충분히 신뢰성이 있다고 볼 수 있었다.

SA-1B는 저소득 국가를 제외한 나머지 국가에 대해 평등하게 대표성을 가진다.


6. Segment Anything RAI Analysis

이 문단은 해당 SA-1B가 얼마나 Responsible AI를 만들어 낼 수 있는지에 대해 서술한다.

당연히 연구 윤리에 의하면 해당 섹터가 가장 중요하다고 볼 수 있으나, 따로 설명할 여지가 많지 않아 생략하겠다.


7. Zero-Shot Transfer Experiments

이 세션에서는 SAM을 사용하여 Zero-Shot Transfer test를 진행한다. 5 가지의 Task에 대해 수행되며, 그중 4개는 SAM을 훈련시키는데 사용된 PST와는 크게 다르다. 따라서 이 실험들은 훈련 중에 본 적 없는 데이터 셋과 Task에서 SAM을 평가하는 것이 된다. (여기서 설명한 Zero-shot Transfer는 CLIP에서 사용된 정의와 동일하다.)

실험은 PST의 core goal인 어떠한 prompt에서도 valid mask를 도출하는 것에서 시작된다. 

따라서 시나리오는 단일 fore-ground point prompt 같이 모호성이 높을 가능성이 큰 곳에 중점을 둔다. 이러한 Prompt는 다른 더 구체적은 Prompt보다 해석하기 어려울 수 있기에, 이를 통해 모델의 처리 능력을 도전적으로 평가했다.

 

1. Edge Detection : 이미지 경계선을 탐지하는 기본적인 이미지 처리 작업

2. Segment Everything : Object Query generation을 의미하며, 이미지 내의 모든 잠재적 객체를 식별하고 분리하는 작업

3. Segment Detected Objects : 인스턴스 분할을 의미하며, 이미 식별된 객체들을 독립적으로 분할

4. Segment Objects from Free-Form Text : 자유 형식의 텍스트 프롬프트 사용하여 객체를 분할한다.

 

이러한 4가지 Task는 SAM이 훈련된 PST와 상당히 다르며, 프롬프트 엔지니어링을 통해 구현된다. 

이 실험은 Ablation study를 통해 어떤 구성 요소가 가장 큰 영향을 미치는지 확인함으로써 마무리 된다.

 

Implementation

1. SAM은 MAE로 사전 훈련된 ViT-H 이미지 인코더를 사용한다.

2. SAM은 SA-1B 데이터셋을 활용하여 훈련되었다.

 

7.1. Zero-Shot Single Point Valid Mask Evaluation

 

Task : 단일 fore-ground point에서 object를 분할하는 것을 평가한다. 한 point가 여러 object를 지칭할 수 있기 때문에 기존 데이터셋의 단일 마스크를 출력하는 것은 신뢰성이 떨어질 수 있다. 따라서 예측된 mask와 ground truth mask 간의 모든 IoU의 평균을 의미하는 표준 mIoU 메트릭과 1~10까지의 전문가가 매긴 mask quality rate으로 평가한다.

기본적으로 Meta AI 팀은 표준 대화형 분할 평가 프로토콜을 따라 ground truth mask의 중심에서 포인트를 샘플링한다.

이 중심은 마스크 내부 거리 변환의 최대값에서 가져오고, SAM은 여러 마스크를 예측이 가능하기 때문에 모델에서 가장 확신 있는 마스크와 비교된다. 이 결과를 RITM과 비교한다.

모델 평과 결과 vs RTIM
Human study 평

Datasets : 데이터 셋은 SAM 모델의 평가를 위해 새롭게 구성된 23개의 데이터셋을 활용했다.(대기업이란...)

이 데이터 셋들은 이미지 분포가 다양하며, 모든 23개 데이터셋은 mIoU 평가에 사용된다.

 

Results : 결과적으로, SAM은 23개의 데이터 셋중 16개에서 RITM보다 높은 결과를 보였으며, 최대 약 47 IoU 포인트 차이로 높은 성능을 나타냈다. 또한 "Oracle" 결과도 제시되어있는데, Oracle 결과는 SAM이 생성한 3개의 마스크 중 가장 ground truth와 일치하는 마스크를 선택하는 과정이다. 이는 자동 평가에서 모호성이 얼마나 큰 영향을 미치는지를 시사한다. 특히 모호성 해결을 위해 오라클을 사용할 경우 SAM은 모든 데이터셋에서 RITM을 능가하는 경향이 있었다.

노란색 : SAM, 파란색 : RITM, 초록색 : SimpleClick, 빨간색 : FocalClick

또한 Human Study에서의 평가도 일관되게 SAM이 생성한 마스크의 품질을 높게 평가했으며 단일 출력 마스크를 가진 모호성을 고려하지 않는 Single output도 RITM보단 높은 평가를 받았다. 이러한 결과는 SAM이 단일 포인트에서 유효한 마스크를 분할하는 방법을 학습했음을 나타낸다. 또한 Random point sample 법을 사용하든 Center point sample 법을 사용하든 크게 성능에 변함이 없다는 점도 고무적이다.

더보기

Detail

 

- DataSet

SAM의 Zero-Shot transfer 능력을 평가하기 위해 새로운 Segmentation benchmark를 구축했다고 설명한다.

이 benchmark는 이전 연구에서 파생된 23개의 다양한 Segmentation dataset을 포함하고 있으며, 각 예시 이미지는 다음과 같다.

효율적인 평가를 위해 15000개 이상의 마스크를 포함하는 데이터셋들을 샘플링해서 사용했으며, 구체적으로 샘플된 이미지들에서의 마스크 총 수가 대략 10000개가 되도록 이미지를 무작위로 선택했다.

 

- Point Sampling

첫 번째 포인트는 object 경계에서 가장 먼 포인트를 찍고 그 다음은 ground truth와 이전 예측 포인트의 오류 영역 경계에서 가장 먼 포인트를 찍는다. (이전의 오류와 가장 다른 포인트)

해당 과정을 통해 선택된 이미지들의 포인트를 샘플링한다.

 

- Evaluation

N개의 point prompts 후의 예측과 ground truth mask 간의 IoU로 이루어진다. 여기서 N은 1,2,3,5,9의 값을 가지며 포인트는 포인트 샘플링 방법을 사용하여 반복적으로 샘플링 된다.

각 데이터셋 별로 mIoU는 데이터셋 내 모든 객체에 대해 개별 마스크의 IoU를 평균낸 값이다. 마지막으로 모든 23개 데이터셋에 대해 mIoU를 평균내어 최상위 지표를 보고한다. 

이 평가방법은 단 하나 또는 몇 개의 포인트 후의 예측에 초점을 맞추고 있으며, 이는 많은 사용 사례가 그다지 여러 프롬프트를 제공하지 않는데 기인한다. 따라서 실시간 프롬프트 처리가 필요한 응용 프로그램에 초점을 맞추며, 많은 포인트 사용시 SAM이 SOTA가 아닐 확률이 존재한다.

 

7.2. Zero-Shot Edge Detection

 

이 접근 방식에서는 SAM을 사용하여 BSDS500 데이터셋에서 low-level task인 edge detection을 평가한다. 

이 과정에서는 자동 마스크 생성 파이프라인의 간소화된 버전을 사용한다. 구체적으로는 16x16 그리드의 foreground point로 SAM을 프롬프트하여, 포인트당 3개씩 총 768개의 예측 마스크를 생성한다. 중복 마스크는 NMS를 통해 제거된다.

(쉽게 풀이하자면, 16x16 크기의 정규 그리드 패턴에 따라 포인트를 설정하고, 이 포인트들을 사용하여 SAM이 분석을 시작하게 되는 것이다.)

 

- Result

비록 SAM이 edge detection을 위해 따로 훈련되지 않았어도, 합리적인 edge map을 만들어내는 것을 관찰할 수 있다.

ground truth와 비교했을 때 SAM은 BSDS500에서 주석 처리되지 않은 edge를 포함하여 더 많은 edge를 예측한다.

이러한 경향은 다음의 표에서도 드러나며, 50% 정밀도에서 0.928의 높은 회수율을 모이나 정밀도는 상대적으로 낮다.

즉, SAM은 편향. 어떤 edge를 억제해야 하는지를 학습한 방법에 비해서는 뒤쳐지지만, 구식의 zero-shot transfer보다는 나은 성능을 보인다.

 

7.3. Zero-Shot Object Proposals

 

이 섹션에서는 SAM 모델을 object proposal generation이라는 mid-level task에 적용하여 평가한다.

Object proposal을 생성하기 위해 자동 마스크 생성 파이프라인을 약간 수정한 버전을 실행하고, 생성된 마스크를 Proposal로 출력한다.

더보기

* Detail

SAM의 자동 마스크 생성 파이프라인을 zero-shot transfer에 맞게 수정하여 사용한다고 했는데, 이는 다음을 의미한다.

1. 이미지 crop 처리를 하지 않는다. (Inference time reduce)

2. 예측된 IoU와 안정성 기반 filtering 하지 않는다. (Parameter를 줄여 입력 포인트 그리드와 NMS 임계 값만 존재)

AR metric을 LVIS v1 데이터 셋에서 계산한다.(Long-tail dataset)

 

- Result

ViTDet-H를 Object propsal로 사용하는 것이 최고의 성능을 보여주나, SAM은 중간, 큰 크기의 객체와 드문 객체와 common 객체에 대해 더 좋은 성능을 보여준다.

이 결과는 ViTDet-H가 LVIS에서 훈련되었기 때문에 LVIS 특유의 주석 편향을 학습하였기 때문이다. 또한 모호성을 반영하지 않는 signe out 버전 SAM과 비교 했을때 SAM이 모든 AR 지표에서 우수한 성능을 보인다.(모호성 반영이 효과가 크다.)

 

7.4. Zero-Shot Instance Segmentation

 

SAM을 instance segmentation module로 활용한다.

구현은 간단하다. 이전에 사용했던 ViTDet 같은 Object Detector를 실행하고 그 출력 박스를 SAM에 prompt로 제공한다.

이는 SAM을 더 큰 시스템에 통합하는 방법이다.

 

평가로는 COCO와 LVIS dataset에서 SAM과 ViTDet에 의해 예측된 마스크를 비교하였다고 한다.

결과를 시각화한 결론으로는 SAM의 마스크가 ViTDet 보다 종종 품질 면에서 우수하며, 더 선명한 경계를 가지고 있는 것으로 나타났다. 또한 인간 기준에서 평가 됐을 때도 일관되게 ViTDet보다 좋은 성능을 보였다.

인간 연구의 결과로는 grounding truth의 품질이 상대적으로 COCO에서 더 낮기 때문에 VitDet은 COCO 마스크의 특정 편향을 학습한다고 한다. 반면 SAM은 zero-shot 방법으로 이러한 편향을 학습하지 않는다.

 

7.5. Zero-Shot Text-to-Mask

 

텍스트로부터 객체를 분할하는 더 높은 수준의 task를 고려한다. 이 실험은 SAM이 text prompt를 처리할 수 있다는 능력을 증명한다. 이전의 모든 실험에서 동일한 SAM을 사용했지만, 이 실험에서는 SAM의 훈련 절차를 수정하여 텍스트를 인식할 수 있도록 했다. 그러나 새로운 텍스트 주석을 요구하지 않는 방식으로 구현된다.

구체적으로 이야기하면, 면적이 100보다 큰 수동으로 수집된 마스크마다 CLIP 이미지 임배딩을 추출한다. 그 후 훈련 동안 추출된 CLIP 이미지 임베딩을 SAM에게 첫 번째 상호작용으로 프롬프트를 제공한다. 여기서 중요한 점은 CLIP의 이미지 임베딩이 텍스트 임베딩과 정렬되도록 훈련되었기 때문에 이미지 임베딩으로 훈련된 모델이 텍스트 임베딩으로 추론될 수 있다는 것이다. (CLIP 논문 참고) 즉, 추론시에는 텍스트를 CLIP의 텍스트 인코더를 통해 실행한 다음, 결과 텍스트 임베딩을 SAM에게 프롬프트로 제공한다.

더보기

 * Detail

 

1. Model & Training

SAM을 훈련하기 위해 CLIP - ViT-L/14@336px 를 사용하였으며, 이를 이용해 텍스트와 이미지 임베딩을 계산했다. 이 임베딩들은 L2-normalization을 거치고, SAM의 훈련에는 Data Engine의 첫 두 단계에서 얻은 마스크를 사용하며, 100 픽셀보다 작은 면적을 가진 마스크는 모두 제거된다. 120000회 반복 학습을 수행하며, 배치 크기는 128이다.

 

2. Generating training prompts

입력 프롬프트를 추출하기 위해 각 마스크 주변의 경계 상자를 1~2배까지 무작위로 확장하고, 확장된 상자를 정사각형으로 자르며 비율을 유지하여 336x336 픽셀로 크기를 조정한다. CLIP 이미지 인코더에 자른 이미지를 입력하기 w전에 50% 확률로 마스크 밖의 픽셀을 제거한다. 객체에 초점을 맞추기 위해, 출력 토큰에서 마스크 내부의 이미지 위치로만 주의를 제한하는 Masked Attention을 마지막 레이어에서 사용한다. 최종적으로, 프롬프트는 출력 토큰 임베딩이 된다.

 

3. Inference

추론 과정에서는 CLIP 텍스트 인코더를 수정 없이 사용하여 SAM을 위한 프롬프트를 생성한다.

이 방식은 CLIP이 텍스트와 이미지 임베딩을 서로 연결해 놓은 것을 활용한다. 

즉, CLIP은 구조적으로 text feature와 image feature를 직접 연결하도록 훈련되어있어, 추론 시 텍스트 입력으로부터 효과적으로 프롬프트를 이해하고 생성할 수 있게 한다.

이러한 연결 덕분에 SAM은 명시적인 text supervision 없이 훈련할 수 있다. 즉, 훈련을 위해 레이블이 지정된 텍스트 데이터를 요구하지 않는다.

- Result

이 그림에서는 SAM의 결과를 보여준다. SAM은 "a wheel"과 같은 간단한 텍스트뿐만 아니라 "beaver tooth grille"과 같은 구절을 사용하여 객체를 분할할 수 있다. 또한 추가적인 포인트를 사용하면 예측을 수정할 수 있다.

 

7.6. Ablations

 

제일 왼쪽은 데이터 엔진의 단계에서 축정된 데이터로 훈련된 SAM의 성능을 나타낸다. 세 단계 모두를 사용하여 훈련할 경우, automatic mask가 그렇지 않은 마스크보다 월등히 많아진다. 이 문제를 해결하기 위해 manual, semi automatic mask를 10버 오버샘플링하는 것이 좋은 결과를 가져오는 것을 발견했으나, 너무 훈련이 복잡해진다.

결론적으로 automatic only와 best case의 차이가 0.5 mIoU 차이만 나기에 모든 훈련을 automatic only mask로 하기로 하였다.

가운데는 데이터 양이 결과에 미치는 영향을 살펴본 것이다. 전체 SA-1B 데이터 셋에는 1100만 개의 이미지가 포함되어 있으며, 여기서 1백만 개만 사용해도 전체 데이터 셋을 사용했을 때와 비슷한 결과를 얻을 수 있었다.

오른쪽의 그림은 ViT 시리즈의 모델을 무조건 더 크게한다고 성능 향상이 크게 되지 않는 모습을 보였으며 따라서 ViT-H를 사용했다고 한다.


8. Discussion

- Limitations : SAM은 종종 미세 구조를 놓치거나 연결되지 않은 구성 요소를 잘못 생성할 수 있다. 또한 경계를 선명하게 생성하지 못하는 경향이 있다. 즉, 여러 포인트가 많이 존재한다면 다른 분할 모델이 SAM보다 우수한 성능을 낼 수도 있는 것이다. 이는 Zero-shot 성능을 지원하는 범용성 있는 Foundation model이 공유하는 단점들인 것 같다. 또한 SAM은 실시간으로 프롬프트를 처리할 수 있지만 이미지 인코더를 사용할 때는 전체 성능이 실시간이 아니다. 즉, Text to mask task는 아직 견고하지 않다.

 

- Conclusion : SAM은 Image Segmentation을 Foundation model의 시대로 끌어올리기 위한 시도이다 이 프로젝트는 새로운 task의 정의(PST), 모델(SAM), 데이터 엔진을 기반으로 형성된 새로운 데이터셋(SA-1B)를 통해 이루어졌다.