Mobile Segment Anything (MobileSAM)
MobileSAM은 모바일 및 에지 장치용으로 특별히 제작된 작고 효율적인 이미지 분할 모델입니다. Meta의 Segment Anything Model(SAM)의 강력한 기능을 컴퓨팅이 제한된 환경에 제공하도록 설계된 MobileSAM은 원본 SAM 파이프라인과의 호환성을 유지하면서 거의 즉각적인 분할을 제공합니다. 실시간 애플리케이션을 개발하든 경량 배포를 개발하든 MobileSAM은 이전 모델에 비해 크기와 속도 요구 사항이 훨씬 적으면서도 인상적인 분할 결과를 제공합니다.
참고: Ultralytics를 사용하여 MobileSAM으로 추론을 실행하는 방법 | 단계별 가이드 🎉
MobileSAM은 Grounding-SAM, AnyLabeling 및 Segment Anything in 3D를 포함한 다양한 프로젝트에 적용되었습니다.
MobileSAM은 10만 개의 이미지 데이터 세트(원본 이미지의 1%)를 사용하여 단일 GPU에서 하루도 안 되어 훈련되었습니다. 훈련 코드는 향후 릴리스될 예정입니다.
사용 가능한 모델, 지원되는 작업 및 작동 모드
아래 표는 사용 가능한 MobileSAM 모델, 사전 훈련된 가중치, 지원되는 작업, 그리고 추론, 유효성 검사, 훈련 및 내보내기와 같은 다양한 작동 모드와의 호환성을 간략하게 설명합니다. 지원되는 모드는 ✅로, 지원되지 않는 모드는 ❌로 표시됩니다.
모델 유형 | 사전 훈련된 가중치 | 지원되는 작업 | 추론 | 검증 | 훈련 | 내보내기 |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | 인스턴스 분할 | ✅ | ❌ | ❌ | ❌ |
MobileSAM과 YOLO 비교
다음 비교는 Meta의 SAM 변형, MobileSAM 및 YOLO11n-seg를 포함한 Ultralytics의 가장 작은 분할 모델 간의 차이점을 강조합니다.
모델 | 크기 (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)
SAM에서 MobileSAM으로 조정
MobileSAM은 전처리, 후처리 및 모든 인터페이스를 포함하여 원본 SAM과 동일한 파이프라인을 유지합니다. 즉, 워크플로를 최소한으로 변경하여 SAM에서 MobileSAM으로 전환할 수 있습니다.
주요 차이점은 이미지 인코더입니다. MobileSAM은 원래 ViT-H 인코더(632M 파라미터)를 훨씬 더 작은 Tiny-ViT 인코더(5M 파라미터)로 대체합니다. 단일 GPU에서 MobileSAM은 약 12ms 만에 이미지를 처리합니다(인코더의 경우 8ms, 마스크 디코더의 경우 4ms).
ViT 기반 이미지 인코더 비교
이미지 인코더 | Original SAM | MobileSAM |
---|---|---|
파라미터 | 611M | 5M |
속도 | 452ms | 8ms |
프롬프트 기반 마스크 디코더
마스크 디코더 | Original SAM | MobileSAM |
---|---|---|
파라미터 | 3.876M | 3.876M |
속도 | 4ms | 4ms |
전체 파이프라인 비교
전체 파이프라인 (Enc+Dec) | Original SAM | MobileSAM |
---|---|---|
파라미터 | 615M | 9.66M |
속도 | 456ms | 12ms |
아래는 점과 상자 프롬프트를 모두 사용하여 MobileSAM과 기존 SAM의 성능을 나타낸 것입니다.
MobileSAM FastSAM 약 7배 더 작고 5배 더 빠릅니다. 자세한 내용은 MobileSAM 프로젝트 페이지를 참조하세요.
Ultralytics에서 MobileSAM 테스트
원본 SAM과 마찬가지로 Ultralytics는 포인트 및 박스 프롬프트를 모두 지원하는 MobileSAM 테스트를 위한 간단한 인터페이스를 제공합니다.
모델 다운로드
Ultralytics assets에서 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="yolo11x.pt", sam_model="mobile_sam.pt")
인수 | 유형 | 기본값 | 설명 |
---|---|---|---|
data |
str |
필수 | 어노테이션 또는 세분화를 위한 대상 이미지가 포함된 디렉토리 경로입니다. |
det_model |
str |
'yolo11x.pt' |
초기 객체 탐지를 위한 YOLO 탐지 모델 경로입니다. |
sam_model |
str |
'sam_b.pt' |
분할을 위한 SAM 모델 경로 (SAM, SAM2 변형 및 mobile_sam 모델 지원). |
device |
str |
'' |
계산 장치(예: 'cuda:0', 'cpu' 또는 자동 장치 감지를 위한 '') |
conf |
float |
0.25 |
미약한 탐지를 필터링하기 위한 YOLO 탐지 신뢰도 임계값입니다. |
iou |
float |
0.45 |
겹치는 상자를 필터링하기 위한 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은 모바일 성능에 최적화된 추론 모드를 지원합니다.
MobileSAM은 어떻게 훈련되었으며, 훈련 코드는 사용 가능한가요?
MobileSAM은 단일 GPU에서 10만 장의 이미지 데이터 세트(원본 이미지의 1%)로 하루 안에 학습되었습니다. 학습 코드는 추후에 공개될 예정이지만, 현재 MobileSAM GitHub 저장소에서 사전 학습된 가중치와 구현 세부 정보를 확인할 수 있습니다.
MobileSAM의 주요 사용 사례는 무엇입니까?
MobileSAM은 모바일 및 에지 환경에서 빠르고 효율적인 이미지 분할을 위해 설계되었습니다. 주요 사용 사례는 다음과 같습니다.
- 모바일 앱을 위한 실시간 객체 감지 및 분할
- 제한된 컴퓨팅 성능을 가진 장치에서 낮은 지연 시간의 이미지 처리
- 증강 현실(AR), 분석 등을 위한 AI 기반 모바일 애플리케이션 통합
사용 사례 및 성능에 대한 자세한 내용은 SAM에서 MobileSAM으로 조정 및 MobileSAM 애플리케이션에 대한 Ultralytics 블로그를 참조하십시오.