[논문리뷰]SAM 2 : Segment Anything in Images and Videos
제가 소개드릴 내용은 Meta에서 발표한 최신 논문, SAM 2: Segment Anything in Images and Videos입니다.
SAM2는 다음과 같은 특징을 갖습니다.
스트리밍 메모리를 갖춘 트랜스포머 아키텍처를 활용해 실시간 비디오 처리가 가능하고,
그리고 기존 방법보다 3배 적은 연산량으로도 오히려 더 높은 정확도를 보여줍니다.
마지막으로 기존 SAM보다 6배 더 빠르고, 더 정확하다는 점도 주목할 만합니다.
SAM2는 사용자의 클릭, 박스, 마스크 입력을 기억한 뒤, 이를 바탕으로 시공간적으로 객체를 추적하며 지속적이고 인터랙티브하게 객체를 분할하는 모델입니다.
기존 SAM은 정적인 이미지 분할에서는 탁월한 성능을 보였지만,
비디오 환경에서는 한계가 있었습니다.
즉, 연속적인 프레임 속에서 객체를 안정적으로 분할하고 추적하기에는 구조적으로 부족했습니다.
이러한 한계를 극복하기 위해 SAM2는 PVC, SAV 데이터셋, 메모리 아키텍처를 기반으로 설계되었습니다.
- PVS – Promptable Visual Segmentation: 어떤 프레임에서든 사용자의 클릭, 박스, 마스크를 받아 시간에 따라 마스크를 예측합니다.
- (196시간, 50,000개 이상의 비디오, 35.5M개의 마스크) 초대규모 비디오 분할 데이터셋인 SA-V 데이터셋,
- 메모리 아키텍처:~~ 연속 프레임에서 객체 정보를 잃지 않고 이어갈 수 있는 메모리 뱅크와 어텐션 구조를 활용합니다.
이번에는 비디오 분할과 관련된 기존 연구들을 간략히 정리해보겠습니다.
크게 세 가지로 나뉘는데요,인터랙티브 비디오 객체 분할(IVOS),비디오 객체 분할(VOS),그리고 데이터셋 관련 연구입니다.
- IVOS – 인터랙티브 비디오 객체 분할
초기에는 사용자의 **낙서(scribble)**를 이용해 그래프 최적화로 분할했지만,
복잡하고 느리다는 한계가 있었습니다.
최근에는 클릭이나 낙서로 만든 마스크를 다른 프레임으로 전파하는 구조가 등장했고,
가장 최근엔 SAM과 트래커를 결합해 객체를 프레임 간 추적하는 방식이 나왔습니다.
하지만
- 트래커 성능이 일관되지 않고
- SAM은 비디오에선 성능 저하,
- 오류 수정이 불가능하다는 문제점이 있습니다.
2. VOS – 비디오 객체 분할
첫 프레임의 마스크만 입력받고, 그 객체를 영상 전체에서 추적합니다. ㅡ주로 semi-supervised 방식이며,
최근에는 트랜스포머 기반 구조로 발전했습니다. 하지만 첫 프레임만 주석해선 정확한 추적이 어렵다는 한계가 있습니다.
3. 데이터셋
기존 VOS 데이터셋은 작고 범용성이 부족했습니다.
이에 비해 SAM2는 SA-V 데이터셋을 통해,
훨씬 더 많은 객체와 ‘부분’까지 분할할 수 있는 폭넓은 커버리지를 제공합니다.
여기까지가 SAM2가 제안되기 이전까지의 주요 관련 연구 흐름입니다.
기존의 비디오 분할 연구들은 낙서 기반 그래프 최적화나 클릭 전파 방식, 또는 SAM과 트래커의 단순 결합 같은 구조를 거쳐왔지만, 모두 어떤 형태로든 정확성, 일관성, 또는 수정 가능성에서 한계를 가지고 있었습니다.
이러한 한계를 극복하기 위해 SAM2는 새로운 태스크 인 PVS를 소개합니다.
PVS는 영상의 어떤 프레임에서도 프롬프트를 줄 수 있도록 설계된 세분화된 태스크입니다.
프롬프트는 클릭, 박스, 마스크처럼 다양하게 입력할 수 있으며, 모델은 이 정보를 바탕으로 객체의 정확한 분할 마스크를 즉각 반환합니다.
더해서, 초기 프레임에서 마스크를 예측한 뒤에는, SAM2가 시간 흐름에 따라 변화하는 연속 마스크, 즉 masklet을 생성하게 되고, 이후에도 객체가 잘 안 보이거나 마스크가 어긋난다면, 다시 프롬프트를 추가해서 수정할 수 있는 구조를 갖고 있어 사용자와의 상호작용을 중심에 둔 인터랙티브한 분할 방식이라 할 수 있습니다.
이런 방식이 가능하려면 학습 데이터도 달라야겠죠.
SAM2는 이 PVS 태스크를 위해 SA-V라는 대규모 비디오 분할 데이터셋을 구축했고,
각 프레임마다 프롬프트와 마스크의 관계, 시간적 일관성 등을 반영해 학습할 수 있도록 설계됐습니다.
평가 또한 기존 VOS 방식과 달리,
몇 번의 프롬프트 입력만으로 얼마나 정확하고 빠르게 객체를 추적하는지,
정확도뿐 아니라 상호작용 효율성까지 평가할 수 있도록 구성돼 있습니다.
결과적으로, SAM2는 단순히 ‘한 번 주석하고 끝내는’ 방식이 아니라, 사용자와 함께 작업해가며 점점 더 정확한 분할을 만들어내는 구조로 나아갔다고 보시면 되겠습니다.
강아지의 혀를 얻고, SAM 2는 자동으로 세그먼트를 다음 프레임으로 전파하여 마스크렛을 형성하고, frame 3: 에서의 단일 클릭으로 객체를 복구하고 올바른 masklet을 얻을 수 있습니다.
이와 같이 기존의 모델은 여러번의 클릭이 필요했지만 SAM2 는 단일클릭으로 복구되는 것을 확인 할 수 있습니다.
SAM2 모델을 간략하게 먼저 설명하자면
SAM2는 기존 SAM을 비디오와 이미지 도메인 모두에 적용할 수 있도록 일반화한 모델입니다.
입력은 각 프레임에서 클릭, 박스, 마스크와 같은 프롬프트가 들어오고, 이를 기반으로 시공간적인 객체 분할을 수행하게 됩니다.
공간적인 분할 방식은 기존 SAM과 비슷합니다.
즉, 이미지 임베딩과 프롬프트 정보를 입력받아,
프레임 단위로 마스크를 생성하고, 프롬프트를 반복적으로 추가하며 정제하는 구조입니다.
하지만 SAM2에서는 여기에 프레임 임베딩을 메모리 기반으로 조건화한다는 점이 핵심입니다.
단순히 현재 이미지의 인코더 출력이 아니라,
과거 프레임의 예측 결과와 프롬프트 정보를 반영한 조건화된 임베딩을 활용합니다.
이를 위해 SAM2는 다음과 같은 메모리 처리 과정을 따르는데,
- 먼저 메모리 인코더가 현재 프레임의 예측을 기반으로 메모리를 생성하고,
- 이 정보를 메모리 뱅크에 저장하고,
- 이후 프레임에서는 메모리 어텐션을 통해 과거 메모리와 현재 프레임을 연결하고,
- 이를 마스크 디코더로 전달해 최종 분할 결과를 예측하게 됩니다.
즉, SAM2는 단순히 한 장면을 분할하는 게 아니라,
시간 흐름을 기억하며 객체를 더 일관되게 추적하고 분할할 수 있는 구조를 갖추고 있습니다.
이번에는 SAM2의 구성 요소를 하나씩 살펴보겠습니다.
크게 Image Encoder, Memory Attention, 그리고 Prompt Encoder & Mask Decoder로 나뉩니다.
먼저, Image Encoder입니다.
영상은 프레임 단위로 계속 들어오기 때문에,
SAM2는 프레임이 들어오는 순서 그대로 처리하는 구조를 갖고 있습니다.
각 프레임마다 딱 한 번만 인코더가 실행되며,
이때 조건 없는(unconditioned) 프레임 임베딩을 생성하게 됩니다.
이 구조는 Hiera라는 MAE 기반 인코더를 사용해 만들어졌고,
계층적 구조를 활용해 다양한 크기의 객체도 잘 인식할 수 있도록 설계되었습니다.
다음은 Memory Attention입니다.
이 부분은 지금 프레임을 처리할 때,
과거 프레임에서 추출해 놓은 특징들과 프롬프트 정보까지 함께 참고해서
더 정확한 결과를 만들어내는 역할을 합니다.
총 7개의 트랜스포머 블록으로 이루어져 있고,
Self-attention과 Cross-attention이 반복적으로 적용되어
정보를 통합한 뒤 최종적으로 MLP를 통해 출력됩니다.
여기에는 기존 어텐션 방식도 사용되지만,
필요에 따라 최신 고속 어텐션 커널도 함께 사용할 수 있게 되어 있어,
실시간 처리에도 적합합니다.
마지막으로 Prompt Encoder와 Mask Decoder입니다.
Prompt Encoder는 기존 SAM과 거의 동일하게 동작하며,
각 프롬프트의 위치나 형태를 인코딩해서 모델에 전달합니다.
특히 **마스크 형태의 프롬프트는 합성곱(convolution)**으로 처리해서
이미지 임베딩과 함께 사용됩니다.
Mask Decoder는 두 방향으로 정보를 주고받는 Transformer 구조를 사용하고,
프롬프트와 프레임 정보를 동시에 반영해 최종 마스크를 생성합니다.
또 하나 특징은,
애매한 프롬프트 예를 들어 클릭이 애매할 때에는
여러 개의 마스크 후보를 만든 뒤,
가장 신뢰도 높은 것만 선택해서 출력한다는 점입니다.
다음은 SAM2에서 시간 정보를 처리하는 핵심 구조인 메모리 시스템과 학습 방식입니다.
먼저, Memory Encoder보면
SAM2는 한 프레임에서 객체를 분할한 결과인 마스크를
합성곱(convolution) 구조로 압축한 뒤,
그 정보를 해당 프레임의 이미지 임베딩과 더해서 메모리로 저장합니다.
이때 단순히 이어붙이는 게 아니라, **원소별 합(element-wise sum)**을 사용해 정보를 통합하고,
이후에는 경량 합성곱 레이어를 한 번 더 적용해서 최종 메모리를 완성합니다.
이렇게 만들어진 메모리는 Memory Bank라는 곳에 저장되는데요,
이 메모리 뱅크는 쉽게 말해 과거 프레임의 객체 정보를 기억하는 공간입니다.
구조는 FIFO 큐처럼 작동해서,
- 최근 N개의 프레임 정보
- 그리고 프롬프트가 입력된 프레임 정보그리고 이 모든 메모리는 단순한 벡터가 아니라,
- 공간 구조를 그대로 담고 있는 feature map 형태로 보관됩니다.
- 이 두 가지를 따로따로 최대 N개까지 저장하게 되어 있습니다.
모델이 앞으로 처리할 프레임에서
이 객체, 이전에 나왔거라고 인식할 수 있게 도와주는 역할을 하게 됩니다.
마지막으로 Training, 즉 학습 방식입니다.
SAM2는 이미지와 비디오 데이터를 함께 사용해서 학습하고,
매번 8개의 프레임을 묶어 시퀀스를 만든 다음,
그 중 2개의 프레임에 프롬프트를 랜덤하게 부여해서 학습을 진행합니다.
특히 프롬프트를 준 후,
GT(정답) 마스크와 예측값을 비교해서
모델이 틀린 부분에는 확률적으로 수정 클릭을 넣어주는 방식도 활용합니다.
학습 중에는 GT 마스크, 클릭, 박스 중 하나를 랜덤으로 입력으로 주고,
모델은 그걸 바탕으로 해당 객체의 시간적masklet를 예측합니다.
사전 준비 단계
- 수십만 개의 영상 클립을 수집합니다.
- 아직 GT(정답) 마스크는 없음.
- 목표: 다양한 영상에서 segmentation 학습 가능하도록 준비.
Phase 1: 100% 수작업 마스크 생성
- 사람이 영상의 각 프레임을 SAM(이미지 전용 모델) + 브러시/지우개를 써서 마스크 생성.
- 초에 6프레임(FPS) 정도 추출해서 프레임 단위로 작업함.
- 검증자가 결과 마스크를 확인해 “OK” 판정 시 → GT A로 저장.
- “불만족”일 경우 다시 수동 수정.
결과: GT A (가장 정확하고 깨끗한 Ground Truth 마스크들)
SAM 2-Mask v0 학습 (첫 모델 훈련)
- 입력값:
- 8프레임짜리 영상 시퀀스
- 프롬프트 0~2개 (클릭, 박스 등)
- 정답 마스크 GT A
- 구성 요소:
- Image Encoder → Mask Decoder (Memory 없음)
- Prompt Encoder는 아직 없음
- 출력값:
- 마스크를 "전파만" 할 수 있는 SAM 2-Mask v0
- 이건 아직 "인터랙티브 분할"이나 "메모리 기반 추론"은 불가함
Phase 2: 전파 + 수작업 보정 주석
- 사람은 첫 프레임만 마스크 작성
- SAM 2-Mask v0가 나머지 프레임으로 자동 전파
- 틀린 프레임은 수동으로 수정하고 재전파
- 검증자 OK → GT B로 확정
결과: GT B (전파 + 보정 기반의 GT 마스크)
- 평균 주석 시간이 Phase 1보다 약 5배 단축됨
SAM 2-Full v1 학습
- SAM 2의 "진짜 첫 버전" 모델 학습 단계
- 입력값:
- 영상 8프레임 시퀀스
- 프롬프트 0~2개 (확률적으로 주어짐)
- 50%: GT 마스크
- 25%: Positive click
- 25%: Bounding box
- 정답: GT A + GT B
- 네트워크 구성:
- Image Encoder + Prompt Encoder
- → Memory Encoder (이전 마스크/프롬프트 저장)
- → Mask Decoder (Memory Attention 포함)
- Loss 계산:
- 프레임별로 IoU + BCE + Dice
- 결과: SAM 2-Full v1 (본격적인 분할 가능 모델)
Phase 3: 사람 + SAM 2 협업 주석 루프
- 사람: 클릭/박스 몇 개만 입력 (프롬프트 제공)
- SAM 2-Full이 전체 프레임 마스크 예측
- 사람: 클릭 몇 번으로 미세 보정
- 검증자 OK → GT C로 저장
결과: GT C 마스크 / Phase 1보다 ≈ 8배 빠름
SAM 2-Full v2, v3… 재학습 루프 (Self-bootstrapping)
- GT A + B + C가 누적되면 다시 모델 학습
- 같은 네트워크 구조 (인코더·디코더 동일)
- 성능이 향상된 SAM 2-Full v2, v3…로 업데이트
- 결과 모델은 다시 Phase 3에 투입되어 루프 반복
Auto masklet: 자동 주석
- SAM 2-Full 모델에 첫 프레임에 격자점을 찍어서 자동 마스크 생성
- 검증자가 OK 하면 → GT D로 저장
- NG → 사람이 Phase 3 방식으로 다시 주석
- 효과: 다양한 객체(배경, 작은 물체 등)까지 커버 범위 확장