
Mobile Segment Anything (MobileSAM)
MobileSAM은 모바일 및 엣지 장치를 위해 특별히 제작된 작고 효율적인 이미지 세그멘테이션 모델입니다. Meta의 Segment Anything Model(SAM)의 성능을 컴퓨팅 환경이 제한적인 곳으로 가져오기 위해 설계된 MobileSAM은 기존 SAM 파이프라인과의 호환성을 유지하면서 거의 즉각적인 세그멘테이션을 제공합니다. 실시간 애플리케이션을 개발하든 경량 배포를 준비하든, MobileSAM은 이전 모델에 비해 훨씬 작은 크기와 빠른 속도로 인상적인 세그멘테이션 결과를 제공합니다.
Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉
MobileSAM은 Grounding-SAM, AnyLabeling, Segment Anything in 3D을 포함한 다양한 프로젝트에 채택되었습니다.
MobileSAM은 단일 GPU에서 100k 이미지 데이터셋(원본 이미지의 1%)을 사용하여 하루 이내에 학습되었습니다. 학습 코드는 향후 공개될 예정입니다.
사용 가능한 모델, 지원되는 작업 및 작동 모드
아래 표는 사용 가능한 MobileSAM 모델, 사전 학습된 가중치, 지원되는 작업, 그리고 Inference, Validation, Training, Export와 같은 다양한 운영 모드와의 호환성을 요약합니다. 지원되는 모드는 ✅로, 지원되지 않는 모드는 ❌로 표시됩니다.
| 모델 유형 | 사전 학습된 가중치 | 지원 작업 | 추론 | 검증 | 학습 | 내보내기 (Export) |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | 인스턴스 세그멘테이션 | ✅ | ❌ | ❌ | ❌ |
MobileSAM과 YOLO 비교
다음 비교는 Meta의 SAM 변형 모델, MobileSAM, 그리고 YOLO26n-seg를 포함한 Ultralytics 세그멘테이션 모델 간의 차이점을 보여줍니다:
| 모델 | 크기 (MB) | 매개변수 (M) | 속도 (CPU) (ms/im) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| YOLOv8 backbone 기반의 FastSAM-s | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (11.0배 더 작음) | 3.4 (11.4배 더 가벼움) | 24.8 (945배 더 빠름) |
| Ultralytics YOLO11n-seg | 6.2 (12.6배 더 작음) | 2.9 (13.4배 더 가벼움) | 24.3 (964배 더 빠름) |
| Ultralytics YOLO26n-seg | 6.7 (11.7배 더 작음) | 2.7 (14.4배 더 가벼움) | 25.2 (930배 더 빠름) |
이 비교는 SAM 변형 모델과 YOLO 세그멘테이션 모델 간의 모델 크기 및 속도 차이를 명확히 보여줍니다. SAM 모델은 독보적인 자동 세그멘테이션 기능을 제공하지만, YOLO 모델(특히 YOLOv8n-seg, YOLO11n-seg 및 YOLO26n-seg)은 크기가 훨씬 작고 속도가 빠르며 계산 효율성이 뛰어납니다.
SAM 속도는 PyTorch로, YOLO 속도는 ONNX Runtime으로 측정되었습니다. 테스트는 16GB RAM이 탑재된 2025 Apple M4 Air에서 torch==2.10.0, ultralytics==8.4.31, onnxruntime==1.24.4 환경으로 실행되었습니다. 결과를 재현하려면:
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)
model = YOLO(onnx_path)
model(ASSETS)SAM에서 MobileSAM으로 전환
MobileSAM은 전처리, 후처리 및 모든 인터페이스를 포함하여 기존 SAM과 동일한 파이프라인을 유지합니다. 즉, 워크플로를 최소한으로 수정하여 SAM에서 MobileSAM으로 전환할 수 있습니다.
가장 큰 차이점은 이미지 인코더입니다. MobileSAM은 기존의 ViT-H 인코더(632M 파라미터)를 훨씬 작은 Tiny-ViT 인코더(5M 파라미터)로 교체했습니다. 단일 GPU에서 MobileSAM은 약 12ms(인코더 8ms, 마스크 디코더 4ms) 만에 이미지를 처리합니다.
ViT 기반 이미지 인코더 비교
| 이미지 인코더 | 원본 SAM | MobileSAM |
|---|---|---|
| 파라미터 | 611M | 5M |
| 속도 | 452ms | 8ms |
프롬프트 기반 마스크 디코더
| 마스크 디코더 | 원본 SAM | MobileSAM |
|---|---|---|
| 파라미터 | 3.876M | 3.876M |
| 속도 | 4ms | 4ms |
전체 파이프라인 비교
| 전체 파이프라인(인코더+디코더) | 원본 SAM | MobileSAM |
|---|---|---|
| 파라미터 | 615M | 9.66M |
| 속도 | 456ms | 12ms |
MobileSAM과 원본 SAM의 성능은 포인트 및 박스 프롬프트를 사용하여 아래에 설명되어 있습니다.


MobileSAM은 FastSAM보다 약 7배 작고 5배 빠릅니다. 자세한 내용은 MobileSAM 프로젝트 페이지를 참조하십시오.
Ultralytics에서 MobileSAM 테스트하기
기존 SAM과 마찬가지로, Ultralytics는 포인트 및 박스 프롬프트를 모두 지원하는 MobileSAM 테스트를 위한 간단한 인터페이스를 제공합니다.
모델 다운로드
Ultralytics 자산에서 MobileSAM 사전 학습 가중치를 다운로드하십시오.
포인트 프롬프트
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])박스 프롬프트
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a single point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# Predict multiple segments based on multiple points prompt
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# Predict a segment based on multiple points prompt per object
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Predict a segment using both positive and negative prompts.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])MobileSAM과 SAM은 동일한 API를 공유합니다. 더 자세한 사용 방법은 SAM 문서를 참조하십시오.
검출 모델을 사용하여 자동으로 세그멘테이션 데이터셋 구축하기
Ultralytics 프레임워크를 사용하여 데이터셋을 자동으로 주석 처리하려면 아래와 같이 auto_annotate 함수를 사용하십시오:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")| 인수(Argument) | 유형(Type) | 기본값(Default) | 설명 |
|---|---|---|---|
data | str | 필수 | 주석 또는 세그멘테이션을 위한 대상 이미지가 포함된 디렉토리 경로. |
det_model | str | 'yolo26x.pt' | 초기 객체 감지를 위한 YOLO 감지 모델 경로. |
sam_model | str | 'sam_b.pt' | 세그멘테이션을 위한 SAM 모델 경로(SAM, SAM2 변형 및 MobileSAM 모델 지원). |
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 | 주석 저장 디렉토리(데이터 경로 기준 기본값은 './labels'). |
인용 및 감사의 글
연구나 개발에 MobileSAM이 도움이 되었다면 다음 논문을 인용해주시기 바랍니다:
@article{mobile_sam,
title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung Ho and Lee, Seungkyu and Hong, Choong Seon},
journal={arXiv preprint arXiv:2306.14289},
year={2023}
}arXiv의 MobileSAM 논문 전문을 읽어보십시오.
FAQ
MobileSAM은 무엇이며 기존 SAM 모델과 어떻게 다른가요?
MobileSAM은 모바일 및 엣지 애플리케이션에 최적화된 경량화된 고속 이미지 세그멘테이션 모델입니다. 원본 SAM과 동일한 파이프라인을 유지하지만, 대형 ViT-H 인코더(632M 파라미터)를 소형 Tiny-ViT 인코더(5M 파라미터)로 교체했습니다. 이 결과 MobileSAM은 원본 SAM보다 약 5배 작고 7배 빠르며, 이미지당 처리 속도가 SAM의 456ms 대비 약 12ms입니다. MobileSAM GitHub 저장소에서 MobileSAM 구현에 대해 더 자세히 알아보십시오.
Ultralytics를 사용하여 MobileSAM을 어떻게 테스트할 수 있나요?
Ultralytics에서 MobileSAM을 테스트하는 것은 간단합니다. 포인트 및 박스 프롬프트를 사용하여 세그먼트를 예측할 수 있습니다. 예를 들어, 포인트 프롬프트를 사용하는 경우:
from ultralytics import SAM
# Load the model
model = SAM("mobile_sam.pt")
# Predict a segment based on a point prompt
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])자세한 내용은 Ultralytics에서 MobileSAM 테스트하기 섹션을 참조하십시오.
모바일 애플리케이션에 MobileSAM을 사용해야 하는 이유는 무엇인가요?
MobileSAM은 경량 설계와 빠른 추론 속도 덕분에 모바일 및 엣지 애플리케이션에 이상적입니다. 원본 SAM과 비교하여 MobileSAM은 약 5배 더 작고 7배 더 빨라 계산 자원이 제한된 기기에서 실시간 세그멘테이션을 수행하기에 적합합니다. 이러한 효율성 덕분에 모바일 기기에서도 큰 지연 시간 없이 실시간 이미지 세그멘테이션을 수행할 수 있습니다. 또한, MobileSAM은 모바일 성능에 최적화된 Inference 모드를 지원합니다.
MobileSAM은 어떻게 학습되었으며, 학습 코드를 사용할 수 있나요?
MobileSAM은 단일 GPU에서 100k 이미지 데이터셋(원본 이미지의 1%)을 사용하여 하루 이내에 학습되었습니다. 학습 코드는 추후 공개될 예정이지만, 현재 MobileSAM GitHub 저장소에서 사전 학습 가중치와 구현 세부 정보에 접근할 수 있습니다.
MobileSAM의 주요 사용 사례는 무엇인가요?
MobileSAM은 모바일 및 엣지 환경에서 빠르고 효율적인 이미지 세그멘테이션을 위해 설계되었습니다. 주요 사용 사례는 다음과 같습니다:
- 모바일 앱을 위한 실시간 객체 검출 및 세그멘테이션
- 컴퓨팅 자원이 제한된 기기에서의 저지연 이미지 처리
- 증강 현실(AR), 분석 등을 위한 AI 기반 모바일 애플리케이션 통합
사용 사례 및 성능에 대한 자세한 내용은 SAM에서 MobileSAM으로 전환과 MobileSAM 애플리케이션에 관한 Ultralytics 블로그를 참조하십시오.