Ultralytics YOLO27:

MobileSAM 경량 이미지 세그멘테이션 모델 로고

모바일 Segment Anything (MobileSAM)#

MobileSAM은 모바일 및 엣지 디바이스를 위해 특별히 설계된 작고 효율적인 이미지 세그멘테이션 모델입니다. 제한된 연산 환경에 Meta의 Segment Anything 모델(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를 사용하여 10만 장의 이미지 데이터셋(원본 이미지의 1%)으로 하루가 안 되는 시간 동안 학습되었습니다.

사용 가능한 모델, 지원 작업 및 운영 모드#

아래 표에는 사용 가능한 MobileSAM 모델, 사전 학습된 가중치, 지원되는 작업, 그리고 Inference, Validation, Training, Export와 같은 다양한 운영 모드와의 호환성이 정리되어 있습니다. 지원되는 모드는 ✅로, 지원되지 않는 모드는 ❌로 표시됩니다.

모델 유형사전 학습된 가중치지원되는 작업학습검증추론내보내기
MobileSAMmobile_sam.pt인스턴스 세그멘테이션

MobileSAM과 YOLO 비교#

다음 비교에서는 Meta의 SAM 변형 모델, MobileSAM, 그리고 YOLO26n-seg를 포함한 Ultralytics 세그멘테이션 모델 간의 차이를 보여줍니다.

모델크기
(MB)
파라미터
(M)
속도 (CPU)
(ms/이미지)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
YOLOv8 백본을 사용하는 FastSAM-s23.911.858.0
Ultralytics YOLOv8n-seg7.1 (11.0배 더 작음)3.4 (11.4배 더 적음)24.8 (945배 더 빠름)
Ultralytics YOLO11n-seg6.2 (12.6배 작음)2.9 (13.4배 더 적음)24.3 (964배 빠름)
Ultralytics YOLO26n-seg6.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, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

SAM에서 MobileSAM으로 전환하기#

MobileSAM은 전처리, 후처리 및 모든 인터페이스를 포함하여 원본 SAM과 동일한 파이프라인을 유지합니다. 따라서 워크플로를 최소한으로 변경하여 SAM에서 MobileSAM으로 전환할 수 있습니다.

핵심적인 차이는 이미지 인코더입니다. MobileSAM은 원본 ViT-H 인코더(637M 파라미터)를 훨씬 작은 Tiny-ViT 인코더(5M 파라미터)로 대체합니다. 단일 GPU에서 MobileSAM은 이미지를 약 12ms 만에 처리합니다(인코더 8ms, 마스크 디코더 4ms).

ViT 기반 이미지 인코더 비교#

이미지 인코더원본 SAMMobileSAM
파라미터637M5M
속도452ms8ms

프롬프트 기반 마스크 디코더#

마스크 디코더원본 SAMMobileSAM
파라미터3.876M3.876M
속도4ms4ms

전체 파이프라인 비교#

전체 파이프라인(인코더+디코더)원본 SAMMobileSAM
파라미터641M9.66M
속도456ms12ms

아래에서는 포인트 프롬프트와 박스 프롬프트를 모두 사용하여 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 box prompt
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Predict multiple segments based on multiple box prompts
model.predict("ultralytics/assets/zidane.jpg", bboxes=[[439, 437, 524, 709], [114, 196, 313, 708]])

MobileSAMSAM은 동일한 API를 공유합니다. 자세한 사용 방법은 SAM 문서를 참조하십시오.

Detection 모델을 사용하여 세그멘테이션 데이터셋 자동 구축하기#

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")
인수유형기본값설명
datastr필수어노테이션 또는 분할 대상 이미지가 포함된 디렉터리의 경로입니다.
det_modelstr'yolo26x.pt'초기 객체 감지를 위한 YOLO 감지 모델 경로입니다.
sam_modelstr'sam_b.pt'분할을 위한 SAM 모델 경로입니다(SAM, SAM 2, MobileSAM 및 SAM 3 가중치를 지원합니다).
devicestr''계산 장치입니다(예: 'cuda:0', 'cpu' 또는 자동 장치 감지를 위한 ''입니다).
conffloat0.25낮은 신뢰도의 감지를 필터링하기 위한 YOLO 감지 신뢰도 임계값입니다.
ioufloat0.45겹치는 박스를 필터링하기 위한 Non-Maximum Suppression의 IoU 임계값입니다.
imgszint640이미지 크기 조정을 위한 입력 크기입니다(32의 배수여야 합니다).
max_detint300메모리 효율성을 위한 이미지당 최대 감지 수입니다.
classeslist[int]None감지할 클래스 인덱스 목록입니다(예: 사람 및 자전거의 경우 [0, 1]).
output_dirstrNone어노테이션 저장 디렉터리입니다(기본값: <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 논문에서 확인하십시오.

FAQ#

  • MobileSAM은 모바일 및 엣지 애플리케이션에 최적화된 경량화되고 빠른 이미지 세그멘테이션 모델입니다. 원본 SAM과 동일한 파이프라인을 유지하지만, 대형 ViT-H 인코더(6억 3,700만 개의 매개변수)를 소형 Tiny-ViT 인코더(500만 개의 매개변수)로 대체합니다. 이로 인해 전체 MobileSAM 파이프라인은 원본 SAM(966만 대 6억 4,100만 개의 매개변수)보다 약 66배 작고, 약 38배 더 빠르며, 이미지당 약 12ms로 동작합니다(SAM의 456ms 대비). MobileSAM의 구현에 대한 자세한 내용은 MobileSAM GitHub 저장소에서 확인하세요.

  • 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은 경량화된 설계와 빠른 추론 속도 덕분에 모바일 및 엣지 애플리케이션에 이상적입니다. 원본 SAM에 비해 MobileSAM은 매개변수가 약 66배 적고 약 38배 빠르게 실행되므로, 연산 자원이 제한된 기기에서 실시간 세그멘테이션을 수행하는 데 적합합니다. 이러한 효율성 덕분에 모바일 기기는 심각한 지연 없이 실시간 이미지 세그멘테이션을 수행할 수 있습니다. 또한 MobileSAM은 모바일 성능에 최적화된 추론 모드를 지원합니다.

  • MobileSAM은 단일 GPU에서 10만 장의 이미지 데이터셋(원본 SA-1B 이미지의 1%)을 사용하여 하루가 안 되는 시간 동안 학습되었으며, SAM의 ViT-H 이미지 인코더를 Tiny-ViT 인코더로 증류했습니다. 사전 학습된 가중치와 구현 세부 정보는 MobileSAM GitHub 저장소에서 제공됩니다.

  • MobileSAM은 모바일 및 엣지 환경에서 빠르고 효율적인 이미지 세그멘테이션을 수행하도록 설계되었습니다. 주요 사용 사례는 다음과 같습니다.

    • 모바일 앱을 위한 실시간 객체 감지 및 세그멘테이션
    • 연산 리소스가 제한된 디바이스에서의 저지연 이미지 처리
    • 증강 현실(AR), 분석 등을 위한 AI 기반 모바일 애플리케이션에 통합

    사용 사례와 성능에 대한 자세한 내용은 SAM에서 MobileSAM으로 전환하기MobileSAM 애플리케이션에 관한 Ultralytics 블로그를 참조하십시오.

댓글