
Mobile Segment Anything (MobileSAM)
MobileSAM là một mô hình phân đoạn hình ảnh nhỏ gọn, hiệu quả được xây dựng có mục đích cho thiết bị di động và biên. Được thiết kế để mang sức mạnh của Segment Anything Model (SAM) từ Meta đến các môi trường có tài nguyên 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. Cho dù bạn đang phát triển các ứng dụng thời gian thực hay các triển khai gọn nhẹ, MobileSAM 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 nhỏ 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 áp dụng trong nhiều dự án khác nhau, 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 100 nghìn ảnh (1% số ảnh gốc) trong chưa đầy một ngày. Mã huấn luyện sẽ được phát hành trong tương lai.
Các model khả dụng, tác vụ được hỗ trợ và chế độ vận hành
Bảng dưới đây phác thảo các mô hình MobileSAM khả dụng, trọng số đã được huấn luyện trước, các tác vụ được hỗ trợ và khả năng tương thích với các chế độ vận hành khác nhau như Inference, Validation, Training, và Export. Các chế độ được hỗ trợ được chỉ báo bởi ✅ và các chế độ không được hỗ trợ bởi ❌.
| Loại Model | Weights Tiền huấn luyện | Tác vụ được hỗ trợ | Inference | Validation | Training | Export |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Instance Segmentation | ✅ | ❌ | ❌ | ❌ |
So sánh MobileSAM với YOLO
Bảng so sánh dưới đây làm nổi bật sự khác biệt giữa các biến thể SAM của Meta, MobileSAM và các mô hình phân đoạn Ultralytics bao gồm YOLO26n-seg:
| Model | Kích thước (MB) | 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 YOLOv8 backbone | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (nhỏ hơn 11.0x) | 3.4 (ít hơn 11.4x) | 24.8 (nhanh hơn 945x) |
| Ultralytics YOLO11n-seg | 6.2 (nhỏ hơn 12.6x) | 2.9 (ít hơn 13.4x) | 24.3 (nhanh hơn 964x) |
| Ultralytics YOLO26n-seg | 6.7 (nhỏ hơn 11.7x) | 2.7 (ít hơn 14.4x) | 25.2 (nhanh hơn 930x) |
Bảng so sánh này chứng minh sự khác biệt đáng kể về kích thước và tốc độ mô hình giữa các biến thể SAM và các mô hình phân đoạn YOLO. Trong khi các mô hình SAM cung cấp khả năng phân đoạn tự động độc đáo, các mô hình 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, tốc độ YOLO được đo bằng ONNX Runtime. Các thử nghiệm được chạy trên Apple M4 Air 2025 với 16GB RAM sử dụ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)
model = YOLO(onnx_path)
model(ASSETS)Chuyển đổi từ SAM sang MobileSAM
MobileSAM giữ nguyên pipeline như SAM gốc, bao gồm tiền xử lý, hậu xử lý và tất cả giao diện. Đ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 quy trình làm việc của mình.
Điểm khác biệt chính là bộ mã hóa hình ảnh: MobileSAM thay thế bộ mã hóa ViT-H gốc (632 triệu tham số) bằng một bộ mã hóa Tiny-ViT nhỏ hơn nhiều (5 triệu tham số). Trên một GPU duy nhất, MobileSAM xử lý một hình ảnh trong khoảng 12ms (8ms cho bộ mã hóa, 4ms cho bộ giải mã mặt nạ).
So sánh bộ mã hóa hình ảnh dựa trên ViT
| Bộ mã hóa hình ảnh | SAM gốc | MobileSAM |
|---|---|---|
| Tham số | 611M | 5M |
| Speed | 452ms | 8ms |
Bộ giải mã mặt nạ có hướng dẫn nhắc (Prompt-Guided)
| Bộ giải mã mặt nạ | SAM gốc | MobileSAM |
|---|---|---|
| Tham số | 3.876M | 3.876M |
| Speed | 4ms | 4ms |
So sánh toàn bộ pipeline
| Toàn bộ pipeline (Enc+Dec) | SAM gốc | MobileSAM |
|---|---|---|
| Tham số | 615M | 9.66M |
| Speed | 456ms | 12ms |
Hiệu suất của MobileSAM và SAM gốc được minh họa dưới đây bằng cách sử dụng cả nhắc nhở điểm (point prompt) và hộp (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
Cũng giống như SAM gốc, Ultralytics cung cấp một giao diện đơn giản để kiểm thử MobileSAM, hỗ trợ cả nhắc nhở Điểm và Hộp.
Tải xuống mô hình
Tải xuống trọng số đã được huấn luyện trước của MobileSAM từ tài nguyên Ultralytics.
Nhắc nhở Điểm
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]])Nhắc nhở Hộp
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]])Cả MobileSAM và SAM đều chia sẻ chung một API. Để biết thêm chi tiết sử dụng, hãy xem tài liệu SAM.
Tự động xây dựng tập dữ liệu phân đoạn bằng mô hình phát hiện
Để tự động gắn nhãn tập dữ liệu của bạn với framework Ultralytics, hãy sử dụng hàm auto_annotate như hiển thị bên dưới:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
data | str | bắt buộc | Đường dẫn đến thư mục chứa các hình ảnh mục tiêu để gán nhãn hoặc phân đoạn. |
det_model | str | 'yolo26x.pt' | Đường dẫn model phát hiện YOLO cho phát hiện đối tượng ban đầu. |
sam_model | str | 'sam_b.pt' | Đường dẫn model SAM cho phân đoạn (hỗ trợ SAM, các biến thể SAM2, và các model MobileSAM). |
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 kết quả phát hiện yếu. |
iou | float | 0.45 | Ngưỡng IoU cho NMS để lọc các hộp chồng chéo. |
imgsz | int | 640 | Kích thước đầu vào để thay đổi kích thước hình ảnh (phải là bội số của 32). |
max_det | int | 300 | Số lượng phát hiện tối đa trên mỗi hình ảnh để tối ưu hóa bộ nhớ. |
classes | list[int] | None | Danh sách các chỉ số lớp để phát hiện (ví dụ: [0, 1] cho người & xe đạp). |
output_dir | str | None | Thư mục lưu cho các nhãn (mặc định là './labels' tương đối với đường dẫn dữ liệu). |
Trích dẫn và Ghi nhận
Nếu MobileSAM hữu ích cho nghiên cứu hoặc phát triển của bạn, vui lòng 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.
Câu hỏi thường gặp (FAQ)
MobileSAM là gì và nó khác biệt thế nào với mô hình SAM gốc?
MobileSAM là một mô hình phân đoạn hình ảnh gọn nhẹ, nhanh chóng được tối ưu hóa cho các ứng dụng di động và biên. Nó duy trì cùng một pipeline như SAM gốc nhưng thay thế bộ mã hóa ViT-H lớn (632 triệu tham số) bằng một bộ mã hóa Tiny-ViT nhỏ gọn (5 triệu tham số). Kết quả là MobileSAM nhỏ hơn khoảng 5 lần và nhanh hơn 7 lần so với SAM gốc, hoạt động ở mức khoảng 12ms mỗi hình ảnh so với 456ms của SAM. Khám phá thêm về triển khai của MobileSAM trên kho lưu trữ GitHub của MobileSAM.
Làm thế nào để tôi có thể kiểm thử MobileSAM bằng Ultralytics?
Việc kiểm thử MobileSAM trong Ultralytics rất đơn giản. Bạn có thể sử dụng các nhắc nhở Điểm và Hộp để dự đoán các phân đoạn. Ví dụ, sử dụng nhắc nhở Điểm:
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.
Tại sao tôi nên sử dụng MobileSAM cho ứng dụng di động của mình?
MobileSAM là lựa chọn 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 nhỏ hơn khoảng 5 lần và nhanh hơn 7 lần, khiến nó phù hợp để 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 quả của nó cho phép các thiết bị di động thực hiện phân đoạn hình ảnh thời gian thực mà không có độ trễ đáng kể. Ngoài ra, MobileSAM hỗ trợ chế độ Inference được tối ưu hóa cho hiệu suất di động.
MobileSAM đã được huấn luyện như thế nào và mã huấn luyện có sẵn không?
MobileSAM đã được huấn luyện trên một GPU duy nhất với tập dữ liệu 100 nghìn ảnh (1% số ảnh gốc) trong chưa đầy một ngày. Mặc dù mã huấn luyện sẽ được phát hành trong tương lai, bạn hiện có thể truy cập các trọng số đã được huấn luyện trước và chi tiết triển khai từ kho lưu trữ GitHub của MobileSAM.
Các trường hợp sử dụng chính cho MobileSAM là gì?
MobileSAM được thiết kế để phân đoạn hình ảnh nhanh chóng và hiệu quả trong môi trường di động và biên. 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 thời gian thực cho các ứng dụng di động
- Xử lý hình ảnh độ trễ thấp trên các thiết bị có tài nguyên tính toán hạn chế
- Tích hợp trong các ứng dụng di động hỗ trợ AI cho thực tế tăng cường (AR), phân tích, v.v.
Để biết thêm chi tiết về các trường hợp sử dụng và hiệu suất, hãy xem Chuyển đổi từ SAM sang MobileSAM và blog Ultralytics về các ứng dụng MobileSAM.