상세 컨텐츠

본문 제목

[논문리뷰] Segment Anything

AI

by 마농농 2025. 2. 18. 00:04

본문

0. Segment Anything [Kirillov et al., 2023]

[논문링크]

https://arxiv.org/pdf/2304.02643

[참고영상]

https://www.youtube.com/watch?v=gSUpUiqXB6c

https://blog.firstpenguine.school/70

 

무엇이든 누끼따는✂️ AI! Segment Anything Model 리뷰

들어가며 📄 Segment Anything Model 논문 🧑‍💻 Segment Anything Model github ▶️ 리뷰 영상 하나의 모델이 다양한 Computer Vision task를 수행할 수 있다면 어떨까요? 일일이 테스크 별로 모델을 만들 필요가

blog.firstpenguine.school

 

Meta AI Research, FAIR


  • 소개 : SA 프로젝트는 Image Segmentation을 위한 new task + new model + new dataset을 소개함
    • 다양한 데이터 distribution에서도 효과적으로 image segment를 가능하게 하는 기초 모델 (foundation) 구축
      • foundation model : 하나의 task로 학습시킨 모델이 학습 하지 않았던 다양한 분야도 바로 적용 가능한 general한 모델 (ex. GPT)
  • Image Segmentation의 foundation, 3가지 요소(Task, Model, Data) 통합하여 연구함 
    • Task : zero-shot generalization을 가능하게 하난 작업
    • Data : 11M의 이미지에서 1억 개 이상의 mask 로 구성된 세계에서 가장 큰 segmentation dataset
    • Model : promptable, 다양한 데이터셋에서 Pre-training하여 강력한 generalization 능력 확보

1. Introduction

[간단 용어 정리]
- zero-shot learning : 모델이 사전에 작업하지 않은 새로운 작업이나 개념에 대해 추가적인 학습 없이 올바른 결과를 예측하는 능력, 즉 prompt만 보고 새로운 데이터나 작업을 이해하는 방식
- few-shot learning : 모델이 새로운 작업을 수행할 대, 소량의 예제(shot)을 보고 일반화
- promptable model : 사용자가 입력하는 prompt (지시문)을 통해 특정한 작업을 수행할 수 있는 모델, 별도의 fine-tuning없이 적절한 prompt를 입력하면 다양한 작업을 수행할 수 있음 (GPT)
> 요청 prompt를 입력하면, 새로운 데이터에서도 작업을 수행할 수 있는 모델
- prompt : 어떤 task에 대한 guide를 제공하는 역할

task(모델이 학습하지 않은 새로운 작업, 데이터 분포에서도 성능 발휘 가능하게) & model(잘 할 수 있는 모델은?) & data(어떤 데이터를 사용해야할까?)


| Task : Segmentation Prompt 

어떤 TASK로 모델을 학습시켜야 GPT처럼 General한 vision 모델을 만들 수 있을까?

동기 : 기존 NLP와 컴퓨터 비전 분야에서 foundation models은 zero-shot, few-shot learning을 통해 새로운 데이터셋과 작업을 수행하는 것이 가능
제안 : 주어진 prompt에 따라 유효한 segmentation mask를 반환하는 것이 목표 
제안-요구사항 : prompt가 애매하게 여러 객체를 가리킬 경우, 최소 하나의 객체에 대해 합리적인 분할이 이루어져야 함
> NLP처럼 prompt 사용, prompt = "어떤 객체를 분할할지?"
  • Task : Promptable Segmentation은 마스크를 생성하고자 하는 대상을 유연하게 Prompt로 지정할 수 있는 task
    • 즉, prompt의 목적은(task) "어떤 것을 mask?"해야 할지 명령을 내림
      • 점 + 박스 + 텍스트 로 prmopt
    • 예시. GPT 의 prompt 목적 즉, task는 next token prediction

| Model  : Promptable Segmentation

이 Task를 잘 수행하면서도 General하려면 어떤 모델 구조여야 할까?

설계 요구사항1 : Flexible prompts
다양한 방식의 입력을 처리 가능해야 함
설계 요구사항2 : Real-Time Computation
상호작용이 가능할 정도로 빠르게 분할해야 함
설계 요구사항3 : Ambiguity-Awareness
동일한 prompt가 여러 개체를 의미할 경우, 이를 다룰 수 있어야 함
구성 요소 : Image Encoder + Prompt Encoder + Mask Decoder
(입력 이미지을 처리하여 Image Embeddinng 생성 >> 사용자 입력 prmopt embedding하여 image 정보와 결합 >> 두 정보를 결합하여 Segmentation Mask 생성)

| Data Engine

이 모델을 학습시키려면 어떤 데이터가 필요할까?

동기 : SAM은 강력한 generalization을 위해 대규모이고 다양한 masked Datstet이 필요
하지만, segmentation mask는 자연적으로 존재하지 않아 대체 전략 필요 (크롤링으로 한계 존재)
결론 : SAM을 학습시키면서 "동시에 데이터셋을 생성하는" 모델, Model-in-the-loop 방식을 활용 (수작업+AI )
Engine 구성 1: Assisted-Manual 단계
SAM이 어노테이터(데이터 라벨링 작업자)를 도와 마스크를 주석(annotate)하도록 지원
Engine 구성 2: Semi-Automatic 단계 
SAM이 일부 객체의 마스크를 자동 생성하면, 어노테이터는 남은 객체만 추가로 어노테이션하는 방식
Engine 구성 3: Fully Automatic 단계
SAM이 이미지의 foreground 영역에 grid 형태의 포인트를 prompt로 입력받아 자동으로 mask 생성, 평균적으로 한 이미지당 약 100개의 high quality mask 생성

 

5:18

 

| Dataset

SAM 모델을 학습하기 위해 구축한 최종 데이터 셋 : SA-1B
11M개, licensed, privacy-preserving imgage + 10억개 이상의 segmentation masks 포함
특징 : Fully Automatic된 data engine을 통해 수집됨 > 기존 segmentation dataset보다 400배 많은 mask + 기존 mask보다 고품질

 

SA-1B 예시


2. Task : Segment Anything Task

 

SAM 모델과 다른 모델을 이용해서 한  과정들.

 

  1. 모델을 학습시키고 이미지들을 추론 시킴 -> 나온 추론 결과들을 인간들이 Annotate -> 4.3M개의 데이터 생성
  2. 4.3M개의 보정된 데이터를 다시 모델에 학습 시킴 -> 새로운 이미지들을 추론 시키고 인간들이 Annotate -> 10.2M개의 데이터 생성
  3. 완전히 학습된 모델 (이미지 masking task로 학습된 모델) 을 이용해서 새로운 이미지들로(이전 4.3M, 10.2M 데이터와 완전히 별개의 것) masking된 데이터 만들기 -> 1.1 B의 데이터 생성

3. Model : Segment Anything Model

  • Image Encoder 
    • pretraining, scalability 고려
    • MAE (Masked AutoEncoder) 방식으로 사전 훈련되니 ViT 사용
    • 고해상도 입력을처리할 수 있도록 최소한의 수정이 적용됨
    • 이미지는 한 번 Encoding(precompute)하면 이후 여러 prompt에 대해 재사용 가능, 연산 비용 절감 
  • Prompt Encoder
    • Sparse Prompts (점, 박스, 텍스트) : Positional Encoding하여 처리
    • Dense Promopts (마스크) : convol을 활용하여 image embedding과 합산
      • Image(encoding) + Mask(encoding)
  • Mask Decoder
    • Transformer 기반 Decoder 구조 변형하여 사용
    • promopt와 image embedding을 attention하여 update, mask 예측 수행
    • output : 각 pixel에서 foreground일 확률을 계산하여(background, foreground 구분) mask 생성
SAM의 추가 기능
- 모호성 해결 (Resolving Ambiguity)
: SAM은 prompt가 모호한 경우를 해결하기 위해, output이 3개의 mask를 예측하도록 설계됨
학습 과정에서 가장 낮은 loss만 backpropagation하여 최적화
예측된 mask마다 confidence score (예상 IoU)를 계산해서 순위를 매김
- 연산 효율성 (Efficiency)
- Losses and Training

4. Model : Segment Anything Data Engine

  • 학습한 적 없는 23개의 segmentation 데이터셋들에 대해 점을 찍었을 때 마스크를 잘 생성하는지 비교
    • 점선 : Ambiguity 고려
  • Ambiguity 고려 시, SAM 모델이 더 뛰어남

관련글 더보기