https://arxiv.org/abs/2304.02643
Segment Anything
We introduce the Segment Anything (SA) project: a new task, model, and dataset for image segmentation. Using our efficient model in a data collection loop, we built the largest segmentation dataset to date (by far), with over 1 billion masks on 11M license
arxiv.org
1. Introduction
Task

주어진 프롬프트를 유효한 segmentation mask로 변환하는 작업
프롬프트란 물체 식별을 위한 공간이나 텍스트 정보를 의미한다.

유효한 segmentation mask란 프롬프트가 모호하고, 여러 객체를 의미할 수 있는 상황(ex. 점이 셔츠에 찍혀있다면 셔츠를 의미하는 것인지 셔츠를 입은 사람을 의미하는 것인지 알 수 없음)일 때 output은 그 중 하나를 가리키는 reasonable한 mask여야 함을 의미한다.

Model

prompt 작업을 세분화하고 실제로 사용하기 위한 제약: 모델은 반드시 flexible prompt를 지원해야하고, interactive한 사용을 위해 실시간으로 마스크를 계산해야 한다. 또한 모호성을 인식할 수 있어야 한다.
모델 구조는 크게 세 부분이다.
- image encoder
- fast prompt encoder (굳이 fast가 붙는 이유는?)
- mask decoder

- 강력한 image encoder가 입력 이미지의 임베딩을 계산하고
- fast prompt encoder가 prompt를 임베딩하면
- mask decoder가 이 둘을 결합하여 segmentation mask를 예측해낸다.
이미지 임베딩이 주어지면 prompt encoder와 mask decoder는 웹에서 50ms내에 mask를 예측해낸다.
Data engine


새로운 데이터에도 적용할 수 있는, 일반화할 수 있는 모델을 만들기 위해서는 훨씬 더 많은 데이터가 필요했다. 그래서 Data engine을 만들고 이것으로 데이터셋을 생성했다. Data engine은 세 단계로 구성된다.
- assisted-manual
이 단계는 모델이 이미 학습되어 있는 상태이며, 모델의 예측 결과를 사람이 수정하는 방식이다. 예를 들어, 모델이 자동으로 객체의 경계를 예측하면, 사람이 이를 보고 필요할 경우 수동으로 조정하는 것이다.
예를 들어, 우리가 강아지 사진에서 강아지의 윤곽을 따는 작업을 한다고 할 때,
첫 번째 단계에서는 모델이 강아지의 윤곽을 자동으로 예측한다. 그러나 아직 모델이 완벽하지 않아서 강아지의 다리를 잘못 인식하거나 배경의 일부를 강아지로 인식하는 실수가 있을 수 있다. 이럴 때, 사람이 모델의 예측 결과를 보고 "여기 좀 더 정확히 다리를 표시해야 해"라고 수정하는 식으로 보조 주석(assisted annotation)을 한다. 이렇게 하면 사람이 완전히 처음부터 윤곽을 그리는 것보다 훨씬 빠르게 작업할 수 있다.
- semi-automatic
이 단계에서는 첫 단계에서 수집된 데이터로 모델을 더 훈련시켜 개선된 결과를 얻는다. 개선된 모델은 이전보다 더 정확하게 예측할 수 있기 때문에, 사람이 수정해야 하는 작업량이 줄어들게 된다.
- fully automatic
마지막 단계에서는 이미지에 grid point를 찍어서 자동으로 masking하도록 한다. 모델이 거의 완벽에 가까운 수준으로 학습되었기 때문에, 주석 작업을 전적으로 모델이 수행한다. 이 단계는 사람이 개입할 필요 없이 데이터 주석을 대규모로 생성할 수 있기 때문에 많은 데이터를 확보해야 할 때 유용하다.
Experiments

SAM은 single foreground point에서 좋은 mask를 뽑아낸다. 또한 zero-shot 전송 프로토콜의 downstream 작업(edge detection, object proposal generation, instance segmentation, and a preliminary exploration of text-to-mask prediction)에서 prompt engineering을 사용하면 좋은 결과를 얻을 수 있음을 발견했다.
2. Segment Anything Task
Task

NLP에서 모델을 학습할 때, 다음 단어(토큰)를 예측하도록 하는 방법을 사용하는데 이를 segmentation에 적용하고자 했다. 이를 promptable segmentation task라고 하며, 주어진 prompt에 대해 “valid” segmentation mask를 뽑아내는 것이 목표이다. 여기에서 valid란, prompt가 모호하고 여러 물체를 참조하고 있어도, output은 물체들 중 적어도 하나에 대해 reasonable한 mask여야 한다는 것이다.
pre-training

각 훈련 샘플에 대해 points, boxes, masks와 같은 일련의 prompt를 시뮬레이션하고, ground truth와 모델의 mask predictions를 비교한다. 이 모델의 최종적인 목표는 모호한 prompt가 들어와도 valid mask를 뽑아내는 것이다. 즉, 이 단계를 통해 모델은 어떤 prompt가 들어와도 적절히 응답할 수 있게 된다.
Zero-shot transfer
모델은 바운딩 박스 좌표와 같은 prompt를 입력 받았을 때, 이 정보를 바탕으로 새로운 객체를 segmentation 할 수 있다.
3. SAM: Segment Anything Model
SAM은 세 부분으로 구성된다.
- image encoder
- flexible prompt encoder
- fast mask decoder
SAM은 Transformer 기반 vision model이며, 복잡한 연산을 수행하면서 real-time에 가까운 속도로 일을 처리하도록 설계(trade-off) 되었다.

Image encoder
ViT를 사전 훈련한 MAE를 사용한다. image encoder는 이미지 당 한 번만 수행된다. 이미지가 input으로 들어오면 MAE를 거쳐서 이미지 임베딩을 뽑아낸다.

위 MAE의 전체 구조에서 encoder 부분만 떼어 사용한다.

전체 SAM 아키텍처
인풋 이미지 : (1024 * 1024) size * (16 * 16 * 3) channels
패치 사이즈 = 16이며, 채널에 (1x1 Conv) (3x3 Conv) (Norm) 진행한다.
아웃풋 임베딩 : (64 * 64) patches * 256 dimensions
Prompt encoder

- 컨볼루션으로 차원 맞춰줌 → 이미지 임베딩에 pixel-wise-sum을 해줌
prompt encoder는 입력으로 주어진 다양한 프롬프트를 모델이 이해할 수 있는 형식(임베딩)으로 변환한다. SAM은 prompt를 두 가지 종류로 구분하여 임베딩한다.
- sparse: points, boxes, textbo
sparse prompt 중 points와 boxes는 positional encoding으로 벡터화하고 여기에 학습된 임베딩(각 prompt 타입에 대한 고유한 임베딩)을 결합하여 표현된다.
text는 CLIP이라는 모델에서 제공하는 text encoder를 사용하여 임베딩한다.
- dense: masks
mask는 convolution 연산을 수행하여 임베딩된다. 이후 이미지 임베딩과 element별로 합(sum)하여 결합된다.
Mask decoder


dynamic mask prediction head가 뭐지?
마스크 디코더는 이미지 임베딩, 프롬프트 임베딩, 출력 토큰을 마스크에 효율적으로 매핑한다. 이 설계는 트랜스포머 디코더 블록을 수정한 후 dynamic mask prediction head를 사용합니다. 수정된 디코더 블록은 프롬프트 self-attention과 cross-attention(프롬프트에서 이미지 임베딩 또는 그 반대)를 사용하여 모든 임베딩을 업데이트합니다. 두 블록을 실행한 후 이미지 임베딩을 업샘플링하고 MLP가 출력 토큰을 동적 선형 분류기에 매핑한 다음, 각 이미지 위치에서 마스크 전경 확률을 계산합니다.
경량 마스크 디코더. 이 모듈은 이미지 임베딩과 일련의 프롬프트 임베딩을 출력 마스크에 효율적으로 매핑합니다. 이러한 입력을 결합하기 위해 Transformer 분할 모델[14, 20]에서 영감을 얻어 표준 Transformer 디코더[103]를 수정합니다. 디코더를 적용하기 전에 먼저 [33]의 [클래스] 토큰과 유사하게 디코더의 출력에 사용될 학습된 출력 토큰 임베딩을 프롬프트 임베딩 세트에 삽입합니다. 간단하게 하기 위해 이러한 임베딩(이미지 임베딩제외 )을 통칭하여 “토큰”이라고 부릅니다.
mask decoder는 이미지 임베딩, 프롬프트 임베딩을 출력 마스크에 효율적으로 매핑한다. 이 두 입력을 결합하기 위해 Transformer 디코더 블록을 수정하여 사용한다. 디코더를 적용하기 전에, 먼저 [cls] 토큰과 유사하게 디코더의 출력에 사용될 학습된 출력 토큰 임베딩을 프롬프트 임베딩 세트에 삽입한다.
(1) self-attention on the tokens, (2) cross-attention from tokens (as queries) to the image em- bedding, (3) a point-wise MLP updates each token, and (4) cross-attention from the image embedding (as queries) to tokens를 차례대로 수행한다. 이 마지막 단계에서는 프롬프트 정보로 이미지 임베딩을 업데이트한다.
SAM의 마스크 디코더 구성 요소 및 기능
- 프롬프트 기반 입력:
- 마스크 디코더는 다양한 유형의 프롬프트를 지원합니다. 예를 들어, 단일 포인트 프롬프트나 여러 포인트, 사각형, 자유 형식 텍스트 등의 입력을 받아들입니다. 이러한 다양한 입력을 통해 사용자나 응용 프로그램의 요구에 맞춰 유연하게 동작할 수 있습니다.
- 피처 통합:
- 마스크 디코더는 입력 이미지로부터 추출한 특징 맵을 활용하여 객체 마스크를 생성합니다. SAM은 CNN 또는 Transformer와 같은 구조를 사용하여 이미지의 고수준 및 저수준 특징을 캡처합니다. 이 특징들은 마스크 디코더에 입력되어, 객체의 경계와 형태를 정의하는 데 사용됩니다.
- 디코딩 과정:
- 마스크 디코더는 특징 맵을 기반으로 각 픽셀에 대해 마스크를 예측합니다. 이 과정에서는 업샘플링 및 합성곱 레이어를 통해 최종적으로 객체의 마스크를 생성합니다. 마스크는 일반적으로 이진 형태로, 객체가 있는 픽셀은 1, 그렇지 않은 픽셀은 0으로 표현됩니다.
- 출력 마스크의 품질:
- SAM의 마스크 디코더는 고품질의 마스크를 생성하기 위해 정교한 훈련 기법을 사용합니다. 훈련 과정에서 다양한 프롬프트와 다양한 유형의 데이터셋을 사용하여 모델의 일반화 능력을 향상시키고, 다양한 객체 인식 및 세분화 작업에 효과적으로 대응할 수 있도록 합니다.
- 성능 평가:
- SAM의 마스크 디코더는 다양한 평가 메트릭을 통해 성능이 측정됩니다. 논문에서는 mIoU(Mean Intersection over Union)와 같은 자동화된 메트릭뿐만 아니라 인간 평가를 통해 마스크 품질을 평가합니다.
Resolving ambiguity


하나의 output만 내야 할 떄, 모호한 prompt가 주어지면 모델은 여러 개의 valid mask를 평균 내서 예측한다. 이를 해결하기 위해 SAM은 하나의 prompt에 대해 multiple mask를 출력하도록 했다. 보통 3개의 output mask면 충분하다.(whole, part, subpart) 그 중 가장 작은 loss를 가지는 mask를 backpropagation에 사용한다. 모델이 예측한 여러 마스크 중에서 어떤 마스크가 가장 좋은지 평가해야 하는데, 이를 위해 **신뢰도 점수(confidence score)**를 계산합니다.
4. Segment Anything Data Engine
Assisted-manual stage

Assisted-mannual stage는 기존의 interactive segmentation(사용자가 직접 객체를 선택하면서 모델이 그 객체를 분할할 수 있도록 돕는 방식)과 비슷하다. 여기서 SAM 모델을 사용하는 도구를 통해 실시간으로 브라우저에서 작업할 수 있다.
전문가들이 SAM을 활용하여 foreground/background 포인트를 클릭하고 해당 마스크에 라벨을 붙였다. (예를 들어, 사진 속의 고양이를 주석할 때, 고양이 부분에 foreground 포인트를 클릭하고, 고양이가 아닌 바닥이나 배경 부분에 background 포인트를 클릭하는 방식)
또한 SAM 기반 도구는 브러쉬(brush)와 지우개(eraser) 기능도 제공하여, 마스크를 정교하게 수정할 수 있었다. 예를 들어, 모델이 고양이의 귀를 정확하게 포함하지 못했으면, 전문가가 브러쉬로 귀 부분을 추가하거나 지우개로 잘못된 부분을 제거할 수 있다.
전문가들이 객체를 라벨링할 때 특정한 의미적 제약(semantic constraints)을 두지 않았다.
즉, 전문가는 사물(things)과 물질(stuff) 모두 자유롭게 라벨링할 수 있었다.
- 사물(things): 개별적으로 구분할 수 있는 객체들 (예: 고양이, 의자)
- 물질(stuff): 개별적으로 구분하기 힘든 물질들 (예: 물, 잔디)
객체의 이름이나 설명을 주석할 때는 기본적으로 이름이나 설명이 가능한 경우만 라벨링을 권장했지만, 실제로 그 이름이나 설명은 수집하지 않았다.
SAM에서는 총 6번 모델을 재학습시켰다. 모델이 개선됨에 따라 마스크당 평균 주석 처리 시간은 34초에서 14초로 감소했다. 또한 이미지당 평균 마스크 수는 20개에서 44개로 증가했다. 이 단계에서는 전체적으로 120만 개의 이미지에서 430만 개의 마스크를 수집했다.
Semi-automatic stage

이 단계에서는 모델이 다양한 객체를 더 잘 분할할 수 있도록 세분화 능력을 향상시키기 위해 마스크의 다양성을 **높이는 것을 목표로 했다.
- 자동으로 마스크 생성
덜 눈에 띄는 객체에 annotator의 주석을 집중시키기 위해 먼저 확실한 마스크를 자동으로 감지했다.
- annotator에게 사전에 채워진 이미지 제공
그런 다음 annotator에게 이러한 마스크가 미리 포함된 이미지를 제시하고 주석이 달리지 않은 추가적인 객체에 주석을 달도록 요청했다.
- bounding box detector 사용
신뢰도 높은 마스크를 감지하기 위해 일반적인 “object” 범주를 사용하여 모든 1단계 마스크에 대해 bounding box detector를 훈련시켰다. 이 작업을 통해 주석 작업을 시작하기 전에 객체의 위치를 대략적으로 파악할 수 있었다.
- 반복적인 모델 재학습
이 단계에서 180만 개의 이미지에서 590만 개의 마스크를 추가로 수집했다(총 1,020만 개의 마스크). 첫 번째 단계와 마찬가지로 새로 수집한 데이터에 대해 주기적으로 모델을 재훈련했다(5회). 마스크당 평균 어노테이션 시간은 최대 34초(자동 마스크 제외)까지 소요되었는데, 이는 이러한 물체가 라벨링하기 더 까다롭기 때문이다. 이미지당 평균 마스크 수는 44개에서 72개(자동 마스크 포함)로 증가했다.
Fully automatic stage

- 주석 작업이 완전 자동으로 처리되는 단계
이는 모델에 두 가지 주요 개선 사항이 있었기 때문에 가능했다.
- 충분한 양의 mask 수집 → 모델이 valid mask를 예측하게 함.
- ambiguity-aware model을 개발 → 모호한 경우에도 모델이 part, subpart, whole에 해당하는 여러 마스크를 반환할 수 있게 함.
모호한 상황: 나무를 인식할 때 나무 전체를 하나의 객체로 볼 수도 있고, 나뭇가지나 잎사귀를 별도의 객체로 볼 수도 있을 것이다.
이 단계의 모델에 32×32 격자점(grid of points)을 프롬프트로 제공했다. 이 격자점 중 각각의 점에 대해 유효한 객체를 나타낼 수 있는 여러 개의 마스크를 예측하게 했다. 또한, 애매함 처리(ambiguity-aware) 덕분에, 어떤 점이 부분 객체나 전체 객체의 일부에 해당하는 경우, 모델이 part, subpart, whole에 해당하는 여러 가지 마스크를 반환할 수 있다.
이 모델의 핵심은 하나의 지점에서 여러 수준의 마스크를 동시에 예측하는 능력이다:
- 하나의 지점에서 다중 마스크 반환:
- 모델은 하나의 지점(prompt)을 주었을 때, 그 지점이 객체의 일부일 수도 있고, 전체일 수도 있는 경우를 모두 고려한다.
- 예를 들어, 고양이 얼굴의 일부 지점을 프롬프트로 제공했을 때, 모델은 고양이 전체, 고양이 얼굴, 그리고 눈 같은 더 작은 부분을 각각 마스크로 반환할 수 있다.
- 다양한 수준의 객체 인식:
- 이렇게 함으로써, 모델은 전체 객체(whole)뿐 아니라, 그 부분(part)이나 하위 부분(subpart)도 탐지하고, 이들을 각각 다른 마스크로 반환하게 된다.
- 예를 들어, 나무가 있을 때, 모델이 나무 전체를 하나의 객체로 인식하고, 나뭇가지, 잎사귀를 별도의 작은 객체로도 인식할 수 있게 되는 것.
- 모호함을 다루기:
- 이 능력 덕분에 모호한 객체를 다룰 때 더 유연한 주석 작업이 가능하다. 예를 들어, 하나의 모호한 지점에서 어떤 객체가 '전체'로 인식되기도 하고, '부분'으로 인식되기도 할 때, 모델은 두 경우 모두 유효한 마스크로 반환할 수 있다.
- 결과적으로, 애매한 경우에도 더 정확하고 다양한 관점에서 객체를 인식할 수 있는 마스크를 생성하게 된다.
예측되는 다양한 마스크 중 모델의 IoU(Intersection over Union) 예측 모듈을 사용해서 신뢰할 수 있는 마스크만 선택했다. 추가로, stable mask만 선택했다.
stable mask: 확률 맵(probability map)에서 0.5 - δ와 0.5 + δ로 임계값을 설정했을 때 결과가 크게 다르지 않은 마스크를 의미한다. 이는 마스크가 신뢰할 수 있고 일관되게 생성되었다는 것을 의미한다.
confident하고 stable한 mask를 선택한 후에는, 비최대 억제(non-maximal suppression, NMS)를 사용해서 중복된 마스크를 제거했다. 또한, 작은 객체도 잘 탐지하기 위해 zoomed-in image crops을 처리하는 방식을 사용했다.
결론적으로, 데이터셋에 있는 1,100만 개의 이미지 전체에 대해 완전히 자동으로 마스크를 생성할 수 있었다. 11억 개의 고품질 마스크가 생성되었고, 이를 통해 SA-1B라는 방대한 데이터셋이 완성되었다.
5. Segment Anything Dataset: SA-1B
- Facebook의 데이터 엔진인 11억개의 마스크를 생성한다. 이 중 99.1%가 자동으로 생성되며, 자동 마스크의 quality가 중요한 포인트가 되었다.
- 전문 annotator가 작업한 것과 비교하니, 별 다를 게 없었다.
- 94% 이상이 90% 이상의 IoU를 가졌다.
- 이전 모델들은 85-91% IoU 정도가 나왔었음
→ 자동 마스크가 high quality였고, 모델 훈련에 효과적임을 알 수 있었다.
7. Zero-Shot Transfer Experiments

Zero-shot transfer는 모델이 특정 작업에 대해 별도의 학습이나 추가적인 훈련 없이도 그 작업을 수행할 수 있는 능력을 말한다. 즉, 새로운 데이터나 환경에서도 추가적인 학습 없이도 높은 성능을 발휘할 수 있는 모델의 능력을 의미한다.
SAM 모델의 경우 다양한 프롬프트(포인트, 바운딩 박스 등)를 이용해 새로운 객체를 세그멘테이션할 수 있다. 예를 들어, 이전에 특정 객체(예: 고양이)를 인식하는 법을 학습했다면, 모델이 고양이뿐 아니라 다른 유사한 형태의 동물이나 새로운 유형의 객체도 세그멘테이션할 수 있는 것이다.
이처럼 별도로 추가 학습을 시키지 않았음에도, 프롬프트만 제공하면 다양한 객체를 인식할 수 있는 능력을 갖춘 것이 Zero-shot transfer~!
SAM의 실험 목표는 프롬프트를 통해 valid 마스크를 생성하는 것이다. 여기서 프롬프트란, 모델에게 특정 작업을 수행하도록 지시하는 입력을 의미한다. 예를 들어, 한 점의 위치를 지정하는 것만으로도 모델이 해당 위치의 객체를 세그멘테이션할 수 있어야 한다.
SAM은 Zero-shot transfer를 가능케하기 위해 segmentation이 어려운 상황을 가정하여 학습을 진행시켰다. 이 때 single foreground prompt를 사용했는데, 다른 구체적인 prompt보다 ambiguity가 클 가능성이 높기 때문이다. 이는 모델이 하나의 점만 가지고도 정확하게 무엇을 segmentation해야 할지 판단해야 하는 상황을 의미한다.
실험은
- 엣지 감지 (Edge Detection): 이미지의 경계를 감지하여 물체의 형태를 파악하는 작업.
- 모든 것을 세그멘테이션 (Segment Everything): 객체 제안 생성(Object Proposal Generation)을 수행하여 이미지 내 모든 객체를 찾는 작업.
- 감지된 객체 세그멘테이션 (Segment Detected Objects): 인스턴스 세그멘테이션(Instance Segmentation)으로, 감지된 객체에 대해 개별적으로 마스크를 생성하는 작업.
- 자유 형식 텍스트로 객체 세그멘테이션 (Segment Objects from Free-form Text): 예를 들어, 사용자가 제공한 텍스트 설명을 기반으로 특정 객체를 세그멘테이션하는 작업.
위 네 가지 작업을 모델에게 요청하는 방식으로 진행되었다. 이는 prompt 엔지니어링을 통해 구현되며, 즉, 모델의 입력 프롬프트를 설계하고 조정하여 원하는 출력을 얻도록 하는 과정이다.
실험은 ablation study 마무리된다. ablation study는 특정 요소를 제거하거나 조정하여 그 변화가 전체 시스템의 성능에 미치는 영향을 평가하는 연구 방법이다.
7.1. Zero-Shot Single Point Valid Mask Evaluation

먼저 23개의 새로운 데이터셋에 대해서 점 하나를 찍었을 때 마스크를 얼마나 잘 생성하는지 기존 SOTA 모델인 RITM과 비교해보았다. 그 결과, SAM은 RITM보다 23개의 데이터셋 중 16개의 데이터셋에서 최대 ∼47 IoU까지 더 높은 결과를 보였다. 위 지표의 점선과 함께 표시된 점은 SAM의 3가지 마스크 중 가장 confidence가 높은 마스크를 ground truth와 비교했을 때의 지표이다.

마스크의 퀄리티를 사람이 눈으로 보고 평가한 지표이다. SAM의 마스크 퀄리티를 RITM 보다 훨씬 높게 평가하는 것을 알 수 있다. (높은 점수(7~9점): *개체를 식별할 수 있고 오류가 작고 드물다(*예: 작고 심하게 가려진 연결이 끊어진 구성 요소 누락 등))
이러한 결과를 통해 SAM이 single point에서 valid mask를 segmentation하는 방법을 잘 학습했음을 알 수 있다.
7.2. Zero-Shot Edge Detection
- edge detection: 이미지의 경계선을 detection하는 task
SAM은 edge detection을 학습하지 않았기 때문에 파이프라인을 약간 변경하여 사용한다.
구체적으로, SAM에 16×16의 정사각형 그리드로 구성된 foreground point로 768개의 예측 마스크(포인트당 3개, 16163)를 생성하도록 요청한다. 이후 NMS를 거쳐 중복되는 마스크를 제거하고 sobel filtering을 거친다. (자세한 내용은 §D.2 참조).


SAM은 edge detection을 위해 훈련되지 않았음에도 불구하고 합리적인 edge map을 생성하는 것을 관찰할 수 있다. 또한 실제 데이터와 비교했을 때, SAM은 BSDS500에 표기되지 않은 합리적인 edge를 포함해 더 많은 edge를 예측한다.

7.3. Zero-Shot Object Proposals
- object proposals: 이미지 내에서 잠재적인 객체의 위치를 제안하는 기술, 주로 Object Detection, Segmentation 작업에서 사용

7.4. Zero-Shot Instance Segmentation
- object detection의 결과로 출력된 객체를 segmentation하는 task


SAM이 ViTDet보다 확실히 뒤지지만 상당히 근접하다. 출력을 시각화해 보면, SAM 마스크가 ViTDet보다 질적으로 우수하고 경계가 더 선명한 경우가 많다.
7.5. Zero-Shot Text-to-Mask
CLIP 모델을 사용하여 텍스트 annotation 없이도 텍스트를 인식할 수 있도록 했다.

구체적으로, 1002보다 큰 면적을 가진 수동으로 색칠된 각 마스크에 대해 클립 이미지 임베딩을 추출합니다. 그런 다음 훈련 중에 추출된 클립 이미지 임베딩을 첫 번째 인풋으로 SAM에 제시합니다. 여기서 중요한 점은 CLIP의 이미지 임베딩은 텍스트 임베딩과 일치하도록 훈련되기 때문에 이미지 임베딩으로 훈련하되 추론에는 텍스트 임베딩을 사용할 수 있다는 것입니다. 즉, 추론할 때 CLIP의 텍스트 인코더를 통해 텍스트를 실행한 다음 결과 텍스트 임베딩을 SAM에 프롬프트로 제공합니다(자세한 내용은 §D.5 참조).