Ultralytics YOLO27:
Get Started

Mô hình Phân đoạn Mọi thứ (SAM)#

Sự phát triển của SAM

Đây là model SAM gốc của Meta. Để biết thêm về các tính năng nâng cao, hãy xem SAM 2 để phân đoạn video hoặc SAM 3 để phân đoạn khái niệm theo prompt bằng prompt mẫu văn bản và hình ảnh.

How to use Segment Anything In Colab

Chào mừng bạn đến với bước tiến mới trong lĩnh vực phân đoạn hình ảnh cùng Mô hình Phân đoạn Mọi thứ, hay SAM. Model đột phá này đã thay đổi cuộc chơi bằng cách giới thiệu khả năng phân đoạn hình ảnh theo prompt với hiệu suất thời gian thực, thiết lập những tiêu chuẩn mới trong lĩnh vực này.

Giới thiệu về SAM: Mô hình Phân đoạn Mọi thứ#

Mô hình Phân đoạn Mọi thứ, hay SAM, là một model phân đoạn hình ảnh tiên tiến cho phép phân đoạn theo prompt, mang lại tính linh hoạt vượt trội cho các tác vụ phân tích hình ảnh. SAM là cốt lõi của sáng kiến Segment Anything, một dự án đột phá giới thiệu một model, tác vụ và bộ dữ liệu mới cho phân đoạn hình ảnh.

Thiết kế tiên tiến của SAM cho phép model thích ứng với các phân phối hình ảnh và tác vụ mới mà không cần kiến thức trước đó; tính năng này được gọi là chuyển giao zero-shot. Được huấn luyện trên bộ dữ liệu SA-1B quy mô lớn, gồm hơn 1 tỷ mask trên 11 triệu hình ảnh được tuyển chọn kỹ lưỡng, SAM đã thể hiện hiệu suất zero-shot ấn tượng, vượt qua kết quả trước đây của các phương pháp giám sát đầy đủ trong nhiều trường hợp.

Mẫu bộ dữ liệu SA-1B với các mask phân đoạn tự động Hình ảnh ví dụ từ SA-1B. Các hình ảnh trong bộ dữ liệu được phủ mask từ bộ dữ liệu SA-1B mới được giới thiệu. SA-1B gồm 11M hình ảnh đa dạng, độ phân giải cao, được cấp phép và bảo vệ quyền riêng tư, cùng 1,1B mask phân đoạn chất lượng cao. SAM đã tự động gán nhãn hoàn toàn các mask này; kết quả đánh giá của con người cùng nhiều thử nghiệm xác nhận chúng có chất lượng cao và đa dạng. Để trực quan hóa, hình ảnh được nhóm theo số lượng mask trên mỗi ảnh (trung bình khoảng 100 mask mỗi ảnh).

Các tính năng chính của Mô hình Phân đoạn Mọi thứ (SAM)#

  • Tác vụ phân đoạn theo prompt: SAM được thiết kế cho tác vụ phân đoạn theo prompt, cho phép tạo mask phân đoạn hợp lệ từ bất kỳ prompt nào, chẳng hạn như gợi ý không gian hoặc văn bản xác định một đối tượng.
  • Kiến trúc tiên tiến: Mô hình Phân đoạn Mọi thứ sử dụng bộ mã hóa hình ảnh mạnh mẽ, bộ mã hóa prompt và bộ giải mã mask gọn nhẹ. Kiến trúc độc đáo này hỗ trợ prompt linh hoạt, tính toán mask theo thời gian thực và nhận biết tính mơ hồ trong các tác vụ phân đoạn.
  • Bộ dữ liệu SA-1B: Được giới thiệu bởi dự án Segment Anything, bộ dữ liệu SA-1B có hơn 1 tỷ mask trên 11 triệu hình ảnh. Là bộ dữ liệu phân đoạn lớn nhất cho đến nay, bộ dữ liệu này cung cấp cho SAM nguồn dữ liệu huấn luyện đa dạng và quy mô lớn.
  • Hiệu suất zero-shot: SAM thể hiện hiệu suất zero-shot vượt trội trên nhiều tác vụ phân đoạn, trở thành công cụ có thể sử dụng ngay cho nhiều ứng dụng mà chỉ cần rất ít kỹ thuật thiết kế prompt.

Để tìm hiểu chuyên sâu về Mô hình Phân đoạn Mọi thứ và bộ dữ liệu SA-1B, hãy truy cập GitHub của Segment Anything và xem bài nghiên cứu Segment Anything.

SAM trên Ultralytics Platform

SAM hỗ trợ tính năng gán nhãn thông minh trên Ultralytics Platform, cho phép tạo mask thông minh bằng thao tác nhấp để gán nhãn bộ dữ liệu nhanh chóng. Xem hướng dẫn gán nhãn để biết thêm chi tiết.

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

Bảng này trình bày các model hiện có cùng pretrained weights tương ứng, 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; emoji ✅ biểu thị chế độ được hỗ trợ và emoji ❌ 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
SAM bản cơ sởsam_b.ptPhân đoạn đối tượng❌❌✅❌
SAM bản lớnsam_l.ptPhân đoạn đối tượng❌❌✅❌

Cách sử dụng SAM: Tính linh hoạt và sức mạnh trong phân đoạn hình ảnh#

Mô hình Phân đoạn Mọi thứ có thể được sử dụng cho nhiều tác vụ hạ nguồn vượt ra ngoài dữ liệu huấn luyện. Các tác vụ này bao gồm phát hiện cạnh, tạo đề xuất đối tượng, phân đoạn instance và dự đoán sơ bộ từ văn bản sang mask. Với kỹ thuật thiết kế prompt, SAM có thể nhanh chóng thích ứng với các tác vụ và phân phối dữ liệu mới theo phương thức zero-shot, trở thành công cụ linh hoạt và mạnh mẽ đáp ứng mọi nhu cầu phân đoạn hình ảnh.

Ví dụ dự đoán bằng SAM#

Phân đoạn bằng prompt

Phân đoạn hình ảnh bằng các prompt đã cho.

from ultralytics import SAM

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

# Hiển thị thông tin model (không bắt buộc)
model.info()

# Chạy suy luận với prompt bboxes
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Chạy suy luận với một điểm đơn
results = model(points=[900, 370], labels=[1])

# Chạy suy luận với nhiều điểm
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Chạy suy luận với prompt gồm nhiều điểm cho mỗi đối tượng
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Chạy suy luận với prompt gồm các điểm âm
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Phân đoạn toàn bộ

Phân đoạn toàn bộ hình ảnh.

from ultralytics import SAM

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

# Hiển thị thông tin model (không bắt buộc)
model.info()

# Chạy suy luận
model("path/to/image.jpg")
  • Logic ở đây là phân đoạn toàn bộ hình ảnh nếu bạn không truyền bất kỳ prompt nào (bboxes/points/masks).
Ví dụ SAMPredictor

Bằng cách này, bạn có thể đặt hình ảnh một lần rồi chạy suy luận với nhiều prompt mà không cần chạy bộ mã hóa hình ảnh nhiều lần.

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Tạo SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Thiết lập ảnh
predictor.set_image("ultralytics/assets/zidane.jpg")  # đặt bằng tệp hình ảnh
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # đặt bằng np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Chạy suy luận với prompt một điểm
results = predictor(points=[900, 370], labels=[1])

# Chạy suy luận với prompt nhiều điểm
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Chạy suy luận với prompt gồm các điểm âm
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Đặt lại hình ảnh
predictor.reset_image()

Phân đoạn toàn bộ với các đối số bổ sung.

from ultralytics.models.sam import Predictor as SAMPredictor

# Tạo SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Phân đoạn với các đối số bổ sung
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64, min_mask_region_area=100)
Lưu ý

Tất cả results được trả về trong các ví dụ trên đều là các đối tượng Results, cho phép dễ dàng truy cập mask dự đoán và hình ảnh nguồn.

So sánh SAM với YOLO#

Ở đây, chúng tôi so sánh model SAM-b của Meta với 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
MobileSAM40.710.123802
FastSAM-s với backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (nhỏ hơn 52.8 lần)3.4 (ít hơn 27.6 lần)24.8 (nhanh hơn 1682 lần)
Ultralytics YOLO11n-seg6.2 (nhỏ hơn 60.5 lần)2.9 (ít hơn 32.3 lần)24.3 (nhanh hơn 1716 lần)
Ultralytics YOLO26n-seg6.7 (nhỏ hơn 56.0 lần)2.7 (ít hơn 34.7 lần)25.2 (nhanh hơn 1655 lầ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à model phân đoạn YOLO. 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à hiệu quả tính toán hơn đáng kể.

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 RAM 16GB, sử dụng torch==2.10.0, ultralytics==8.4.31 và onnxruntime==1.24.4. Để tái tạo thử nghiệm này:

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

# Đánh giá hiệu năng SAM-b, MobileSAM
for file in ["sam_b.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)

Gán nhãn tự động: Cách nhanh chóng tạo bộ dữ liệu phân đoạn#

Gán nhãn tự động là tính năng quan trọng của SAM, cho phép người dùng tạo bộ dữ liệu phân đoạn bằng model phát hiện được huấn luyện trước. Tính năng này cho phép gán nhãn nhanh chóng và chính xác cho số lượng lớn hình ảnh, loại bỏ nhu cầu gán nhãn thủ công tốn thời gian.

Tạo bộ dữ liệu phân đoạn bằng model phát hiện#

Để tự động gán nhãn bộ dữ liệu bằng framework Ultralytics, hãy sử 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="sam_b.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).

Hàm auto_annotate nhận đường dẫn đến hình ảnh của bạn, cùng các đối số tùy chọn để chỉ định model phát hiện được huấn luyện trước và model phân đoạn SAM, thiết bị chạy các model cũng như thư mục đầu ra để lưu kết quả đã gán nhãn.

Gán nhãn tự động bằng các model được huấn luyện trước có thể giảm đáng kể thời gian và công sức cần thiết để tạo bộ dữ liệu phân đoạn chất lượng cao. Tính năng này đặc biệt hữu ích cho các nhà nghiên cứu và nhà phát triển làm việc với bộ sưu tập hình ảnh lớn, vì cho phép họ tập trung vào phát triển và đánh giá model thay vì gán nhãn thủ công.

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

Nếu SAM hữu ích cho công việc 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:

Trích dẫn
@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Chúng tôi xin cảm ơn Meta AI đã tạo và duy trì tài nguyên quý giá này cho cộng đồng thị giác máy tính.

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

  • Mô hình Phân đoạn Mọi thứ (SAM) của Meta là một model phân đoạn hình ảnh đột phá, được thiết kế cho các tác vụ phân đoạn theo prompt. Model tận dụng kiến trúc tiên tiến, bao gồm bộ mã hóa hình ảnh và prompt kết hợp với bộ giải mã mask gọn nhẹ, để tạo mask phân đoạn chất lượng cao từ nhiều loại prompt như gợi ý không gian hoặc văn bản. Được huấn luyện trên bộ dữ liệu SA-1B quy mô lớn, SAM nổi bật với hiệu suất zero-shot, thích ứng với các phân phối hình ảnh và tác vụ mới mà không cần kiến thức trước đó.

  • Bạn có thể sử dụng Mô hình Phân đoạn Mọi thứ (SAM) để phân đoạn hình ảnh bằng cách chạy suy luận với nhiều loại prompt như bounding box hoặc điểm. Sau đây là ví dụ sử dụng Python:

    from ultralytics import SAM
    
    # Tải model
    model = SAM("sam_b.pt")
    
    # Phân đoạn bằng prompt hộp giới hạn
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Phân đoạn bằng prompt điểm
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Phân đoạn bằng prompt nhiều điểm
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Phân đoạn bằng prompt nhiều điểm cho mỗi đối tượng
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Phân đoạn bằng prompt điểm âm.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    Ngoài ra, bạn có thể chạy suy luận bằng SAM qua giao diện dòng lệnh (CLI):

    yolo predict model=sam_b.pt source=path/to/image.jpg

    Để xem hướng dẫn sử dụng chi tiết hơn, hãy truy cập phần Phân đoạn.

  • So với các model YOLO, các biến thể SAM như SAM-b, MobileSAM và FastSAM-s thường lớn hơn và chậm hơn, nhưng có khả năng phân đoạn zero-shot độc đáo. Ví dụ, YOLO26n-seg nhỏ hơn 56 lần và nhanh hơn hơn 1650 lần so với model SAM-b gốc của Meta trên CPU. Vì vậy, các model YOLO lý tưởng cho những ứng dụng cần phân đoạn nhanh, gọn nhẹ và hiệu quả tính toán, trong khi các model SAM vượt trội ở các tác vụ phân đoạn linh hoạt, theo prompt và zero-shot.

  • SAM của Ultralytics có tính năng gán nhãn tự động, cho phép tạo bộ dữ liệu phân đoạn bằng model phát hiện được huấn luyện trước. Sau đây là ví dụ bằng Python:

    from ultralytics.data.annotator import auto_annotate
    
    auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

    Hàm này nhận đường dẫn đến hình ảnh của bạn cùng các đối số tùy chọn cho model phát hiện và model phân đoạn SAM được huấn luyện trước, cũng như thông số thiết bị và thư mục đầu ra. Để xem hướng dẫn đầy đủ, hãy tham khảo Gán nhãn tự động.

  • SAM được huấn luyện trên bộ dữ liệu SA-1B quy mô lớn, gồm hơn 1 tỷ mask trên 11 triệu hình ảnh. SA-1B là bộ dữ liệu phân đoạn lớn nhất cho đến nay, cung cấp dữ liệu huấn luyện chất lượng cao và đa dạng, giúp đảm bảo hiệu suất zero-shot ấn tượng trên nhiều tác vụ phân đoạn. Để biết thêm chi tiết, hãy truy cập phần Bộ dữ liệu.

Bình luận