facebookresearch/sam2
요약
Meta의 SAM 2는 이미지와 비디오 모두에서 프롬프트 기반 시각적 분할을 수행하는 파운데이션 모델입니다. 스트리밍 메모리를 갖춘 트랜스포머 아키텍처를 통해 실시간 비디오 처리가 가능하며, 대규모 SA-V 데이터셋을 통해 학습되었습니다.
핵심 포인트
- 이미지를 단일 프레임 비디오로 간주하여 비디오 분할로 확장
- 실시간 처리를 위한 스트리밍 메모리 기반 트랜스포머 설계
- SAM 2.1 업데이트를 통한 개선된 체크포인트 및 학습 코드 제공
- torch.compile 지원으로 VOS 추론 속도 대폭 향상
Nikhila Ravi, Valentin Gabeur, Yuan-Ting Hu, Ronghang Hu, Chaitanya Ryali, Tengyu Ma, Haitham Khedr, Roman Rädle, Chloe Rolland, Laura Gustafson, Eric Mintun, Junting Pan, Kalyan Vasudev Alwala, Nicolas Carion, Chao-Yuan Wu, Ross Girshick, Piotr Dollár, Christoph Feichtenhofer
[Paper
] [Project
] [Demo
] [Dataset
] [Blog
] [BibTeX
]
**Segment Anything Model 2 (SAM 2)**는 이미지와 비디오에서의 프롬프트 기반 시각적 분할 (promptable visual segmentation) 문제를 해결하기 위한 파운데이션 모델 (foundation model)입니다. 우리는 이미지를 단일 프레임의 비디오로 간주함으로써 SAM을 비디오로 확장합니다. 모델 설계는 실시간 비디오 처리를 위한 스트리밍 메모리 (streaming memory)를 갖춘 단순한 트랜스포머 (transformer) 아키텍처입니다. 우리는 사용자 상호작용을 통해 모델과 데이터를 개선하는 모델 인 더 루프 (model-in-the-loop) 데이터 엔진을 구축하여, 현재까지 가장 큰 비디오 분할 데이터셋인 SA-V 데이터셋을 수집했습니다. 우리의 데이터로 학습된 SAM 2는 광범위한 작업과 시각적 도메인 전반에서 강력한 성능을 제공합니다.
2024/12/11 -- 주요 VOS 속도 향상을 위한 전체 모델 컴파일 및 멀티 오브젝트 트래킹 (multi-object tracking)을 더 잘 처리하기 위한 새로운 SAM2VideoPredictor 출시
- 이제 비디오에 대한 전체 SAM 2 모델의
torch.compile을 지원하며, 이는build_sam2_video_predictor에서vos_optimized=True를 설정함으로써 활성화할 수 있으며, VOS 추론 (inference) 속도를 크게 향상시킵니다. -SAM2VideoPredictor의 구현을 업데이트하여 독립적인 객체별 추론 (per-object inference)을 지원하며, 이를 통해 멀티 오브젝트 트래킹을 위한 프롬프트 제공 가정을 완화하고 트래킹 시작 후 새로운 객체를 추가할 수 있습니다. - 자세한 내용은RELEASE_NOTES.md를 참조하세요.
2024/09/30 -- SAM 2.1 개발자 스위트 (새로운 체크포인트, 학습 코드, 웹 데모) 출시
- 개선된 모델 체크포인트 세트(SAM 2.1로 표시됨)가 출시되었습니다. 자세한 내용은 모델 설명 (Model Description)을 참조하세요. - 새로운 SAM 2.1 체크포인트를 사용하려면 이 저장소의 최신 모델 코드가 필요합니다. 이 저장소의 이전 버전을 설치한 경우, 먼저
pip uninstall SAM-2를 통해 이전 버전을 제거해 주세요.
, 이 저장소에서 최신 코드를 가져오고 (git pull 사용), 아래의 설치(Installation) 섹션에 따라 저장소를 다시 설치해 주세요.
- 새로운 SAM 2.1 체크포인트 (checkpoints)를 사용하려면, 이 저장소의 최신 모델 코드가 필요합니다. 이 저장소의 이전 버전을 설치한 경우, 먼저
pip uninstall SAM-2를 통해 이전 버전을 제거해 주세요. - 학습 (training) 및 미세 조정 (fine-tuning) 코드가 공개되었습니다. 시작하는 방법은
training/README.md를 참조하세요. - SAM 2 웹 데모 (web demo)를 위한 프론트엔드 (frontend) + 백엔드 (backend) 코드가 공개되었습니다. 자세한 내용은
demo/README.md를 참조하세요.
SAM 2를 사용하기 전에 먼저 설치해야 합니다. 이 코드는 python>=3.10, torch>=2.5.1, 그리고 torchvision>=0.20.1을 필요로 합니다. PyTorch 및 TorchVision 의존성 (dependencies)을 설치하려면 여기의 지침을 따르세요. GPU 머신에서 다음과 같이 SAM 2를 설치할 수 있습니다:
git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
Windows에서 설치하는 경우, Ubuntu와 함께 Windows Subsystem for Linux (WSL)를 사용하는 것을 강력히 권장합니다.
SAM 2 예측기 (predictor)를 사용하고 예제 노트북 (notebooks)을 실행하려면 jupyter와 matplotlib가 필요하며, 다음과 같이 설치할 수 있습니다:
pip install -e ".[notebooks]"
참고:
- 이 설치를 위해 Anaconda를 통해 새로운 Python 환경을 생성하고, https://pytorch.org/ 를 따라
pip를 통해 PyTorch 2.5.1 (또는 그 이상)을 설치하는 것을 권장합니다. 현재 환경에 2.5.1보다 낮은 버전의 PyTorch가 설치되어 있는 경우, 위의 설치 명령어가pip를 사용하여 최신 PyTorch 버전으로 업그레이드를 시도할 것입니다. - 위의 단계는
nvcc컴파일러를 사용하여 커스텀 CUDA 커널 (custom CUDA kernel)을 컴파일해야 합니다. 머신에 이미 설치되어 있지 않다면, PyTorch CUDA 버전과 일치하는 버전의 CUDA 툴킷 (CUDA toolkits)을 설치해 주세요. - 설치 중에
Failed to build the SAM 2 CUDA extension과 같은 메시지가 나타나면, 이를 무시하고 여전히 SAM 2를 사용할 수 있습니다 (일부 후처리 (post-processing) 기능이 제한될 수 있지만, 대부분의 경우 결과에는 영향을 미치지 않습니다).
INSTALL.md를 참조해 주세요.
잠재적인 문제 및 해결 방법에 대한 FAQ를 참조하세요.
먼저, 모델 체크포인트 (model checkpoint)를 다운로드해야 합니다. 모든 모델 체크포인트는 다음 명령어를 실행하여 다운로드할 수 있습니다:
cd checkpoints && \
./download_ckpts.sh && \
cd ..
또는 다음에서 개별적으로 다운로드할 수 있습니다:
(이것들은 SAM 2.1로 표시된 개선된 체크포인트임을 유의하세요. 자세한 내용은 모델 설명 (Model Description)을 참조하십시오.)
그 다음, SAM 2는 이미지 및 비디오 예측을 위해 다음과 같이 몇 줄의 코드로 사용할 수 있습니다.
SAM 2는 정지 이미지에 대한 SAM의 모든 기능을 갖추고 있으며, 이미지 사용 사례를 위해 SAM과 매우 유사한 이미지 예측 API를 제공합니다. SAM2ImagePredictor 클래스는 이미지 프롬프팅 (image prompting)을 위한 쉬운 인터페이스를 제공합니다.
import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor
...
정지 이미지 사용 사례에 대해서는 image_predictor_example.ipynb (여기 Colab에서도 확인 가능)의 예제를 참조하십시오.
SAM 2는 SAM과 마찬가지로 이미지에서의 자동 마스크 생성 (automatic mask generation)도 지원합니다. 이미지에서의 자동 마스크 생성에 대해서는 automatic_mask_generator_example.ipynb (여기 Colab에서도 확인 가능)를 참조하십시오.
비디오에서의 프롬프트 기반 세그멘테이션 (promptable segmentation) 및 트래킹 (tracking)을 위해, 우리는 예를 들어 프롬프트를 추가하고 비디오 전체에 마스크릿 (masklets)을 전파할 수 있는 API를 갖춘 비디오 예측기 (video predictor)를 제공합니다. SAM 2는 여러 객체에 대한 비디오 추론 (video inference)을 지원하며, 각 비디오에서의 상호작용을 추적하기 위해 추론 상태 (inference state)를 사용합니다.
import torch
from sam2.build_sam import build_sam2_video_predictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
...
클릭 또는 박스 프롬프트 (click or box prompts)를 추가하고, 정교화 (refinements)를 수행하며, 비디오에서 여러 객체를 트래킹하는 방법에 대한 자세한 내용은 video_predictor_example.ipynb (여기 Colab에서도 확인 가능)의 예제를 참조하십시오.
대안으로, 모델은 Hugging Face로부터 로드할 수도 있습니다 (pip install huggingface_hub 필요).
이미지 예측의 경우:
import torch
from sam2.sam2_image_predictor import SAM2ImagePredictor
predictor = SAM2ImagePredictor.from_pretrained("facebook/sam2-hiera-large")
...
비디오 예측의 경우:
비디오 예측의 경우:
import torch
from sam2.sam2_video_predictor import SAM2VideoPredictor
predictor = SAM2VideoPredictor.from_pretrained("facebook/sam2-hiera-large")
...
아래 표는 2024년 9월 29일에 출시된 개선된 SAM 2.1 체크포인트입니다.
| Model | Size (M) | Speed (FPS) | SA-V test (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
|---|---|---|---|---|---|
| sam2.1_hiera_tiny (config, checkpoint) | 38.9 | 91.2 | 76.5 | 71.8 | 77.3 |
| sam2.1_hiera_small (config, checkpoint) | 46 | 84.8 | 76.6 | 73.5 | 78.3 |
| sam2.1_hiera_base_plus (config, checkpoint) | 80.8 | 64.1 | 78.2 | 73.7 | 78.2 |
| sam2.1_hiera_large (config, checkpoint) | 224.4 | 39.5 | 79.5 | 74.6 | 80.6 |
이전 SAM 2 체크포인트는 2024년 7월 29일에 출시되었으며 다음과 같습니다:
| Model | Size (M) | Speed (FPS) | SA-V test (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
|---|---|---|---|---|---|
| sam2_hiera_tiny (config, checkpoint) | 38.9 | 91.5 | 75.0 | 70.9 | 75.3 |
| sam2_hiera_small (config, checkpoint) | 46 | 85.6 | 74.9 | 71.5 | 76.4 |
| sam2_hiera_base_plus (config, checkpoint) | 80.8 | 64.8 | 74.7 | 72.8 | 75.8 |
| sam2_hiera_large (config, checkpoint) | 224.4 | 39.7 | 76.0 | 74.6 | 79.8 |
속도는 A100에서 torch 2.5.1, cuda 12.4로 측정되었습니다.
벤치마킹 예시를 보려면 benchmark.py를 참조하십시오 (모든 모델 구성 요소를 컴파일). 이미지 인코더만 컴파일하는 것이 더 유연할 수 있으며, 또한 속도 향상(설정에서 compile_image_encoder: True로 설정)을 제공합니다.
자세한 내용은 sav_dataset/README.md를 참조하십시오.
SAM 2는 이미지, 비디오 또는 둘 다의 사용자 지정 데이터셋으로 학습하거나 미세 조정할 수 있습니다. 시작하는 방법은 학습 README를 확인해 주십시오.
SAM 2 웹 데모(https://sam2.metademolab.com/demo와 유사하게 로컬 배포가 가능한 버전)에 대한 프론트엔드 및 백엔드 코드를 공개했습니다. 자세한 내용은 웹 데모 README를 참조하십시오.
SAM 2 모델 체크포인트 (checkpoints), SAM 2 데모 코드 (프론트엔드 및 백엔드), 그리고 SAM 2 학습 (training) 코드는 Apache 2.0 라이선스 하에 제공됩니다. 다만, SAM 2 데모 코드에 사용된 Inter Font와 Noto Color Emoji는 SIL Open Font License, version 1.1에 따라 제공됩니다.
기여(contributing) 및 행동 강령(code of conduct)을 확인하십시오.
SAM 2 프로젝트는 많은 기여자들의 도움으로 가능했습니다 (알파벳 순):
Karen Bergan, Daniel Bolya, Alex Bosenberg, Kai Brown, Vispi Cassod, Christopher Chedeau, Ida Cheng, Luc Dahlin, Shoubhik Debnath, Rene Martinez Doehner, Grant Gardner, Sahir Gomez, Rishi Godugu, Baishan Guo, Caleb Ho, Andrew Huang, Somya Jain, Bob Kamma, Amanda Kallet, Jake Kinney, Alexander Kirillov, Shiva Koduvayur, Devansh Kukreja, Robert Kuo, Aohan Lin, Parth Malani, Jitendra Malik, Mallika Malhotra, Miguel Martin, Alexander Miller, Sasha Mitts, William Ngan, George Orlin, Joelle Pineau, Kate Saenko, Rodrick Shepard, Azita Shokrpour, David Soofian, Jonathan Torres, Jenny Truong, Sagar Vaze, Meng Wang, Claudette Ward, Pengchuan Zhang.
제3자 코드 (Third-party code): 마스크 예측 (mask predictions)의 선택적 후처리 (post-processing) 단계로, cc_torch에서 가져와 수정한 GPU 기반 연결 요소 (connected component) 알고리즘을 사용합니다 (LICENSE_cctorch에 해당 라이선스가 포함되어 있습니다).
연구에 SAM 2 또는 SA-V 데이터셋을 사용하는 경우, 다음 BibTeX 항목을 사용해 주세요.
@article{ravi2024sam2,
title={SAM 2: Segment Anything in Images and Videos},
author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{"a}r, Piotr and Feichtenhofer, Christoph},
...
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Trending Jupyter Notebook (weekly)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기