Ultralytics YOLO27:
Get Started

Logo model phân đoạn hình ảnh gọn nhẹ MobileSAM

Segment Anything cho thiết bị di động (MobileSAM)#

MobileSAM là model phân đoạn hình ảnh nhỏ gọn, hiệu quả, được thiết kế chuyên biệt cho thiết bị di động và thiết bị biên. Được phát triển để đưa sức mạnh của Mô hình 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 mang lại khả năng phân đoạn gần như tức thì mà vẫn tương thích với pipeline SAM gốc. Dù đang phát triển ứng dụng thời gian thực hay triển khai gọn nhẹ, MobileSAM đều cung cấp 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.



Xem: Cách chạy inference với MobileSAM bằng Ultralytics | Hướng dẫn từng bước 🎉

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 bằng bộ dữ liệu gồm 100k hình ảnh (1% số hình ả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ế độ hoạt động#

Bảng dưới đây trình bày model MobileSAM hiện có, pretrained weights, các tác vụ được hỗ trợ và khả năng tương thích với những chế độ hoạt động khác nhau như Suy luận, Đánh giá, Huấn luyện và Xuất. ✅ biểu thị chế độ được hỗ trợ và ❌ biểu thị chế độ không được hỗ trợ.

Loại modelWeights pretrainedCác tác vụ được hỗ trợHuấn luyệnValidationSuy luậnExport
MobileSAMmobile_sam.ptPhân đoạn đối tượng❌❌✅❌

So sánh MobileSAM với YOLO#

Phần so sánh sau đâ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:

ModelKích thước
(MB)
Tham số
(M)
Tốc độ (CPU)
(ms/ảnh)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s với backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.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-seg6.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-seg6.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ép 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à model phân đoạn YOLO. Các model SAM có khả năng phân đoạn tự động độc đáo, nhưng các model YOLO—đặc biệt là YOLOv8n-seg, YOLO11n-seg và YOLO26n-seg—nhỏ hơn, nhanh hơn và tiết kiệm tài nguyên tính toán hơn đáng kể.

Tốc độ SAM được đo bằng PyTorch, còn 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 RAM 16 GB 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:

Ví dụ
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Đo hiệu năng 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)

# Lập hồ sơ FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Đo hiệu năng các model YOLO (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)  # Đầu NMS-free của YOLO26; không có tác dụng với YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Chuyển đổi từ SAM sang MobileSAM#

MobileSAM giữ nguyên pipeline của SAM ban đầu, bao gồm tiền xử lý, hậu xử lý và tất cả các interface. Điều này có nghĩa là bạn có thể chuyển từ SAM sang MobileSAM với ít thay đổi nhất cho quy trình làm việc.

Điểm khác biệt chính là image encoder: MobileSAM thay encoder ViT-H ban đầu (637M tham số) bằng encoder Tiny-ViT nhỏ hơn nhiều (5M tham số). Trên một GPU, 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 EncoderSAM ban đầuMobileSAM
Tham số637M5M
Tốc độ452ms8ms

Mask Decoder được điều khiển bằng prompt#

Mask DecoderSAM ban đầuMobileSAM
Tham số3.876M3.876M
Tốc độ4ms4ms

So sánh toàn bộ pipeline#

Toàn bộ pipeline (Enc+Dec)SAM ban đầuMobileSAM
Tham số641M9.66M
Tốc độ456ms12ms

Hiệu năng của MobileSAM và SAM ban đầu được minh họa bên dưới bằng prompt điểm và prompt hộp.

Ảnh dùng điểm làm prompt

Ảnh dùng hộp làm 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#

Giống như SAM ban đầu, Ultralytics cung cấp interface đơn giản để kiểm thử MobileSAM, hỗ trợ cả prompt điểm và hộp.

Tải model#

Tải pretrained weights của MobileSAM từ tài nguyên Ultralytics.

Prompt điểm#

Ví dụ
from ultralytics import SAM

# Tải model
model = SAM("mobile_sam.pt")

# Dự đoán một phân đoạn dựa trên một prompt điểm
model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Dự đoán nhiều phân đoạn dựa trên nhiều prompt điểm
model.predict("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])

# Dự đoán một phân đoạn cho mỗi đối tượng dựa trên nhiều prompt điểm
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Dự đoán một phân đoạn bằng cả prompt dương và prompt âm.
model.predict("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Prompt hộp#

Ví dụ
from ultralytics import SAM

# Tải model
model = SAM("mobile_sam.pt")

# Dự đoán một phân đoạn dựa trên một prompt hộp
model.predict("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Dự đoán nhiều phân đoạn dựa trên nhiều prompt hộp
model.predict("ultralytics/assets/zidane.jpg", bboxes=[[439, 437, 524, 709], [114, 196, 313, 708]])

Cả MobileSAM và SAM đều có cùng API. Để biết thêm chi tiết về cách sử dụng, hãy xem tài liệu SAM.

Tự động tạo dataset phân đoạn bằng model phát hiện#

Để tự động gắn nhãn cho dataset bằng framework Ultralytics, hãy dùng hàm auto_annotate như minh họa bên dưới:

Ví dụ
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ểuMặc địnhMô tả
datastrbắt buộcĐường dẫn đến thư mục chứa ảnh mục tiêu cần chú thích hoặc phân đoạn.
det_modelstr'yolo26x.pt'Đường dẫn đến model phát hiện YOLO để phát hiện đối tượng ban đầu.
sam_modelstr'sam_b.pt'Đường dẫn đến model SAM để phân đoạn (hỗ trợ các weight của SAM, SAM 2, MobileSAM và SAM 3).
devicestr''Thiết bị tính toán (ví dụ: 'cuda:0', 'cpu' hoặc '' để tự động phát hiện thiết bị).
conffloat0.25Ngưỡng confidence của model phát hiện YOLO để lọc các kết quả phát hiện yếu.
ioufloat0.45Ngưỡng IoU cho Non-Maximum Suppression để lọc các hộp chồng lấn.
imgszint640Kích thước đầu vào để thay đổi kích thước ảnh (nếu cần, làm tròn lên bội số của 32).
max_detint300Số lượng kết quả phát hiện tối đa trên mỗi ảnh để tiết kiệm bộ nhớ.
classeslist[int]NoneDanh sách chỉ số class cần phát hiện (ví dụ: [0, 1] cho người và xe đạp).
output_dirstrNoneThư mục lưu chú thích (mặc định: thư mục cùng cấp với <data>_auto_annotate_labels).

Trích dẫn và lời cảm ơn#

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:

Trích dẫn
@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#

  • MobileSAM là model phân đoạn ảnh gọn nhẹ, nhanh, được tối ưu cho ứng dụng di động và edge. Model giữ nguyên pipeline của SAM ban đầu nhưng thay encoder ViT-H lớn (637M tham số) bằng encoder Tiny-ViT gọn nhẹ (5M tham số). Nhờ đó, toàn bộ pipeline MobileSAM nhỏ hơn khoảng 66 lần so với SAM ban đầu (9.66M so với 641M tham số) và nhanh hơn khoảng 38 lần, với thời gian xử lý xấp xỉ 12 ms mỗi ảnh so với 456 ms của SAM. Tìm hiểu thêm về cách triển khai MobileSAM tại repository MobileSAM trên GitHub.

  • Kiểm thử MobileSAM trong Ultralytics rất đơn giản. Bạn có thể dùng prompt điểm và hộp để dự đoán phân đoạn. Ví dụ, với prompt điểm:

    from ultralytics import SAM
    
    # Tải model
    model = SAM("mobile_sam.pt")
    
    # Dự đoán một phân đoạn dựa trên prompt điểm
    model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

    Để biết thêm chi tiết, hãy xem mục Kiểm thử MobileSAM trong Ultralytics.

  • MobileSAM là lựa chọn lý tưởng cho ứng dụng di động và edge nhờ thiết kế gọn nhẹ và tốc độ inference nhanh. So với SAM ban đầu, MobileSAM có số lượng tham số ít hơn khoảng 66 lần và chạy nhanh hơn khoảng 38 lần, phù hợp để phân đoạn theo 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 model cho phép thiết bị di động thực hiện phân đoạn ảnh theo thời gian thực mà không gây độ trễ đáng kể. Ngoài ra, MobileSAM hỗ trợ chế độ Inference được tối ưu cho hiệu năng trên thiết bị di động.

  • MobileSAM được huấn luyện trên một GPU với dataset gồm 100k ảnh (1% số ảnh SA-1B ban đầu) trong chưa đầy một ngày, chưng cất image encoder ViT-H của SAM thành encoder Tiny-ViT. Pretrained weights và chi tiết triển khai có tại repository MobileSAM trên GitHub.

  • 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 thiết bị có tài nguyên tính toán hạn chế
    • Tích hợp vào ứng dụng di động tích hợp 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 Ultralytics về các ứng dụng Segment Anything.

Bình luận