프롬프트를 사용하면
세분화를 보다 구체적으로 할 수 있습니다.특정 지점 또는 일련의 지점
.상자
."우리의 도구와 SAM 2를 활용한 주석 달기는 프레임당 SAM을 사용할 때보다 약 8.4배 더 빠르며, SAM과 기존의 추적기를 결합한 방법보다도 훨씬 빠릅니다."
A100 GPU
”에서 자동 혼합 정밀도와 bfloat16을 적용하여 수행되었습니다. git clone https://github.com/facebookresearch/segment-anything-2
cd segment-anything-2
pip3 install -e .
모델 체크포인트(4가지 전부)
를 다운로드할 수 있습니다:cd checkpoints
./download_ckpts.sh
import torch
from sam2.build_sam import build_sam2
from sam2.automatic_mask_generator import SAM2AutomaticMaskGenerator
from PIL import Image
import numpy as np
sam2_checkpoint = "checkpoints/sam2_hiera_large.pt"
model_cfg = "sam2_hiera_l.yaml"
sam2 = build_sam2(model_cfg, sam2_checkpoint, device ='cuda', apply_postprocessing=False)
mask_generator = SAM2AutomaticMaskGenerator(sam2)
image = np.array(Image.open('image.jpeg').convert("RGB"))
masks = mask_generator.generate(image)
image.jpeg
는 추론을 실행하려는 이미지 이름으로 대체하세요.sam2_hiera_large.pt
는 사용할 가중치 파일 이름으로 대체하세요.sam2_hiera_l
는 사용할 체크포인트 이름으로 대체하세요.import supervision as sv
mask_annotator = sv.MaskAnnotator()
detections = sv.Detections.from_sam(masks)
detections.class_id = [i for i in range(len(detections))]
annotated_image = mask_annotator.annotate(image, detections)
sv.plot_image(image=annotated_image, size=(8, 8))
pip install autodistill-grounded-sam-2
from autodistill_grounded_sam_2 import GroundedSAM2
from autodistill.detection import CaptionOntology
from autodistill.utils import plot
import cv2
import supervision as sv
# 캡션을 Grounded SAM 2 프롬프트에 매핑하기 위한 온톨로지 정의
base_model = GroundedSAM2(
ontology=CaptionOntology(
{
"dog": "dog"
}
)
)
# 이미지에서 추론 실행
results = base_model.predict("dog.jpeg")
image = cv2.imread("dog.jpeg
")
mask_annotator = sv.MaskAnnotator()
annotated_image = mask_annotator.annotate(
image.copy(), detections=results
)
sv.plot_image(image=annotated_image, size=(8, 8))
실시간 처리
와 제로샷 일반화(Zero-Shot Generalization)
를 지원하는 통합된 프롬프트 기반 모델 아키텍처를 통해 복잡한 시각적 데이터를 처리하는 데 뛰어나다.초당 약 44 프레임
의 실시간 추론 속도를 달성하여, 분할 결과를 반복적으로 세분화할 수 있어, 결과물에 대한 정밀한 제어가 가능
메트릭 | SAM 2 | 이전 SOTA |
---|---|---|
상호작용 비디오 분할 | 최고 | - |
필요 상호작용 수 | 3배 적음 | 기본값 |
이미지 분할 정확도 | 개선됨 | SAM |
추론 속도 | 6배 빠름 | SAM |
시간적 종속성
과 비디오 데이터에서의 가림 문제
를 처리할 수 있도록 설계됨중복된 객체가 있는 복잡한 장면에서는 단일 마스크로는 충분하지 않을 수 있다. SAM 2는 이러한 모호한 상황에서 다중 마스크 예측을 생성할 수 있어 복잡한 장면을 정확하게 표현한다.
SAM 2는 가장 크고 다양한 비디오 분할 데이터셋 중 하나인 SA-V 데이터셋을 학습에 사용한다. 이 데이터셋에는 다음이 포함된다:
SAM 2는 주요 비디오 분할 벤치마크에서 뛰어난 성능을 보였다:
데이터셋 | J&F | J | F |
---|---|---|---|
DAVIS 2017 | 82.5 | 79.8 | 85.2 |
YouTube-VOS | 81.2 | 78.9 | 83.5 |
상호작용적 분할 작업에서 SAM 2는 효율성과 정확성을 입증했다:
데이터셋 | NoC@90 | AUC |
---|---|---|
DAVIS Interactive | 1.54 | 0.872 |
SAM 2를 설치하려면 아래 명령어를 사용하라. SAM 2 모델은 처음 사용할 때 자동으로 다운로드된다.
pip install ultralytics
다음 표는 SAM 2 모델과 사전 학습된 가중치, 지원되는 작업, 호환되는 운영 모드(추론, 검증, 학습, 내보내기)를 설명한다.
모델 타입 | 사전 학습된 가중치 | 지원되는 작업 | 추론 | 검증 | 학습 | 내보내기 |
---|---|---|---|---|---|---|
SAM 2 tiny | sam2_t.pt | 인스턴스 분할 | ✅ | ❌ | ❌ | ❌ |
SAM 2 small | sam2_s.pt | 인스턴스 분할 | ✅ | ❌ | ❌ | ❌ |
SAM 2 base | sam2_b.pt | 인스턴스 분할 | ✅ | ❌ | ❌ | ❌ |
SAM 2 large | sam2_l.pt | 인스턴스 분할 | ✅ | ❌ | ❌ | ❌ |
SAM 2는 비디오 편집, 의료 영상, 자율 시스템과 같은 다양한 작업에서 사용할 수 있다. 정적 및 동적 시각 데이터를 분할할 수 있는 능력 덕분에 연구자와 개발자에게 다재다능한 도구로 자리 잡고 있다.
from ultralytics import SAM
# 모델 로드
model = SAM("sam2_b.pt")
# 모델 정보 표시(선택 사항)
model.info()
# 바운딩 박스 프롬프트로 분할
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])
# 포인트 프롬프트로 분할
results = model("path/to/image.jpg", points=[150, 150], labels=[1])
from ultralytics import SAM
# 모델 로드
model = SAM("sam2_b.pt")
# 모델 정보 표시(선택 사항)
model.info()
# 추론 실행
model("path/to/video
.mp4")
모델 | 크기 (MB) | 파라미터 (M) | 속도 (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 161440 |
Meta SAM2-b | 162 | 80.8 | 121923 |
Meta SAM2-t | 78.1 | 38.9 | 85155 |
MobileSAM | 40.7 | 10.1 | 98543 |
FastSAM-s YOLOv8 | 23.7 | 11.8 | 140 |
YOLOv8n-seg | 6.7 (11.7x 더 작음) | 3.4 (11.4x 적음) | 79.5 (1071x 더 빠름) |
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam2_b.pt")
2024년 9월 30일 - SAM 2.1 개발자 스위트 (새 체크포인트, 훈련 코드, 웹 데모) 출시
training/README.md
에서 확인하세요.demo/README.md
에서 자세한 내용을 확인하세요.python>=3.10
, torch>=2.3.1
, torchvision>=0.18.1
을 필요로 합니다. PyTorch 및 TorchVision 종속성 설치 지침을 따르세요. SAM 2를 GPU 환경에 설치하려면 다음 명령을 사용하세요:git clone https://github.com/facebookresearch/sam2.git && cd sam2
pip install -e .
SAM 2 예측기를 사용하고 예시 노트북을 실행하려면 jupyter
와 matplotlib
가 필요하며, 다음 명령으로 설치할 수 있습니다:
pip install -e ".[notebooks]"
참고:
pip
로 설치하세요. 현재 환경에서 PyTorch 버전이 2.3.1보다 낮다면, 위 설치 명령은 pip
를 통해 최신 PyTorch 버전으로 업그레이드합니다.nvcc
컴파일러로 맞춤 CUDA 커널을 컴파일하는 작업을 필요로 합니다. 만약 컴퓨터에 이미 CUDA 툴킷이 설치되어 있지 않다면, PyTorch CUDA 버전에 맞는 CUDA 툴킷을 설치하세요.설치 중 발생할 수 있는 문제와 해결책에 대해서는 INSTALL.md
에서 자주 묻는 질문을 확인하세요.
먼저, 모델 체크포인트를 다운로드해야 합니다. 모든 모델 체크포인트는 다음 명령으로 다운로드할 수 있습니다:
cd checkpoints && \
./download_ckpts.sh && \
cd ..
또는 개별적으로 다운로드할 수 있습니다:
sam2.1_hiera_tiny.pt
sam2.1_hiera_small.pt
sam2.1_hiera_base_plus.pt
sam2.1_hiera_large.pt
(이들은 SAM 2.1로 표시된 개선된 체크포인트입니다. 자세한 내용은 모델 설명을 참조하세요.)
이후 SAM 2는 이미지와 비디오 예측에 다음과 같이 간단하게 사용할 수 있습니다.
이미지 예측
SAM 2는 정적 이미지에 대한 SAM의 모든 기능을 가지고 있으며, 이미지 사용 사례를 위해 SAM과 유사한 이미지 예측 API를 제공합니다. SAM2ImagePredictor
클래스는 이미지 프롬프트를 위한 쉬운 인터페이스를 제공합니다.
import torch
from sam2.build_sam import build_sam2
from sam2.sam2_image_predictor import SAM2ImagePredictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
정적 이미지 사용 사례에 대해서는 image_predictor_example.ipynb
(또는 Colab에서) 예시를 참조하세요.
SAM 2는 또한 이미지에서 자동 마스크 생성을 지원합니다. 자동 마스크 생성을 위한 automatic_mask_generator_example.ipynb
(또는 Colab에서) 예시를 참조하세요.
import torch
from sam2.build_sam import build_sam2_video_predictor
checkpoint = "./checkpoints/sam2.1_hiera_large.pt"
model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml"
predictor = build_sam2_video_predictor(model_cfg, checkpoint)
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
state = predictor.init_state(<your_video>)
# 새 프롬프트를 추가하고 같은 프레임에서 바로 결과 얻기
frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):
# 프롬프트를 전파하여 비디오 전반에 마스크 생성
for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
...
video_predictor_example.ipynb
(또는 Colab에서) 예시를 참조하세요.Hugging Face에서 불러오기
대안적으로, 모델은 Hugging Face에서 불러올 수 있습니다 (pip install huggingface_hub
필요).
이미지 예측:
import torch
from sam2.sam2_image_predictor import SAM2ImagePredictor
predictor = SAM2ImagePredictor.from_pretrained("facebook/sam2-hiera-large")
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
predictor.set_image(<your_image>)
masks, _, _ = predictor.predict(<input_prompts>)
비디오 예측:
import torch
from sam2.sam2_video_predictor import SAM2VideoPredictor
predictor = SAM2VideoPredictor.from_pretrained("facebook/sam2-hiera-large")
with torch.inference_mode(), torch.autocast("cuda", dtype=torch.bfloat16):
state = predictor.init_state(<your_video>)
# 새 프롬프트를 추가하고 같은 프레임에서 바로 결과 얻기
frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):
# 프롬프트를 전파하여 비디오 전반에 마스크 생성
for frame_idx, object_ids, masks in predictor.propagate_in_video(state):
...
모델 설명
SAM 2.1 체크포인트
아래 표는 2024년 9월 29일에 출시된 SAM 2.1 체크포인트의 성능을 나타냅니다.
모델 | 크기 (M) | 속도 (FPS) | SA-V 테스트 (J&F) | MOSE val (J&F) | LVOS v2 (J&F) |
---|---|---|---|---|---|
sam2.1_hiera_tiny | 38.9 | 47.2 | 76.5 | 71.8 | 77.3 |
sam2.1_hiera_small | 46 | 43.3 (53.0 컴파일*) | 76.6 | 73.5 | 78.3 |
sam2.1_hiera_base_plus | 80.8 | 34.8 (43.8 컴파일*) | 78.2 | 73.7 | 78.2 |
sam2.1_hiera_large | 224.4 | 24.2 (30.2 컴파일*) | 79.5 | 74.6 | - |