YOLO Vision 2026:

Segment Anything Model (SAM)#

SAM 발전

Meta의 원본 SAM 모델입니다. 향상된 기능은 비디오 세그멘테이션을 위한 SAM 2 또는 텍스트 및 이미지 예시 프롬프트를 사용하는 프롬프트 기반 컨셉 세그멘테이션을 위한 SAM 3를 참조하십시오.

How to use Segment Anything In Colab

Segment Anything Model(SAM)과 함께 이미지 세그멘테이션의 최전선에 오신 것을 환영합니다. 이 혁신적인 모델은 실시간 성능을 갖춘 프롬프트 기반 이미지 세그멘테이션을 도입하여 이 분야의 새로운 표준을 세우며 판도를 바꾸어 놓았습니다.

SAM 소개: Segment Anything Model#

SAM(Segment Anything Model)은 이미지 분석 작업에서 타의 추종을 불허하는 유연성을 제공하는 프롬프트 기반 세그멘테이션을 지원하는 최첨단 이미지 세그멘테이션 모델입니다. SAM은 이미지 세그멘테이션을 위한 새로운 모델, 작업 및 데이터셋을 도입하는 획기적인 프로젝트인 Segment Anything 이니셔티브의 핵심입니다.

SAM의 고급 설계는 사전 지식 없이도 새로운 이미지 분포와 작업에 적응할 수 있게 해주며, 이를 제로샷 전파(zero-shot transfer)라고 합니다. 1,100만 장 이상의 엄선된 이미지에 걸쳐 10억 개 이상의 마스크를 포함하는 방대한 SA-1B dataset으로 학습된 SAM은 인상적인 제로샷 성능을 보여주며 많은 경우 이전의 완전 지도 학습 결과를 능가합니다.

SA-1B dataset sample with automatic segmentation masks SA-1B 예시 이미지. 새로 도입된 SA-1B dataset의 데이터셋 이미지에 마스크가 오버레이되어 있습니다. SA-1B에는 1,100만 장의 다양하고 고해상도인 라이선스 및 프라이버시 보호 이미지와 11억 개의 고품질 세그멘테이션 마스크가 포함되어 있습니다. 이 마스크들은 SAM에 의해 완전히 자동으로 주석 처리되었으며, 인간의 평가와 수많은 실험을 통해 검증된 바와 같이 높은 품질과 다양성을 자랑합니다. 시각화를 위해 이미지는 이미지당 마스크 수별로 그룹화되어 있습니다(이미지당 평균 약 100개의 마스크가 존재합니다).

Segment Anything Model(SAM)의 주요 특징#

  • 프롬프트 기반 세그멘테이션 작업: SAM은 프롬프트 기반 세그멘테이션 작업을 염두에 두고 설계되었으며, 객체를 식별하는 공간적 또는 텍스트 단서와 같은 주어진 프롬프트로부터 유효한 세그멘테이션 마스크를 생성할 수 있습니다.
  • 고급 아키텍처: Segment Anything Model은 강력한 이미지 인코더, 프롬프트 인코더 및 경량 마스크 디코더를 사용합니다. 이러한 독특한 아키텍처는 유연한 프롬프팅, 실시간 마스크 계산, 세그멘테이션 작업에서의 모호성 인식을 가능하게 합니다.
  • SA-1B 데이터셋: Segment Anything 프로젝트에서 도입한 SA-1B 데이터셋은 1,100만 장의 이미지에 11억 개 이상의 마스크를 포함하고 있습니다. 현재까지 가장 큰 세그멘테이션 데이터셋으로서 SAM에 다양하고 대규모의 훈련 데이터 소스를 제공합니다.
  • 제로샷 성능: SAM은 다양한 세그멘테이션 작업에서 뛰어난 제로샷 성능을 보여주며, 프롬프트 엔지니어링에 대한 필요성을 최소화하면서 다양한 애플리케이션에 바로 사용할 수 있는 도구입니다.

Segment Anything Model과 SA-1B dataset에 대한 자세한 내용은 Segment Anything GitHub를 방문하시고 연구 논문인 Segment Anything을 확인해 주십시오.

Ultralytics 플랫폼에서의 SAM

SAM은 Ultralytics Platformsmart annotation feature를 구동하여 빠르고 효율적인 데이터셋 라벨링을 위한 클릭 기반 지능형 마스킹을 지원합니다. 자세한 내용은 annotation guide를 참조하세요.

사용 가능한 모델, 지원 작업 및 운영 모드#

이 표는 사용 가능한 모델과 특정 사전 학습된 가중치, 지원하는 작업, 그리고 지원되는 모드에는 ✅ 이모지를, 지원되지 않는 모드에는 ❌ 이모지를 표시하여 Inference, Validation, Training, Export와 같은 다양한 작동 모드와의 호환성을 보여줍니다.

모델 유형사전 학습된 가중치지원되는 작업학습검증추론내보내기(Export)
SAM basesam_b.pt인스턴스 세그멘테이션
SAM largesam_l.pt인스턴스 세그멘테이션

SAM 사용 방법: 이미지 세그멘테이션의 범용성과 강력함#

Segment Anything Model은 학습 데이터를 넘어선 다양한 다운스트림 작업에 활용될 수 있습니다. 여기에는 엣지 검출, 객체 제안 생성, 인스턴스 세그멘테이션, 그리고 예비 텍스트-투-마스크 예측이 포함됩니다. 프롬프트 엔지니어링을 통해 SAM은 새로운 작업과 데이터 분포에 제로샷 방식으로 신속하게 적응할 수 있으며, 이를 통해 모든 이미지 세그멘테이션 요구 사항에 다재다능하고 강력한 도구로 자리잡고 있습니다.

SAM 예측 예시#

프롬프트를 통한 세그멘테이션

주어진 프롬프트로 이미지 세그멘테이션 수행.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
전체 세그멘테이션

이미지 전체를 세그멘테이션.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/image.jpg")
  • 여기에서의 로직은 프롬프트(bboxes/points/masks)를 전달하지 않으면 이미지 전체를 세그멘테이션하는 것입니다.
SAMPredictor 예시

이 방식을 사용하면 이미지를 한 번 설정하고 이미지 인코더를 여러 번 실행할 필요 없이 프롬프트 추론을 여러 번 수행할 수 있습니다.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reset image
predictor.reset_image()

추가 인수를 사용하여 모든 것을 세그멘테이션.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)
참고

위 예시에서 반환된 모든 results은 예측된 마스크와 소스 이미지에 쉽게 액세스할 수 있게 해주는 Results 객체입니다.

SAM과 YOLO 비교#

여기서는 Meta의 SAM-b 모델을 YOLO26n-seg을 포함한 Ultralytics 세그멘테이션 모델과 비교합니다:

모델크기
(MB)
매개변수
(M)
속도 (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
YOLOv8 backbone이 적용된 FastSAM-s23.911.858.0
Ultralytics YOLOv8n-seg7.1 (52.8배 더 작음)3.4 (27.6배 더 적음)24.8 (1682배 더 빠름)
Ultralytics YOLO11n-seg6.2 (60.5배 더 작음)2.9 (32.3배 더 적음)24.3 (1716배 더 빠름)
Ultralytics YOLO26n-seg6.7 (56.0배 더 작음)2.7 (34.7배 더 적음)25.2 (1655배 더 빠름)

이 비교는 SAM 변형 모델과 YOLO 세그멘테이션 모델 간의 모델 크기와 속도에 대한 상당한 차이를 보여줍니다. SAM이 고유한 자동 세그멘테이션 기능을 제공하는 반면, YOLO 모델(특히 YOLOv8n-seg, YOLO11n-seg 및 YOLO26n-seg)은 훨씬 작고 빠르며 계산 효율성이 뛰어납니다.

SAM 속도는 PyTorch로 측정되었으며, YOLO 속도는 ONNX Runtime으로 측정되었습니다. 테스트는 torch==2.10.0, ultralytics==8.4.31, onnxruntime==1.24.4를 사용하여 16GB RAM이 탑재된 2025년형 Apple M4 Air에서 실행되었습니다. 이 테스트를 재현하려면:

예시
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Profile YOLO models (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True)
    model = YOLO(onnx_path)
    model(ASSETS)

자동 주석: 세그멘테이션 데이터셋으로 가는 빠른 길#

자동 주석은 SAM의 핵심 기능으로, 사용자가 사전 학습된 검출 모델을 사용하여 세그멘테이션 데이터셋을 생성할 수 있도록 해줍니다. 이 기능을 통해 번거롭고 시간이 오래 걸리는 수동 라벨링 과정을 거치지 않고도 대량의 이미지에 빠르고 정확하게 주석을 달 수 있습니다.

검출 모델을 사용하여 세그멘테이션 데이터셋 생성하기#

Ultralytics 프레임워크로 데이터셋에 자동으로 주석을 달려면 아래와 같이 auto_annotate 함수를 사용하십시오:

예시
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")
인수유형기본값설명
datastr필수주석 또는 세그멘테이션을 위한 대상 이미지가 포함된 디렉토리 경로.
det_modelstr'yolo26x.pt'초기 객체 탐지를 위한 YOLO 탐지 모델 경로입니다.
sam_modelstr'sam_b.pt'세그멘테이션을 위한 SAM 모델 경로입니다 (SAM, SAM 2, MobileSAM 및 SAM 3 가중치 지원).
devicestr''연산 장치입니다 (예: 'cuda:0', 'cpu', 또는 자동 장치 탐지를 위한 '').
conffloat0.25약한 탐지를 필터링하기 위한 YOLO 탐지 신뢰도 임계값입니다.
ioufloat0.45겹치는 박스를 필터링하기 위한 NMS(Non-Maximum Suppression) IoU 임계값입니다.
imgszint640이미지 크기 조정을 위한 입력 크기입니다(32의 배수여야 합니다).
max_detint300메모리 효율을 위해 이미지당 허용되는 최대 탐지 수입니다.
classeslist[int]None검출할 클래스 인덱스 목록 (예: 사람 및 자전거의 경우 [0, 1]).
output_dirstrNone주석 저장 디렉토리 (기본값: <data>_auto_annotate_labels 형제 디렉토리).

auto_annotate 함수는 이미지 경로를 입력받으며, 사전 학습된 검출 및 SAM 세그멘테이션 모델을 지정하기 위한 선택적 인자, 모델을 실행할 디바이스, 그리고 주석이 달린 결과를 저장할 출력 디렉토리를 인자로 받습니다.

사전 학습된 모델을 사용한 자동 주석(Auto-annotation) 기능은 고품질 세그멘테이션 데이터셋을 구축하는 데 필요한 시간과 노력을 대폭 줄여줄 수 있습니다. 이 기능은 대규모 이미지 데이터를 다루는 연구원 및 개발자가 수동 주석 작업 대신 모델 개발 및 평가에 집중할 수 있도록 해주므로 매우 유용합니다.

인용 및 감사의 글#

연구나 개발 업무에 SAM이 도움이 되었다면 저희 논문을 인용해 주시기 바랍니다:

인용
@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

컴퓨터 비전 커뮤니티를 위해 이 귀중한 리소스를 만들고 유지 관리해 주는 Meta AI에 감사의 말씀을 전합니다.

FAQ#

Ultralytics의 Segment Anything Model (SAM)이란 무엇입니까?#

Ultralytics의 Segment Anything Model (SAM)은 프롬프트 기반 세그멘테이션 작업을 위해 설계된 혁신적인 이미지 세그멘테이션 모델입니다. 이미지 및 프롬프트 인코더가 경량 마스크 디코더와 결합된 고급 아키텍처를 활용하여 공간 또는 텍스트 단서와 같은 다양한 프롬프트로부터 고품질 세그멘테이션 마스크를 생성합니다. 방대한 SA-1B dataset으로 학습된 SAM은 사전 지식 없이도 새로운 이미지 분포와 작업에 적응하는 뛰어난 제로샷 성능을 발휘합니다.

이미지 세그멘테이션을 위해 Segment Anything Model (SAM)을 어떻게 사용할 수 있습니까?#

바운딩 박스나 포인트와 같은 다양한 프롬프트를 사용하여 추론을 실행함으로써 이미지 세그멘테이션에 Segment Anything Model (SAM)을 사용할 수 있습니다. 다음은 Python을 사용한 예시입니다:

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Segment with multiple points prompt
model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])

# Segment with multiple points prompt per object
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Segment with negative points prompt.
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

또는 명령줄 인터페이스(CLI)를 통해 SAM으로 추론을 실행할 수 있습니다:

yolo predict model=sam_b.pt source=path/to/image.jpg

더 자세한 사용법은 Segmentation section을 방문하십시오.

SAM과 YOLO 모델의 성능은 어떻게 비교됩니까?#

YOLO 모델과 비교할 때, SAM-b, MobileSAM, FastSAM-s와 같은 SAM 변형 모델들은 일반적으로 더 크고 느리지만 독보적인 제로샷 세그멘테이션 기능을 제공합니다. 예를 들어, YOLO26n-seg는 CPU에서 Meta의 원본 SAM-b 모델보다 56배 작고 1650배 이상 빠릅니다. 이로 인해 YOLO 모델은 빠르고 가벼우며 연산 효율성이 요구되는 애플리케이션에 이상적이며, 반면 SAM 모델은 유연하고 프롬프트 기반이며 제로샷 세그멘테이션 작업에서 뛰어납니다.

SAM을 사용하여 데이터셋을 어떻게 자동 주석할 수 있습니까?#

Ultralytics의 SAM은 사전 학습된 탐지 모델을 사용하여 세그멘테이션 데이터셋을 생성할 수 있는 자동 주석 기능을 제공합니다. 다음은 Python을 사용한 예시입니다:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

이 함수는 이미지 경로와 사전 학습된 검출 및 SAM 세그멘테이션 모델을 위한 선택적 인자, 그리고 디바이스 및 출력 디렉토리 지정을 입력받습니다. 전체 가이드는 Auto-Annotation을 참조하십시오.

Segment Anything Model (SAM)을 학습시키는 데 어떤 데이터셋이 사용됩니까?#

SAM은 1,100만 장의 이미지에 걸쳐 10억 개 이상의 마스크로 구성된 광범위한 SA-1B dataset으로 학습되었습니다. SA-1B는 현재까지 가장 큰 세그멘테이션 데이터셋으로, 고품질의 다양한 학습 데이터를 제공하여 다양한 세그멘테이션 작업에서 인상적인 제로샷 성능을 보장합니다. 자세한 내용은 Dataset section을 방문하십시오.

댓글