Fast Segment Anything Model (FastSAM)
Fast Segment Anything Model(FastSAM)은 Segment Anything 작업을 위한 새로운 실시간 CNN 기반 솔루션입니다. 이 작업은 다양한 사용자 상호 작용 프롬프트를 기반으로 이미지 내의 모든 객체를 분할하도록 설계되었습니다. FastSAM은 경쟁력 있는 성능을 유지하면서 계산 요구 사항을 크게 줄여 다양한 비전 작업에 실용적인 선택이 될 수 있습니다.
참고: Ultralytics와 함께 FastSAM을(를) 사용한 객체 추적
모델 아키텍처
개요
FastSAM은 상당한 컴퓨팅 리소스 요구 사항이 있는 무거운 Transformer 모델인 Segment Anything Model (SAM)의 제한 사항을 해결하도록 설계되었습니다. FastSAM은 모든 분할 작업 단계를 두 개의 순차적 단계, 즉 전체 인스턴스 분할 및 프롬프트 기반 선택으로 분리합니다. 첫 번째 단계에서는 YOLOv8-seg를 사용하여 이미지의 모든 인스턴스에 대한 분할 마스크를 생성합니다. 두 번째 단계에서는 프롬프트에 해당하는 관심 영역을 출력합니다.
주요 기능
-
실시간 솔루션: FastSAM은 CNN의 계산 효율성을 활용하여 모든 것을 분할하는 작업에 대한 실시간 솔루션을 제공하므로 빠른 결과를 요구하는 산업 응용 분야에 유용합니다.
-
효율성 및 성능: FastSAM은 성능 품질을 저하시키지 않으면서 계산 및 리소스 요구 사항을 크게 줄입니다. SAM과 비슷한 성능을 달성하지만 계산 리소스가 크게 줄어들어 실시간 애플리케이션이 가능합니다.
-
프롬프트 기반 분할: FastSAM은 다양한 사용자 상호 작용 프롬프트의 안내에 따라 이미지 내의 모든 객체를 분할할 수 있으므로 다양한 시나리오에서 유연성과 적응성을 제공합니다.
-
YOLOv8-seg 기반: FastSAM은 인스턴스 분할 브랜치를 갖춘 객체 감지기인 YOLOv8-seg를 기반으로 합니다. 이를 통해 이미지 내의 모든 인스턴스에 대한 분할 마스크를 효과적으로 생성할 수 있습니다.
-
벤치마크에서 경쟁력 있는 결과: MS COCO의 객체 제안 작업에서 FastSAM은 단일 NVIDIA RTX 3090에서 SAM보다 훨씬 빠른 속도로 높은 점수를 달성하여 효율성과 성능을 입증합니다.
-
실용적인 응용 분야: 제안된 접근 방식은 현재 방법보다 수십 또는 수백 배 더 빠른 매우 빠른 속도로 많은 수의 비전 작업에 대한 새롭고 실용적인 솔루션을 제공합니다.
-
모델 압축 가능성: FastSAM 은 구조에 인위적인 우선순위를 도입하여 계산 노력을 크게 줄일 수 있는 경로의 타당성을 입증하여 일반적인 비전 작업을 위한 대규모 모델 아키텍처에 대한 새로운 가능성을 열어줍니다.
사용 가능한 모델, 지원되는 작업 및 작동 모드
이 표는 사용 가능한 모델과 특정 사전 훈련된 가중치, 지원하는 작업, 그리고 추론, 유효성 검사, 훈련 및 내보내기와 같은 다양한 작동 모드와의 호환성을 나타냅니다. 지원되는 모드는 ✅ 이모지로, 지원되지 않는 모드는 ❌ 이모지로 표시됩니다.
모델 유형 | 사전 훈련된 가중치 | 지원되는 작업 | 추론 | 검증 | 훈련 | 내보내기 |
---|---|---|---|---|---|---|
FastSAM-s | FastSAM-s.pt | 인스턴스 분할 | ✅ | ❌ | ❌ | ✅ |
FastSAM-x | FastSAM-x.pt | 인스턴스 분할 | ✅ | ❌ | ❌ | ✅ |
FastSAM과 YOLO 비교
여기서는 가장 작은 SAM2-t 변형을 포함한 Meta의 SAM2 모델을 Ultralytics의 가장 작은 분할 모델인 YOLO11n-seg와 비교합니다.
모델 | 크기 (MB) |
파라미터 (M) |
속도 (CPU) (ms/im) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
YOLOv8 백본을 사용하는 FastSAM-s | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (11.7배 더 작음) | 3.4 (11.4배 적음) | 24.5 (1061배 빠름) |
Ultralytics YOLO11n-seg | 5.9 (13.2배 작음) | 2.9 (13.4배 적음) | 30.1 (864배 빠름) |
이 비교는 SAM 변형과 YOLO 분할 모델 간의 모델 크기 및 속도에서 상당한 차이를 보여줍니다. SAM은 고유한 자동 분할 기능을 제공하지만, YOLO 모델, 특히 YOLOv8n-seg 및 YOLO11n-seg는 훨씬 작고 빠르며 계산 효율성이 뛰어납니다.
24GB RAM을 갖춘 2025 Apple M4 Pro에서 실행되는 테스트 (사용) torch==2.6.0
및 ultralytics==8.3.90
를 사용했습니다. 이 테스트를 재현하려면:
예시
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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
사용 예시
FastSAM 모델은 Python 애플리케이션에 쉽게 통합할 수 있습니다. Ultralytics는 사용자 친화적인 Python API 및 CLI 명령을 제공하여 개발을 간소화합니다.
예측 사용법
수행하려면 객체 감지 이미지에서 다음을 사용합니다. 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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640
이 스니펫은 사전 훈련된 모델을 로드하고 이미지에 대한 예측을 실행하는 단순성을 보여줍니다.
FastSAMPredictor 예제
이러한 방식으로 이미지에서 추론을 실행하고 모든 세그먼트를 얻을 수 있습니다. results
프롬프트 추론을 여러 번 실행하지 않고 한 번만 실행하여 여러 번 추론하라는 메시지를 표시합니다.
from ultralytics.models.fastsam import FastSAMPredictor
# Create FastSAMPredictor
overrides = dict(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
위의 예시에서 결과 예측된 마스크와 소스 이미지에 쉽게 접근할 수 있는 객체입니다.
Val 사용법
데이터 세트에 대한 모델 유효성 검사는 다음과 같이 수행할 수 있습니다:
예시
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")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640
FastSAM은 단일 클래스 객체의 감지 및 분할만 지원합니다. 즉, 모든 객체를 동일한 클래스로 인식하고 분할합니다. 따라서 데이터 세트를 준비할 때 모든 객체 카테고리 ID를 0으로 변환해야 합니다.
추적 사용법
이미지에서 객체 추적을 수행하려면 다음을 사용하십시오. 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)
yolo segment track model=FastSAM-s.pt source="path/to/video.mp4" imgsz=640
FastSAM 공식 사용법
FastSAM은 https://github.com/CASIA-IVA-Lab/FastSAM 저장소에서 직접 사용할 수도 있습니다. 다음은 FastSAM을 사용하기 위해 수행할 수 있는 일반적인 단계에 대한 간략한 개요입니다.
설치
-
FastSAM 저장소를 복제합니다:
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
-
Python 3.9를 사용하여 Conda 환경을 만들고 활성화합니다.
conda create -n FastSAM python=3.9 conda activate FastSAM
-
복제된 저장소로 이동하여 필요한 패키지를 설치합니다:
cd FastSAM pip install -r requirements.txt
-
CLIP 모델 설치:
pip install git+https://github.com/ultralytics/CLIP.git
사용 예시
-
모델 체크포인트를 다운로드합니다.
-
추론에 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"
-
bounding box 내의 객체를 분할합니다(xywh 형식으로 box 좌표 제공):
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-IVA-Lab Colab 데모를 통해 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
FastSAM은 무엇이며 SAM과는 어떻게 다릅니까?
Fast Segment Anything Model의 약자인 FastSAM은 객체 분할 작업에서 높은 성능을 유지하면서 계산 요구 사항을 줄이도록 설계된 실시간 컨볼루션 신경망 (CNN) 기반 솔루션입니다. 더 무거운 Transformer 기반 아키텍처를 사용하는 Segment Anything Model (SAM)과 달리 FastSAM은 전체 인스턴스 분할과 프롬프트 기반 선택의 두 단계에서 효율적인 인스턴스 분할을 위해 Ultralytics YOLOv8-seg를 활용합니다.
FastSAM은 어떻게 실시간 분할 성능을 달성하나요?
FastSAM은 YOLOv8-seg를 사용한 전체 인스턴스 분할과 프롬프트 기반 선택 단계로 분할 작업을 분리하여 실시간 분할을 달성합니다. CNN의 계산 효율성을 활용함으로써 FastSAM은 경쟁력 있는 성능을 유지하면서 계산 및 리소스 요구 사항을 크게 줄입니다. 이 2단계 접근 방식을 통해 FastSAM은 빠른 결과가 필요한 애플리케이션에 적합한 빠르고 효율적인 분할을 제공할 수 있습니다.
FastSAM의 실제 응용 분야는 무엇입니까?
FastSAM은 실시간 분할 성능이 필요한 다양한 컴퓨터 비전 작업에 유용합니다. 응용 분야는 다음과 같습니다.
- 품질 관리 및 보증을 위한 산업 자동화
- 보안 및 감시를 위한 실시간 비디오 분석
- 객체 감지 및 분할을 위한 자율 주행 차량
- 정확하고 빠른 분할 작업을 위한 의료 영상
다양한 사용자 상호 작용 프롬프트를 처리하는 기능 덕분에 FastSAM은 다양한 시나리오에 적응하고 유연하게 대처할 수 있습니다.
Python에서 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")
추론 방법에 대한 자세한 내용은 문서의 예측 사용법 섹션을 확인하세요.
FastSAM은 분할 작업을 위해 어떤 유형의 프롬프트를 지원합니까?
FastSAM은 분할 작업을 안내하기 위해 여러 프롬프트 유형을 지원합니다.
- 전체 프롬프트: 보이는 모든 객체에 대한 분할을 생성합니다.
- 바운딩 박스 (BBox) 프롬프트: 지정된 바운딩 박스 내의 객체를 분할합니다.
- 텍스트 프롬프트: 설명과 일치하는 객체를 분할하기 위해 설명적인 텍스트를 사용합니다.
- 포인트 프롬프트: 특정 사용자 정의 점 근처의 객체를 분할합니다.
이러한 유연성 덕분에 FastSAM은 광범위한 사용자 상호 작용 시나리오에 적응하여 다양한 애플리케이션에서 유용성을 높일 수 있습니다. 이러한 프롬프트 사용에 대한 자세한 내용은 주요 기능 섹션을 참조하십시오.