모바일 세그먼트 애니씽 (MobileSAM)
MobileSAM 모바일 및 엣지 디바이스를 위해 특별히 제작된 작고 효율적인 이미지 세분화 모델입니다. 메타의 세그먼트 애니씽 모델(SAM)의 강력한 성능을 컴퓨팅이 제한된 환경에서도 사용할 수 있도록 설계된 MobileSAM 기존 SAM 파이프라인과의 호환성을 유지하면서 거의 즉각적인 세그먼테이션을 제공합니다. 실시간 애플리케이션을 개발하든 경량 배포를 하든, MobileSAM 이전 버전에 비해 훨씬 적은 크기와 속도로 인상적인 세분화 결과를 제공합니다.
Watch: Ultralytics | 단계별 가이드 🎉를 사용하여 추론을 실행하는 방법 MobileSAM
MobileSAM은 SAM, 애니라벨링, 3D 세그먼트 애니띵 등 다양한 프로젝트에 채택되었습니다.
MobileSAM 100,000개의 이미지 데이터 세트(원본 이미지의 1%)를 사용하여 단일 GPU 하루도 채 걸리지 않고 학습되었습니다. 훈련 코드는 향후 공개될 예정입니다.
사용 가능한 모델, 지원되는 작업 및 작동 모드
아래 표에는 사용 가능한 MobileSAM 모델, 사전 학습된 가중치, 지원되는 작업, 추론, 검증, 학습, 내보내기 등 다양한 운영 모드와의 호환성이 간략하게 나와 있습니다. 지원되는 모드는 ✅로, 지원되지 않는 모드는 ❌로 표시되어 있습니다.
모델 유형 | 사전 학습된 가중치 | 지원되는 작업 | 추론 | 유효성 검사 | 교육 | 내보내기 |
---|---|---|---|---|---|---|
MobileSAM | mobile_sam.pt | 인스턴스 세분화 | ✅ | ❌ | ❌ | ❌ |
MobileSAM YOLO 비교
다음 비교는 메타의 SAM 변형인 MobileSAM Ultralytics 가장 작은 세분화 모델인 YOLO11n-seg 간의 차이점을 강조합니다:
모델 | 크기 (MB) |
매개변수 (M) |
속도 (CPU) (ms/im) |
---|---|---|---|
메타 SAM-b | 375 | 93.7 | 49401 |
메타 SAM2-b | 162 | 80.8 | 31901 |
메타 SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
YOLOv8 백본이 포함된 FastSAM | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n | 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 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 기반 이미지 인코더 비교
이미지 인코더 | 원본 SAM | MobileSAM |
---|---|---|
매개변수 | 611M | 5M |
속도 | 452ms | 8ms |
프롬프트 가이드 마스크 디코더
마스크 디코더 | 원본 SAM | MobileSAM |
---|---|---|
매개변수 | 3.876M | 3.876M |
속도 | 4ms | 4ms |
전체 파이프라인 비교
전체 파이프라인(Enc+Dec) | 원본 SAM | MobileSAM |
---|---|---|
매개변수 | 615M | 9.66M |
속도 | 456ms | 12ms |
아래는 점과 상자 프롬프트를 사용하여 MobileSAM 기존 SAM 성능을 비교한 것입니다.
MobileSAM FastSAM 약 5배 작고 7배 빠릅니다. 자세한 내용은 MobileSAM 프로젝트 페이지를 참조하세요.
테스트 MobileSAM Ultralytics
오리지널처럼 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="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 |
겹치는 상자를 필터링하는 비 최대 억제에 대한 IoU 임계값입니다. |
imgsz |
int |
640 |
이미지 크기 조정을 위한 입력 크기(32의 배수여야 함). |
max_det |
int |
300 |
메모리 효율성을 위해 이미지당 최대 감지 횟수를 제한합니다. |
classes |
list[int] |
None |
감지할 클래스 인덱스 목록(예, [0, 1] 사람 및 자전거용). |
output_dir |
str |
None |
주석을 저장할 디렉터리(기본값은 데이터 경로를 기준으로 './레이블'입니다). |
인용 및 감사
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}
}
MobileSAM 논문 전문을 arXiv에서 읽어보세요.
자주 묻는 질문
MobileSAM 무엇이며 기존 SAM 모델과 어떻게 다른가요?
MobileSAM 모바일 및 엣지 애플리케이션에 최적화된 가볍고 빠른 이미지 분할 모델입니다. 이 모델은 기존 SAM 동일한 파이프라인을 유지하지만 대형 ViT-H 인코더(632M 파라미터)를 소형 Tiny-ViT 인코더(5M 파라미터)로 대체합니다. 그 결과 MobileSAM 기존 SAM 약 5배 작고 7배 빨라졌으며, 이미지당 약 12ms로 작동하는 반면 SAM 456ms로 작동합니다. MobileSAM 구현에 대한 자세한 내용은 MobileSAM GitHub 리포지토리에서 확인하세요.
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 100,000개의 이미지 데이터 세트(원본 이미지의 1%)로 하루 만에 훈련되었습니다. 훈련 코드는 향후 공개될 예정이지만, 현재 MobileSAM GitHub 리포지토리에서 사전 훈련된 가중치 및 구현 세부 정보를 확인할 수 있습니다.
MobileSAM 주요 사용 사례는 무엇인가요?
MobileSAM 모바일 및 엣지 환경에서 빠르고 효율적인 이미지 세분화를 위해 설계되었습니다. 주요 사용 사례는 다음과 같습니다:
- 모바일 앱을 위한 실시간 객체 감지 및 세분화
- 컴퓨팅 성능이 제한된 장치에서 지연 시간이 짧은 이미지 처리
- 증강 현실(AR), 분석 등을 위한 AI 기반 모바일 애플리케이션 통합
사용 사례 및 성능에 대한 자세한 내용은 SAM MobileSAM 적응하기 및 MobileSAM 애플리케이션에 대한Ultralytics 블로그를 참조하세요.