Chuyển đến nội dung

Logo MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM là một mô hình phân đoạn ảnh nhỏ gọn, hiệu quả, được xây dựng đặc biệt cho các thiết bị di động và thiết bị biên. Được thiết kế để mang sức mạnh của Meta's Segment Anything Model (SAM) đến các môi trường có khả năng tính toán hạn chế, MobileSAM cung cấp khả năng phân đoạn gần như tức thì đồng thời duy trì khả năng tương thích với quy trình SAM ban đầu. Cho dù bạn đang phát triển các ứng dụng thời gian thực hay triển khai gọn nhẹ, MobileSAM cung cấp kết quả phân đoạn ấn tượng với một phần nhỏ về kích thước và yêu cầu tốc độ so với các phiên bản tiền nhiệm.



Xem: Cách Chạy Suy Luận với MobileSAM Sử Dụng Ultralytics | Hướng Dẫn Từng Bước 🎉

MobileSAM đã được áp dụng trong nhiều dự án khác nhau, bao gồm Grounding-SAM, AnyLabelingSegment Anything in 3D.

MobileSAM được huấn luyện trên một GPU duy nhất bằng bộ dữ liệu 100k hình ảnh (1% số lượng hình ảnh ban đầu) trong vòng chưa đầy một ngày. Mã huấn luyện sẽ được phát hành trong tương lai.

Các mô hình hiện có, tác vụ được hỗ trợ và chế độ hoạt động

Bảng dưới đây phác thảo mô hình MobileSAM có sẵn, 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ế độ hoạt động khác nhau như Suy luận, Xác thực, Huấn luyệnXuất. Các chế độ được hỗ trợ được biểu thị bằng ✅ và các chế độ không được hỗ trợ bằng ❌.

Loại mô hình Trọng số được huấn luyện trước Các tác vụ được hỗ trợ Suy luận Xác thực Huấn luyện Xuất
MobileSAM mobile_sam.pt Phân đoạn thực thể

So sánh MobileSAM với YOLO

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 mô hình phân đoạn nhỏ nhất của Ultralytics, bao gồm YOLO11n-seg:

Mô hình Kích thước
(MB)
Tham số
(M)
Tốc độ (CPU)
(ms/ảnh)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s với backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (nhỏ hơn 11.7 lần) 3.4 (ít hơn 11.4 lần) 24.5 (nhanh hơn 1061 lần)
Ultralytics YOLO11n-seg 5.9 (nhỏ hơn 13.2 lần) 2.9 (ít hơn 13.4 lần) 30.1 (nhanh hơn 864 lần)

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 các khả năng phân đoạn tự động độc đáo, thì các mô hình YOLO—đặc biệt là YOLOv8n-seg và YOLO11n-seg—nhỏ hơn, nhanh hơn và hiệu quả về mặt tính toán hơn đáng kể.

Các thử nghiệm được tiến hành trên Apple M4 Pro 2025 với RAM 24GB sử dụng torch==2.6.0ultralytics==8.3.90. Để tái tạo những kết quả này:

Ví dụ

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)

Chuyển đổi từ SAM sang MobileSAM

MobileSAM giữ lại quy trình tương tự như SAM ban đầu, bao gồm tiền xử lý, hậu xử lý và tất cả các giao diện. Điều này có nghĩa là bạn có thể chuyển đổi từ SAM sang MobileSAM với những thay đổi tối thiểu đối với quy trình làm việc của mình.

Sự khác biệt chính là bộ mã hóa hình ảnh: MobileSAM thay thế bộ mã hóa ViT-H ban đầu (632 triệu tham số) bằng 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 ViT-Based Image Encoder

Bộ mã hóa hình ảnh SAM gốc MobileSAM
Tham số 611M 5M
Tốc độ 452ms 8ms

Bộ giải mã mặt nạ được hướng dẫn bởi nhắc lệnh

Bộ giải mã mặt nạ SAM gốc MobileSAM
Tham số 3.876M 3.876M
Tốc độ 4ms 4ms

So sánh toàn bộ quy trình

Toàn bộ quy trình (Enc+Dec) SAM gốc MobileSAM
Tham số 615M 9.66M
Tốc độ 456ms 12ms

Hiệu năng của MobileSAM và SAM gốc được minh họa bên dưới bằng cách sử dụng cả dấu nhắc điểm và hộp.

Hình ảnh với điểm làm Prompt

Hình ảnh với 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 một giao diện đơn giản để kiểm tra 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 sản Ultralytics.

Lời nhắc điểm

Ví dụ

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 (Dấu nhắc hộp)

Ví dụ

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ả hai MobileSAMSAM chia sẻ cùng 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 bộ dữ liệu phân đoạn bằng mô hình phát hiện

To automatically annotate your dataset with the Ultralytics framework, use the auto_annotate hàm như được hiển thị bên dưới:

Ví dụ

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.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 hình ảnh mục tiêu để chú thích hoặc phân đoạn.
det_model str 'yolo11x.pt' Đường dẫn mô hình phát hiện YOLO để phát hiện đối tượng ban đầu.
sam_model str 'sam_b.pt' Đường dẫn mô hình SAM để phân đoạn (hỗ trợ các biến thể SAM, SAM2 và mô hình mobile_sam).
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 phát hiện yếu.
iou float 0.45 Ngưỡng IoU cho Non-Maximum Suppression để 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 ảnh để tiết kiệm 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 và xe đạp).
output_dir str None Thư mục lưu trữ cho các chú thích (mặc định là '.\/labels' tương ứng 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 xem xét 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 về MobileSAM trên arXiv.

Câu hỏi thường gặp

MobileSAM là gì và nó khác với mô hình SAM gốc như thế nào?

MobileSAM là một mô hình phân đoạn ảnh nhanh, gọn nhẹ, được tối ưu hóa cho các ứng dụng di động và biên. Nó duy trì quy trình tương tự như SAM ban đầu nhưng thay thế bộ mã hóa ViT-H lớn (632M tham số) bằng bộ mã hóa Tiny-ViT nhỏ gọn (5M tham số). Điều này giúp MobileSAM nhỏ hơn khoảng 5 lần và nhanh hơn 7 lần so với SAM ban đầu, hoạt động ở khoảng 12ms trên mỗi hình ảnh so với 456ms của SAM. Tìm hiểu thêm về việc triển khai MobileSAM trên kho lưu trữ MobileSAM GitHub.

Làm cách nào để kiểm tra MobileSAM bằng Ultralytics?

Việc kiểm tra MobileSAM trong Ultralytics rất đơn giản. Bạn có thể sử dụng lời nhắc Điểm và Hình hộp để dự đoán các phân đoạn. Ví dụ: sử dụng lời nhắc Đ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 tra 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ý 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. So với SAM ban đầu, 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 ảnh thời gian thực mà không bị trễ đáng kể. Ngoài ra, MobileSAM hỗ trợ chế độ Suy luận được tối ưu hóa cho hiệu suất di động.

MobileSAM được huấn luyện như thế nào và liệu có sẵn mã huấn luyện không?

MobileSAM được huấn luyện trên một GPU duy nhất với bộ dữ liệu 100k hình ảnh (1% số lượng hình ảnh ban đầu) trong vòng 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, nhưng hiện tại bạ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ữ MobileSAM GitHub.

Các trường hợp sử dụng chính cho MobileSAM là gì?

MobileSAM được thiết kế để phân đoạn ả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 theo thời gian thực cho các ứng dụng di động
  • Xử lý ảnh độ trễ thấp trên các thiết bị có khả năng 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à hơn thế nữa

Để 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 MobileSAMblog Ultralytics về các ứng dụng MobileSAM.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 4 ngày trước

Bình luận