Link to this sectionSegment Anything Model (SAM)#
SAM(Segment Anything Model)과 함께하는 이미지 세그멘테이션의 최전선에 오신 것을 환영합니다. 이 혁신적인 모델은 실시간 성능을 갖춘 프롬프트 기반 이미지 세그멘테이션을 도입하여 해당 분야의 새로운 기준을 세우며 판도를 바꾸어 놓았습니다.
Link to this sectionSAM 소개: Segment Anything Model#
SAM(Segment Anything Model)은 이미지 분석 작업에서 타의 추종을 불허하는 유연성을 제공하는 프롬프트 기반 세그멘테이션을 지원하는 최첨단 이미지 세그멘테이션 모델입니다. SAM은 이미지 세그멘테이션을 위한 새로운 모델, 작업 및 데이터셋을 도입하는 획기적인 프로젝트인 Segment Anything 이니셔티브의 핵심입니다.
SAM의 고급 설계는 사전 지식 없이도 새로운 이미지 분포와 작업에 적응할 수 있게 하며, 이를 제로샷(zero-shot) 전이 학습이라고 합니다. 1,100만 장의 엄선된 이미지에 걸쳐 10억 개 이상의 마스크를 포함하는 광범위한 SA-1B 데이터셋으로 훈련된 SAM은 인상적인 제로샷 성능을 보여주며, 많은 경우에서 기존의 완전 지도 학습 결과를 능가했습니다.
SA-1B 예시 이미지. 데이터셋 이미지 위에 새롭게 도입된 SA-1B 데이터셋의 마스크가 덧씌워져 있습니다. SA-1B는 1,100만 장의 다양하고 고해상도인 라이선스 기반 개인정보 보호 이미지와 11억 개의 고품질 세그멘테이션 마스크를 포함합니다. 이 마스크들은 SAM에 의해 완전히 자동으로 주석 처리되었으며, 인간 평가 및 수많은 실험을 통해 검증된 바와 같이 높은 품질과 다양성을 자랑합니다. 이미지는 시각화를 위해 이미지당 마스크 수별로 그룹화되었습니다(평균적으로 이미지당 약 100개의 마스크가 있습니다).
Link to this sectionSegment Anything Model(SAM)의 주요 특징#
- 프롬프트 기반 세그멘테이션 작업: SAM은 프롬프트 기반 세그멘테이션 작업을 염두에 두고 설계되었으며, 객체를 식별하는 공간적 또는 텍스트 단서와 같은 주어진 프롬프트로부터 유효한 세그멘테이션 마스크를 생성할 수 있습니다.
- 고급 아키텍처: Segment Anything Model은 강력한 이미지 인코더, 프롬프트 인코더 및 경량 마스크 디코더를 사용합니다. 이러한 독특한 아키텍처는 유연한 프롬프팅, 실시간 마스크 계산, 세그멘테이션 작업에서의 모호성 인식을 가능하게 합니다.
- SA-1B 데이터셋: Segment Anything 프로젝트에서 도입한 SA-1B 데이터셋은 1,100만 장의 이미지에 11억 개 이상의 마스크를 포함하고 있습니다. 현재까지 가장 큰 세그멘테이션 데이터셋으로서 SAM에 다양하고 대규모의 훈련 데이터 소스를 제공합니다.
- 제로샷 성능: SAM은 다양한 세그멘테이션 작업 전반에서 뛰어난 제로샷 성능을 발휘하며, 프롬프트 엔지니어링에 대한 최소한의 요구만으로도 다양한 애플리케이션에 바로 사용할 수 있는 도구가 됩니다.
Segment Anything Model과 SA-1B 데이터셋에 대한 자세한 내용은 Segment Anything GitHub를 방문하시고 연구 논문 Segment Anything을 확인해 주십시오.
SAM powers the smart annotation feature on Ultralytics Platform, enabling click-based intelligent masking for fast dataset labeling. See the annotation guide for details.
Link to this section사용 가능한 모델, 지원 작업 및 운영 모드#
이 표는 특정 사전 훈련된 가중치를 가진 사용 가능한 모델, 지원하는 작업, 그리고 추론(Inference), 검증(Validation), 학습(Training), 내보내기(Export)와 같은 다양한 운영 모드와의 호환성을 보여줍니다. ✅ 이모지는 지원되는 모드를, ❌ 이모지는 지원되지 않는 모드를 나타냅니다.
| 모델 유형 | 사전 훈련된 가중치 | 지원되는 작업 | 추론 | 검증 | 학습 | 내보내기(Export) |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | 인스턴스 세그멘테이션 | ✅ | ❌ | ❌ | ❌ |
| SAM large | sam_l.pt | 인스턴스 세그멘테이션 | ✅ | ❌ | ❌ | ❌ |
Link to this sectionSAM 사용 방법: 이미지 세그멘테이션의 범용성과 강력함#
Segment Anything Model은 훈련 데이터를 넘어서는 수많은 다운스트림 작업에 활용될 수 있습니다. 여기에는 엣지 검출, 객체 제안 생성, 인스턴스 세그멘테이션 및 예비 텍스트-마스크 예측이 포함됩니다. 프롬프트 엔지니어링을 통해 SAM은 새로운 작업과 데이터 분포에 제로샷 방식으로 빠르게 적응할 수 있으며, 모든 이미지 세그멘테이션 요구 사항을 해결하는 범용적이고 강력한 도구로 자리매김하고 있습니다.
Link to this sectionSAM 예측 예시#
주어진 프롬프트로 이미지 세그멘테이션 수행.
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)를 전달하지 않으면 이미지 전체를 세그멘테이션하는 것입니다.
이 방식을 사용하면 이미지를 한 번 설정하고 이미지 인코더를 여러 번 실행할 필요 없이 프롬프트 추론을 여러 번 수행할 수 있습니다.
import cv2
from ultralytics.models.sam import Predictor as SAMPredictor
# Create SAMPredictor
overrides = dict(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 = dict(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 객체입니다.
- More additional args for
Segment everythingseePredictor/generateReference.
Link to this sectionSAM과 YOLO 비교#
여기에서는 Meta의 SAM-b 모델과 YOLO26n-seg를 포함한 Ultralytics 세그멘테이션 모델들을 비교합니다:
| 모델 | 크기 (MB) | 파라미터 (M) | 속도 (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s with YOLOv8 backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (52.8배 더 작음) | 3.4 (27.6배 더 적음) | 24.8 (1682배 더 빠름) |
| Ultralytics YOLO11n-seg | 6.2 (60.5배 더 작음) | 2.9 (32.3배 더 적음) | 24.3 (1716배 더 빠름) |
| Ultralytics YOLO26n-seg | 6.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)Link to this section자동 주석: 세그멘테이션 데이터셋으로 가는 빠른 길#
자동 주석(Auto-annotation)은 SAM의 주요 기능으로, 사용자가 사전 훈련된 검출 모델을 사용하여 세그멘테이션 데이터셋을 생성할 수 있게 합니다. 이 기능은 많은 수의 이미지를 빠르고 정확하게 주석 처리할 수 있게 해주어 시간이 많이 소요되는 수동 라벨링 작업을 건너뛸 수 있게 합니다.
Link to this section검출 모델을 사용하여 세그멘테이션 데이터셋 생성하기#
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")| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
data | str | 필수 | 주석 또는 세그멘테이션을 위한 대상 이미지가 포함된 디렉토리 경로. |
det_model | str | 'yolo26x.pt' | 초기 객체 검출을 위한 YOLO 검출 모델 경로. |
sam_model | str | 'sam_b.pt' | 세그멘테이션을 위한 SAM 모델 경로 (SAM, SAM 2, MobileSAM 및 SAM 3 가중치 지원). |
device | str | '' | 컴퓨팅 장치 (예: 'cuda:0', 'cpu' 또는 자동 장치 검출을 위한 빈 문자열). |
conf | float | 0.25 | 약한 탐지를 필터링하기 위한 YOLO 탐지 신뢰도 임계값입니다. |
iou | float | 0.45 | 겹치는 박스를 필터링하기 위한 NMS(Non-Maximum Suppression) IoU 임계값입니다. |
imgsz | int | 640 | 이미지 크기 조정을 위한 입력 크기입니다(32의 배수여야 합니다). |
max_det | int | 300 | 메모리 효율을 위해 이미지당 허용되는 최대 탐지 수입니다. |
classes | list[int] | None | 탐지할 클래스 인덱스 목록입니다(예: 사람 및 자전거의 경우 [0, 1]). |
output_dir | str | None | 주석 저장 디렉토리입니다(기본값: <data>_auto_annotate_labels와 동일한 위치). |
auto_annotate 함수는 이미지 경로를 인자로 받으며, 사전 학습된 탐지 모델 및 SAM 세그멘테이션 모델 지정, 모델 실행 장치 설정, 주석 결과 저장을 위한 출력 디렉토리 지정을 위한 선택적 인자를 지원합니다.
사전 학습된 모델을 사용한 자동 주석(Auto-annotation) 기능은 고품질 세그멘테이션 데이터셋을 구축하는 데 필요한 시간과 노력을 대폭 줄여줄 수 있습니다. 이 기능은 대규모 이미지 데이터를 다루는 연구원 및 개발자가 수동 주석 작업 대신 모델 개발 및 평가에 집중할 수 있도록 해주므로 매우 유용합니다.
Link to this section인용 및 감사의 글#
연구나 개발 업무에 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에 감사를 표합니다.
Link to this sectionFAQ#
Link to this sectionUltralytics의 Segment Anything Model (SAM)이란 무엇입니까?#
Ultralytics의 Segment Anything Model (SAM)은 프롬프트 기반 세그멘테이션 작업을 위해 설계된 혁신적인 이미지 세그멘테이션 모델입니다. 이 모델은 이미지 및 프롬프트 인코더와 경량화된 마스크 디코더가 결합된 고급 아키텍처를 활용하여 공간 정보나 텍스트 신호와 같은 다양한 프롬프트로부터 고품질의 세그멘테이션 마스크를 생성합니다. 방대한 SA-1B 데이터셋으로 학습된 SAM은 사전 지식 없이도 새로운 이미지 분포와 작업에 적응하는 제로샷(zero-shot) 성능이 뛰어납니다.
Link to this section이미지 세그멘테이션을 위해 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더 자세한 사용 지침은 세그멘테이션 섹션을 참조하십시오.
Link to this sectionSAM과 YOLO 모델의 성능은 어떻게 비교됩니까?#
YOLO 모델과 비교할 때, SAM-b, MobileSAM, FastSAM-s와 같은 SAM 변형 모델은 일반적으로 더 크고 느리지만 독보적인 제로샷 세그멘테이션 기능을 제공합니다. 예를 들어, YOLO26n-seg는 CPU 환경에서 Meta의 원본 SAM-b 모델보다 56배 작고 1650배 이상 빠릅니다. 따라서 신속하고 가벼우며 계산 효율적인 세그멘테이션이 필요한 애플리케이션에는 YOLO 모델이 이상적이며, 유연하고 프롬프트 기반의 제로샷 세그멘테이션 작업에는 SAM 모델이 탁월합니다.
Link to this sectionSAM을 사용하여 데이터셋을 어떻게 자동 주석할 수 있습니까?#
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 세그멘테이션 모델, 장치 및 출력 디렉토리 설정을 위한 선택적 인자를 포함합니다. 자세한 안내는 자동 주석을 참조하십시오.
Link to this sectionSegment Anything Model (SAM)을 학습시키는 데 어떤 데이터셋이 사용됩니까?#
SAM은 1,100만 장의 이미지에 걸쳐 10억 개 이상의 마스크가 포함된 방대한 SA-1B 데이터셋으로 학습되었습니다. SA-1B는 현재까지 가장 큰 세그멘테이션 데이터셋으로, 고품질의 다양한 학습 데이터를 제공하여 다양한 세그멘테이션 작업에서 인상적인 제로샷 성능을 보장합니다. 더 자세한 내용은 데이터셋 섹션을 참조하십시오.