Ultralytics YOLO27:

패스트 세그먼트 애니싱 모델 (FastSAM)#

패스트 세그먼트 애니싱 모델 (FastSAM)은 세그먼트 애니싱 작업을 위한 새로운 실시간 CNN 기반 솔루션입니다. 이 작업은 다양한 사용자 상호작용 프롬프트를 기반으로 이미지 내 모든 객체를 분할하도록 설계되었습니다. FastSAM은 경쟁력 있는 성능을 유지하면서도 연산 요구 사항을 크게 줄여 다양한 비전 작업에 실용적인 선택지를 제공합니다.



Watch: Object Tracking using FastSAM with Ultralytics

모델 아키텍처#

패스트 세그먼트 애니싱 모델 (FastSAM) 아키텍처 개요

개요#

FastSAM은 상당한 컴퓨팅 리소스를 요구하는 대형 세그먼트 애니싱 모델 (SAM)Transformer 모델의 한계를 해결하도록 설계되었습니다. FastSAM은 세그먼트 애니싱 작업을 모든-인스턴스 세그멘테이션과 프롬프트 기반 선택이라는 두 개의 순차적 단계로 분리합니다. 첫 번째 단계에서는 YOLOv8-seg를 사용하여 이미지 내 모든 인스턴스의 세그멘테이션 마스크를 생성합니다. 두 번째 단계에서는 프롬프트에 해당하는 관심 영역을 출력합니다.

주요 기능#

  1. 실시간 솔루션: CNN의 높은 연산 효율을 활용하는 FastSAM은 세그먼트 애니싱 작업을 위한 실시간 솔루션을 제공하므로, 빠른 결과가 필요한 산업용 애플리케이션에 유용합니다.

  2. 효율성과 성능: FastSAM은 성능 품질을 저하시키지 않으면서 연산 및 리소스 요구 사항을 크게 줄입니다. SAM과 비슷한 성능을 훨씬 적은 연산 리소스로 달성하여 실시간 애플리케이션을 구현할 수 있습니다.

  3. 프롬프트 기반 세그멘테이션: FastSAM은 다양한 사용자 상호작용 프롬프트를 기반으로 이미지 내 모든 객체를 분할할 수 있어 여러 시나리오에서 유연성과 적응성을 제공합니다.

  4. YOLOv8-seg 기반: FastSAM은 인스턴스 세그멘테이션 브랜치가 탑재된 객체 검출기 YOLOv8-seg를 기반으로 합니다. 이를 통해 이미지 내 모든 인스턴스의 세그멘테이션 마스크를 효과적으로 생성할 수 있습니다.

  5. 벤치마크에서의 경쟁력 있는 결과: MS COCO의 객체 제안 작업에서 FastSAM은 단일 NVIDIA RTX 3090에서 SAM보다 훨씬 빠른 속도로 높은 점수를 달성하여 효율성과 성능을 입증합니다.

  6. 실용적인 애플리케이션: 제안된 접근 방식은 다양한 비전 작업을 위한 새롭고 실용적인 솔루션을 매우 높은 속도로 제공합니다. 현재 방법보다 수십 배 또는 수백 배 빠릅니다.

  7. 모델 압축 가능성: FastSAM은 구조에 인공적인 사전 정보를 도입하여 연산량을 크게 줄일 수 있는 경로의 실현 가능성을 입증하며, 일반적인 비전 작업을 위한 대규모 모델 아키텍처에 새로운 가능성을 열어 줍니다.

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

이 표에는 사용 가능한 모델과 해당 사전 학습 가중치, 지원되는 작업, 추론, 검증, 학습, 내보내기와 같은 다양한 운영 모드와의 호환성이 나와 있습니다. 지원되는 모드는 ✅ 이모지로, 지원되지 않는 모드는 ❌ 이모지로 표시합니다.

모델 유형사전 학습된 가중치지원되는 작업학습검증추론내보내기
FastSAM-sFastSAM-s.pt인스턴스 세그멘테이션
FastSAM-xFastSAM-x.pt인스턴스 세그멘테이션

YOLO와 FastSAM 비교#

여기서는 FastSAM-s를 Meta의 SAM 변형 모델 및 YOLO26n-seg을 포함한 Ultralytics 분할 모델과 비교합니다:

모델크기
(MB)
파라미터
(M)
속도 (CPU)
(ms/이미지)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
YOLOv8 백본을 사용하는 FastSAM-s23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0배 더 작음)3.4 (11.4배 더 적음)24.8 (945배 더 빠름)
Ultralytics YOLO11n-seg6.2 (12.6배 작음)2.9 (13.4배 더 적음)24.3 (964배 빠름)
Ultralytics YOLO26n-seg6.7 (11.7배 더 작음)2.7 (14.4배 적음)25.2 (930배 더 빠름)

이 비교는 SAM 변형 모델과 YOLO 분할 모델 간의 모델 크기와 속도 차이가 상당함을 보여줍니다. SAM은 고유한 자동 분할 기능을 제공하지만, 특히 YOLOv8n-seg, YOLO11n-seg 및 YOLO26n-seg와 같은 YOLO 모델은 훨씬 작고 빠르며 계산 효율성이 높습니다.

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

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

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.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, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

사용 예시#

FastSAM 모델은 Python 애플리케이션에 쉽게 통합할 수 있습니다. Ultralytics는 개발을 간소화할 수 있도록 사용자 친화적인 Python API와 CLI 명령을 제공합니다.

Predict 사용법#

이미지를 분할하려면 아래에 표시된 대로 predict 메서드를 사용하십시오:

예시
from ultralytics import FastSAM

# Define an inference source
source = "path/to/bus.jpg"

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)

# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])

# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])

# Run inference with texts prompt
results = model(source, texts="a photo of a dog")

# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

이 코드 조각은 사전 학습된 모델을 로드하고 이미지에서 예측을 실행하는 과정이 간단하다는 것을 보여 줍니다.

FastSAMPredictor 예제

이렇게 하면 이미지에서 추론을 실행하여 모든 세그먼트 results를 한 번 가져온 다음, 추론을 반복 실행하지 않고 여러 번 프롬프트 추론을 실행할 수 있습니다.

from ultralytics.models.fastsam import FastSAMPredictor

# Create FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)

# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")

# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")
참고

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

Val 사용법#

FastSAM은 단일 객체 클래스에 대한 검출 및 세그멘테이션만 지원합니다. 즉, 모든 객체를 동일한 클래스로 인식하고 분할합니다. 따라서 데이터셋을 준비할 때 모든 객체 카테고리 ID를 0으로 변환해야 합니다.

다음과 같이 데이터셋에서 모델을 검증할 수 있습니다:

예시
from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Validate the model
results = model.val(data="coco8-seg.yaml")

Track 사용법#

이미지에서 객체 추적을 수행하려면 아래와 같이 track 메서드를 사용합니다:

예시
from ultralytics import FastSAM

# Create a FastSAM model
model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt

# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)

FastSAM 공식 사용법#

FastSAM은 CASIA-LMC-Lab/FastSAM 저장소에서도 직접 사용할 수 있습니다. 다음은 FastSAM을 사용하는 데 취할 수 있는 일반적인 단계에 대한 간략한 개요입니다:

설치#

  1. FastSAM 리포지토리를 클론합니다:

    git clone https://github.com/CASIA-LMC-Lab/FastSAM.git
  2. Python 3.9를 사용하는 Conda 환경을 생성하고 활성화합니다:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. 클론한 리포지토리로 이동하여 필요한 패키지를 설치합니다:

    cd FastSAM
    pip install -r requirements.txt
  4. CLIP 모델을 설치합니다:

    pip install git+https://github.com/ultralytics/CLIP.git

사용 예제#

  1. 모델 체크포인트를 다운로드합니다.

  2. FastSAM을 추론에 사용합니다. 예시 명령은 다음과 같습니다:

    • 이미지의 모든 항목을 분할합니다:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg
    • 텍스트 프롬프트를 사용하여 특정 객체를 분할합니다:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog"
    • 바운딩 박스 내의 객체를 분할합니다(xywh 형식으로 박스 좌표를 입력합니다):

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]"
    • 특정 지점 주변의 객체를 분할합니다:

      python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"

또한 CASIA-LMC-Lab Colab demo를 통해 FastSAM을 체험해 볼 수 있습니다.

인용 및 감사의 글#

실시간 인스턴스 세그멘테이션 분야에 크게 기여한 FastSAM 저자들에게 감사의 뜻을 전합니다:

인용문
@misc{zhao2023fast,
      title={Fast Segment Anything},
      author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
      year={2023},
      eprint={2306.12156},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

FastSAM 원본 논문은 arXiv에서 확인할 수 있습니다. 저자들은 연구 결과를 공개했으며, 코드베이스는 GitHub에서 이용할 수 있습니다. 해당 분야의 발전에 기여하고 연구 결과를 더 넓은 커뮤니티에 공개해 주신 저자들의 노력에 감사드립니다.

FAQ#

  • Fast Segment Anything Model의 약자인 FastSAM은 객체 세그멘테이션 작업에서 높은 성능을 유지하면서 연산 요구 사항을 줄이도록 설계된 실시간 합성곱 신경망(CNN) 기반 솔루션입니다. 더 무거운 Transformer 기반 아키텍처를 사용하는 세그먼트 애니싱 모델 (SAM)과 달리, FastSAM은 효율적인 인스턴스 세그멘테이션을 위해 Ultralytics YOLOv8-seg를 사용하며, 모든 인스턴스 세그멘테이션 후 프롬프트 기반 선택을 수행하는 2단계 방식으로 작동합니다.

  • FastSAM은 세그멘테이션 작업을 YOLOv8-seg를 사용한 모든 인스턴스 세그멘테이션 단계와 프롬프트 기반 선택 단계로 분리하여 실시간 세그멘테이션을 구현합니다. CNN의 높은 연산 효율을 활용함으로써 FastSAM은 경쟁력 있는 성능을 유지하면서 연산 및 리소스 요구 사항을 크게 줄입니다. 이 2단계 접근 방식 덕분에 FastSAM은 빠른 결과가 필요한 애플리케이션에 적합한 신속하고 효율적인 세그멘테이션을 제공할 수 있습니다.

  • FastSAM은 실시간 세그멘테이션 성능이 필요한 다양한 컴퓨터 비전 작업에 실용적입니다. 애플리케이션에는 다음이 포함됩니다:

    • 품질 관리 및 보증을 위한 산업 자동화
    • 보안 및 감시를 위한 실시간 비디오 분석
    • 객체 검출 및 세그멘테이션을 위한 자율 주행 차량
    • 정밀하고 신속한 세그멘테이션 작업을 위한 의료 영상

    다양한 사용자 상호작용 프롬프트를 처리할 수 있으므로 FastSAM은 여러 시나리오에 맞게 조정할 수 있고 유연하게 활용할 수 있습니다.

  • Python에서 추론에 FastSAM을 사용하려면 아래 예제를 따를 수 있습니다:

    from ultralytics import FastSAM
    
    # Define an inference source
    source = "path/to/bus.jpg"
    
    # Create a FastSAM model
    model = FastSAM("FastSAM-s.pt")  # or FastSAM-x.pt
    
    # Run inference on an image
    everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
    
    # Run inference with bboxes prompt
    results = model(source, bboxes=[439, 437, 524, 709])
    
    # Run inference with points prompt
    results = model(source, points=[[200, 200]], labels=[1])
    
    # Run inference with texts prompt
    results = model(source, texts="a photo of a dog")
    
    # Run inference with bboxes and points and texts prompt at the same time
    results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")

    추론 방법에 대한 자세한 내용은 문서의 Predict 사용법 섹션을 참조하세요.

  • FastSAM은 세그멘테이션 작업을 안내하기 위해 여러 프롬프트 유형을 지원합니다:

    • 전체 프롬프트: 표시된 모든 객체에 대한 세그멘테이션을 생성합니다.
    • 바운딩 박스 (BBox) 프롬프트: 지정된 바운딩 박스 내의 객체를 분할합니다.
    • 텍스트 프롬프트: 설명과 일치하는 객체를 분할하기 위해 설명형 텍스트를 사용합니다.
    • 포인트 프롬프트: 사용자가 지정한 특정 지점 주변의 객체를 분할합니다.

    이러한 유연성 덕분에 FastSAM은 광범위한 사용자 상호작용 시나리오에 적응할 수 있어 다양한 애플리케이션에서 활용도가 높아집니다. 이러한 프롬프트 사용에 대한 자세한 내용은 주요 기능 섹션을 참조하세요.

댓글