
Phân đoạn mọi thứ trên thiết bị di động (MobileSAM)#
MobileSAM là một model phân đoạn ảnh nhỏ gọn, hiệu quả, được thiết kế chuyên biệt cho các thiết bị di động và edge. Được xây dựng để mang sức mạnh của Model Phân đoạn Mọi thứ của Meta (SAM) đến các môi trường có năng lực tính toán hạn chế, MobileSAM cung cấp khả năng phân đoạn gần như tức thời trong khi vẫn duy trì khả năng tương thích với pipeline SAM gốc. Dù bạn đang phát triển các ứng dụng thời gian thực hay triển khai nhẹ, MobileSAM vẫn mang lại kết quả phân đoạn ấn tượng với yêu cầu về kích thước và tốc độ chỉ bằng một phần so với các phiên bản tiền nhiệm.
Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉
MobileSAM đã được ứng dụng trong nhiều dự án, bao gồm Grounding-SAM, AnyLabeling và Segment Anything in 3D.
MobileSAM được huấn luyện trên một GPU duy nhất sử dụng tập dữ liệu 100k ảnh (1% số ảnh gốc) trong chưa đầy một ngày.
Các model hiện có, tác vụ được hỗ trợ và chế độ vận hành#
Bảng dưới đây trình bày model MobileSAM hiện có, pretrained weights của model, các tác vụ được hỗ trợ và khả năng tương thích với những mode vận hành khác nhau như Inference, Validation, Training và Export. Các mode được hỗ trợ được đánh dấu bằng ✅, còn các mode không được hỗ trợ được đánh dấu bằng ❌.
| Loại model | Pretrained weight | Các tác vụ được hỗ trợ | Training | Validation | Inference | Export |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Phân đoạn instance | ❌ | ❌ | ✅ | ❌ |
So sánh MobileSAM với YOLO#
Phần so sánh dưới đây nêu bật sự khác biệt giữa các biến thể SAM của Meta, MobileSAM và các model phân đoạn của Ultralytics, bao gồm YOLO26n-seg:
| Model | Kích thước (MB) | Số tham số (M) | Tốc độ (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 |
| FastSAM-s với backbone YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7,1 (nhỏ hơn 11,0 lần) | 3,4 (ít hơn 11,4 lần) | 24,8 (nhanh hơn 945 lần) |
| Ultralytics YOLO11n-seg | 6.2 (nhỏ hơn 12.6 lần) | 2,9 (ít hơn 13,4 lần) | 24.3 (nhanh hơn 964 lần) |
| Ultralytics YOLO26n-seg | 6,7 (nhỏ hơn 11,7 lần) | 2.7 (ít hơn 14.4 lần) | 25,2 (nhanh hơn 930 lần) |
Phần so sánh này cho thấy sự khác biệt đáng kể về kích thước và tốc độ giữa các biến thể SAM và các model phân đoạn YOLO. Mặc dù các model SAM cung cấp khả năng phân đoạn tự động độc đáo, các model YOLO—đặc biệt là YOLOv8n-seg, YOLO11n-seg và YOLO26n-seg—nhỏ hơn, nhanh hơn và hiệu quả hơn đáng kể về mặt tính toán.
Tốc độ SAM được đo bằng PyTorch, còn tốc độ YOLO được đo bằng ONNX Runtime. Các bài kiểm thử được thực hiện trên Apple M4 Air 2025 với RAM 16GB bằng torch==2.10.0, ultralytics==8.4.31 và onnxruntime==1.24.4. Để tái tạo các kết quả này:
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)Chuyển đổi từ SAM sang MobileSAM#
MobileSAM duy trì pipeline giống với SAM gốc, bao gồm tiền xử lý, hậu xử lý và tất cả interface. Điều này có nghĩa là bạn có thể chuyển từ SAM sang MobileSAM với những thay đổi tối thiểu trong workflow.
Khác biệt chính nằm ở image encoder: MobileSAM thay thế encoder ViT-H gốc (637M tham số) bằng encoder Tiny-ViT nhỏ hơn nhiều (5M tham số). Trên một GPU duy nhất, MobileSAM xử lý một ảnh trong khoảng 12ms (8ms cho encoder, 4ms cho mask decoder).
So sánh image encoder dựa trên ViT#
| Image Encoder | SAM gốc | MobileSAM |
|---|---|---|
| Số tham số | 637M | 5M |
| Tốc độ | 452ms | 8ms |
Prompt-Guided Mask Decoder#
| Mask Decoder | SAM gốc | MobileSAM |
|---|---|---|
| Số tham số | 3.876M | 3.876M |
| Tốc độ | 4ms | 4ms |
So sánh toàn bộ pipeline#
| Toàn bộ pipeline (Enc+Dec) | SAM gốc | MobileSAM |
|---|---|---|
| Số tham số | 641M | 9.66M |
| Tốc độ | 456ms | 12ms |
Hiệu năng của MobileSAM và SAM gốc được minh họa dưới đây bằng cả point prompt và box prompt.


MobileSAM nhỏ hơn khoảng 7 lần và nhanh hơn 5 lần so với FastSAM. Để biết thêm chi tiết, hãy truy cập trang dự án MobileSAM.
Kiểm thử MobileSAM trong Ultralytics#
Tương tự SAM gốc, Ultralytics cung cấp interface đơn giản để kiểm thử MobileSAM, hỗ trợ cả Point prompt và Box prompt.
Tải model#
Tải pretrained weights của MobileSAM từ Ultralytics assets.
Point Prompt#
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]])Box Prompt#
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]])Cả MobileSAM và SAM đều sử dụng cùng một API. Để biết thêm chi tiết về cách sử dụng, hãy xem tài liệu SAM.
Tự động xây dựng dataset phân đoạn bằng model detection#
Để tự động gán nhãn dataset bằng framework Ultralytics, hãy sử dụng hàm auto_annotate như minh họa dưới đây:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
data | str | bắt buộc | Đường dẫn đến thư mục chứa các ảnh mục tiêu cần gán nhãn hoặc phân đoạn. |
det_model | str | 'yolo26x.pt' | Đường dẫn đến model phát hiện YOLO để phát hiện đối tượng ban đầu. |
sam_model | str | 'sam_b.pt' | Đường dẫn đến model SAM để phân đoạn (hỗ trợ trọng số SAM, SAM 2, MobileSAM và SAM 3). |
device | str | '' | Thiết bị tính toán (ví dụ: 'cuda:0', 'cpu' hoặc '' để tự động phát hiện thiết bị). |
conf | float | 0.25 | Ngưỡng độ tin cậy phát hiện YOLO để lọc các detection yếu. |
iou | float | 0.45 | Ngưỡng IoU cho Non-Maximum Suppression để lọc các box chồng lấp. |
imgsz | int | 640 | Kích thước đầu vào để resize ảnh (phải là bội số của 32). |
max_det | int | 300 | Số detection tối đa trên mỗi ảnh để sử dụng bộ nhớ hiệu quả. |
classes | list[int] | None | Danh sách index lớp cần phát hiện (ví dụ: [0, 1] cho người và xe đạp). |
output_dir | str | None | Thư mục lưu các annotation (mặc định: thư mục cùng cấp với <data>_auto_annotate_labels). |
Trích dẫn và ghi nhận đóng góp#
Nếu MobileSAM hữu ích cho nghiên cứu hoặc phát triển của bạn, hãy cân nhắc trích dẫn bài báo sau:
@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}
}Đọc toàn bộ bài báo MobileSAM trên arXiv.
FAQ#
MobileSAM là một mô hình phân đoạn ảnh gọn nhẹ, tốc độ cao được tối ưu hóa cho các ứng dụng di động và biên. Mô hình duy trì đường ống xử lý giống như SAM gốc nhưng thay thế bộ mã hóa ViT-H lớn (637M tham số) bằng bộ mã hóa Tiny-ViT nhỏ gọn (5M tham số). Điều này giúp toàn bộ đường ống MobileSAM nhỏ hơn khoảng 66 lần so với SAM gốc (9.66M so với 641M tham số) và nhanh hơn khoảng 38 lần, hoạt động ở mức khoảng 12 ms mỗi ảnh so với 456 ms của SAM. Khám phá thêm về việc triển khai MobileSAM trên kho lưu trữ GitHub của MobileSAM.
Kiểm thử MobileSAM trong Ultralytics rất đơn giản. Bạn có thể sử dụng Point prompt và Box prompt để dự đoán các segment. Ví dụ với Point prompt:
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])Để biết thêm chi tiết, hãy xem phần Kiểm thử MobileSAM trong Ultralytics.
MobileSAM rất lý tưởng cho các ứng dụng di động và biên nhờ thiết kế gọn nhẹ và tốc độ suy luận nhanh chóng. So với SAM gốc, MobileSAM có ít tham số hơn khoảng 66 lần và chạy nhanh hơn khoảng 38 lần, giúp mô hình phù hợp cho việc phân đoạn thời gian thực trên các thiết bị có tài nguyên tính toán hạn chế. Hiệu suất của mô hình cho phép các thiết bị di động thực hiện phân đoạn ảnh thời gian thực mà không có độ trễ đáng kể. Ngoài ra, MobileSAM hỗ trợ Chế độ suy luận được tối ưu hóa cho hiệu năng trên thiết bị di động.
MobileSAM được huấn luyện trên một GPU duy nhất với tập dữ liệu 100k ảnh (1% số ảnh SA-1B gốc) trong vòng chưa đầy một ngày, chắt lọc bộ mã hóa ảnh ViT-H của SAM thành bộ mã hóa Tiny-ViT. Trọng số được huấn luyện trước và chi tiết triển khai có sẵn từ kho lưu trữ GitHub của MobileSAM.
MobileSAM được thiết kế để phân đoạn ảnh nhanh và hiệu quả trong môi trường di động và edge. Các trường hợp sử dụng chính bao gồm:
- Phát hiện và phân đoạn đối tượng theo thời gian thực cho ứng dụng di động
- Xử lý ảnh độ trễ thấp trên các thiết bị có năng lực tính toán hạn chế
- Tích hợp trong các ứng dụng di động được hỗ trợ bởi AI cho thực tế tăng cường (AR), phân tích và nhiều mục đích khác
Để biết thêm chi tiết về các trường hợp sử dụng và hiệu năng, hãy xem Chuyển đổi từ SAM sang MobileSAM và blog của Ultralytics về các ứng dụng MobileSAM.