
모바일 세그먼트 애니씽(MobileSAM)#
MobileSAM은 모바일 및 엣지 디바이스를 위해 특별히 제작된 소형의 효율적인 이미지 세그멘테이션 모델입니다. Meta의 세그먼트 애니씽 모델(SAM)의 성능을 컴퓨팅 리소스가 제한된 환경에서도 활용할 수 있도록 설계된 MobileSAM은 오리지널 SAM 파이프라인과의 호환성을 유지하면서 거의 즉각적인 세그멘테이션을 제공합니다. 실시간 애플리케이션을 개발하거나 경량 배포를 진행하는 경우에도 MobileSAM은 이전 모델보다 훨씬 적은 크기와 속도 요구 사항으로 뛰어난 세그멘테이션 결과를 제공합니다.
시청: Ultralytics에서 MobileSAM으로 추론을 실행하는 방법 | 단계별 가이드 🎉
MobileSAM은 Grounding-SAM, AnyLabeling, Segment Anything in 3D 등 다양한 프로젝트에 채택되었습니다.
MobileSAM은 원본 이미지의 1%에 해당하는 10만 개 이미지 데이터셋을 사용해 단일 GPU에서 하루도 채 걸리지 않아 학습되었습니다.
사용 가능한 모델, 지원 작업 및 작동 모드#
아래 표에는 사용 가능한 MobileSAM 모델과 사전 학습 가중치, 지원 작업, 추론, 검증, 학습, 내보내기와 같은 다양한 작동 모드와의 호환성이 나와 있습니다. 지원되는 모드는 ✅로, 지원되지 않는 모드는 ❌로 표시됩니다.
| 모델 유형 | 사전 학습 가중치 | 지원 작업 | 학습 | 검증 | 추론 | 내보내기 |
|---|---|---|---|---|---|---|
| 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 백본을 사용하는 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
# 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)
# FastSAM-s 프로파일링
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# YOLO 모델 프로파일링(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 없는 헤드; YOLOv8/YOLO11에서는 작동하지 않음
model = YOLO(onnx_path)
model(ASSETS)SAM에서 MobileSAM으로 전환#
MobileSAM은 전처리, 후처리, 모든 인터페이스를 포함해 원본 SAM과 동일한 파이프라인을 유지합니다. 따라서 워크플로를 최소한으로 변경하면서 SAM에서 MobileSAM으로 전환할 수 있습니다.
주요 차이점은 이미지 인코더입니다. MobileSAM은 원본 ViT-H 인코더(6억 3,700만 개 파라미터)를 훨씬 작은 Tiny-ViT 인코더(500만 개 파라미터)로 대체합니다. 단일 GPU에서 MobileSAM은 이미지를 약 12ms(인코더 8ms, 마스크 디코더 4ms) 만에 처리합니다.
ViT 기반 이미지 인코더 비교#
| 이미지 인코더 | 원본 SAM | MobileSAM |
|---|---|---|
| 파라미터 | 637M | 500만 개 |
| 속도 | 452ms | 8ms |
프롬프트 기반 마스크 디코더#
| 마스크 디코더 | 원본 SAM | MobileSAM |
|---|---|---|
| 파라미터 | 387만 6천 개 | 387만 6천 개 |
| 속도 | 4ms | 4ms |
전체 파이프라인 비교#
| 전체 파이프라인(인코더+디코더) | 원본 SAM | MobileSAM |
|---|---|---|
| 파라미터 | 641M | 966만 개 |
| 속도 | 456ms | 12ms |
아래에서는 포인트 및 박스 프롬프트를 사용해 MobileSAM과 원본 SAM의 성능을 보여 줍니다.


MobileSAM은 FastSAM보다 약 7배 작고 5배 빠릅니다. 자세한 내용은 MobileSAM 프로젝트 페이지를 참조하세요.
Ultralytics에서 MobileSAM 테스트하기#
원본 SAM과 마찬가지로 Ultralytics는 MobileSAM을 테스트하기 위한 간단한 인터페이스를 제공하며, 포인트 및 박스 프롬프트를 모두 지원합니다.
모델 다운로드#
Ultralytics assets에서 MobileSAM 사전 학습 가중치를 다운로드하세요.
포인트 프롬프트#
from ultralytics import SAM
# 모델을 로드합니다
model = SAM("mobile_sam.pt")
# 단일 포인트 프롬프트를 기반으로 세그먼트를 예측합니다
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
# 여러 포인트 프롬프트를 기반으로 여러 세그먼트를 예측합니다
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
# 객체별 여러 포인트 프롬프트를 기반으로 세그먼트를 예측합니다
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# 긍정 및 부정 프롬프트를 모두 사용해 세그먼트를 예측합니다.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])박스 프롬프트#
from ultralytics import SAM
# 모델을 로드합니다
model = SAM("mobile_sam.pt")
# 단일 박스 프롬프트를 기반으로 세그먼트를 예측합니다
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
# 여러 박스 프롬프트를 기반으로 여러 세그먼트를 예측합니다
model.predict("ultralytics/assets/zidane.jpg", bboxes=[[439, 437, 524, 709], [114, 196, 313, 708]])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")| 인수 | 유형 | 기본값 | 설명 |
|---|---|---|---|
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 | 겹치는 박스를 필터링하기 위한 비최대 억제의 IoU 임계값입니다. |
imgsz | int | 640 | 이미지 크기 조정에 사용할 입력 크기입니다(필요한 경우 32의 배수로 올림). |
max_det | int | 300 | 메모리 효율성을 위한 이미지당 최대 탐지 수입니다. |
classes | list[int] | None | 탐지할 클래스 인덱스 목록입니다(예: 사람 및 자전거의 경우 [0, 1]). |
output_dir | str | None | 어노테이션 저장 디렉터리입니다(기본값: 동일한 상위 디렉터리의 <data>_auto_annotate_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 논문을 읽어 보세요.
자주 묻는 질문#
MobileSAM은 모바일 및 엣지 애플리케이션에 최적화된 경량 고속 이미지 세그멘테이션 모델입니다. 원본 SAM과 동일한 파이프라인을 유지하면서 대형 ViT-H 인코더(6억 3,700만 개 파라미터)를 소형 Tiny-ViT 인코더(500만 개 파라미터)로 대체합니다. 따라서 전체 MobileSAM 파이프라인은 원본 SAM보다 약 66배 작고(파라미터 966만 개 대 6억 4,100만 개) 약 38배 빠르며, 이미지당 약 12ms에 처리하는 반면 SAM은 456ms가 걸립니다. MobileSAM GitHub 저장소에서 MobileSAM 구현에 대해 자세히 알아보세요.
Ultralytics에서 MobileSAM을 간편하게 테스트할 수 있습니다. 포인트 및 박스 프롬프트를 사용해 세그먼트를 예측할 수 있습니다. 예를 들어 포인트 프롬프트를 사용하는 방법은 다음과 같습니다:
from ultralytics import SAM # 모델을 로드합니다 model = SAM("mobile_sam.pt") # 포인트 프롬프트를 기반으로 세그먼트를 예측합니다 model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])자세한 내용은 Ultralytics에서 MobileSAM 테스트하기 섹션을 참조하세요.
MobileSAM은 경량 설계와 빠른 추론 속도를 바탕으로 모바일 및 엣지 애플리케이션에 적합합니다. 원본 SAM과 비교하면 MobileSAM은 파라미터 수가 약 66배 적고 약 38배 빠르게 실행되므로, 계산 리소스가 제한된 장치에서 실시간 세그멘테이션을 수행하는 데 적합합니다. 효율적인 성능 덕분에 모바일 장치는 큰 지연 없이 실시간 이미지 세그멘테이션을 수행할 수 있습니다. 또한 모바일 성능에 최적화된 추론 모드를 지원합니다.
MobileSAM은 10만 장의 이미지 데이터셋(원본 SA-1B 이미지의 1%)을 사용해 단일 GPU에서 하루도 안 되는 시간 동안 학습되었으며, SAM의 ViT-H 이미지 인코더를 Tiny-ViT 인코더로 증류했습니다. 사전 학습 가중치와 구현 세부 정보는 MobileSAM GitHub 저장소에서 확인할 수 있습니다.
MobileSAM은 모바일 및 엣지 환경에서 빠르고 효율적인 이미지 세그멘테이션을 수행하도록 설계되었습니다. 주요 사용 사례는 다음과 같습니다:
- 모바일 앱을 위한 실시간 객체 탐지 및 세그멘테이션
- 컴퓨팅 성능이 제한된 장치에서의 저지연 이미지 처리
- 증강 현실(AR), 분석 등을 위한 AI 기반 모바일 애플리케이션 통합
사용 사례와 성능에 대한 자세한 내용은 SAM에서 MobileSAM으로 전환 및 Segment Anything 애플리케이션에 관한 Ultralytics 블로그를 참조하세요.