YOLO Vision 2026:

Segment Anything Model (SAM)#

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

Đây là model SAM gốc từ Meta. Để có các tính năng cải tiến, hãy xem SAM 2 cho phân đoạn video hoặc SAM 3 cho Phân đoạn khái niệm có thể nhắc (Promptable Concept Segmentation) với các prompt mẫu bằng văn bản và hình ảnh.

How to use Segment Anything In Colab

Chào mừng bạn đến với biên giới của phân đoạn ảnh với Segment Anything Model, hay SAM. Model mang tính cách mạng này đã thay đổi cuộc chơi bằng cách giới thiệu tính năng phân đoạn ảnh có thể nhắc với hiệu suất thời gian thực, thiết lập các tiêu chuẩn mới trong lĩnh vực này.

Giới thiệu về SAM: Segment Anything Model#

Segment Anything Model, hay SAM, là một model phân đoạn ảnh tiên tiến cho phép phân đoạn theo lời nhắc (promptable segmentation), mang lại sự linh hoạt chưa từng có trong các tác vụ phân tích ảnh. SAM tạo thành trái tim 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à tập dữ liệu mới cho phân đoạn ả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 ảnh và tác vụ mới mà không cần kiến thức trước đó, một tính năng được gọi là zero-shot transfer. Được huấn luyện trên tập dữ liệu SA-1B rộng lớn, chứa hơn 1 tỷ mặt nạ trải rộng trên 11 triệu ả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 các kết quả có giám sát đầy đủ trước đó trong nhiều trường hợp.

Mẫu tập dữ liệu SA-1B với các mặt nạ phân đoạn tự động Ảnh ví dụ SA-1B. Ảnh tập dữ liệu được chồng các mặt nạ từ tập dữ liệu SA-1B mới ra mắt. SA-1B chứa 11 triệu ả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,1 tỷ mặt nạ phân đoạn chất lượng cao. Các mặt nạ này được gán nhãn hoàn toàn tự động bởi SAM, và được xác minh qua đánh giá của con người cũng như nhiều thí nghiệm, mang lại chất lượng và tính đa dạng cao. Ảnh được nhóm theo số lượng mặt nạ trên mỗi ảnh để trực quan hóa (có trung bình ∼100 mặt nạ cho mỗi ảnh).

Các tính năng chính của Segment Anything Model (SAM)#

  • Tác vụ phân đoạn có thể nhắc: SAM được thiết kế với tư duy về tác vụ phân đoạn có thể nhắc, cho phép nó tạo ra các mặt nạ phân đoạn hợp lệ từ bất kỳ lời nhắc nào được cung cấp, 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: Segment Anything Model sử dụng một bộ mã hóa hình ảnh mạnh mẽ, một bộ mã hóa lời nhắc và một bộ giải mã mặt nạ gọn nhẹ. Kiến trúc độc đáo này cho phép nhắc linh hoạt, tính toán mặt nạ thời gian thực và nhận diện sự mơ hồ trong các tác vụ phân đoạn.
  • Tập dữ liệu SA-1B: Được giới thiệu bởi dự án Segment Anything, tập dữ liệu SA-1B có hơn 1 tỷ mặt nạ trên 11 triệu hình ảnh. Là tập dữ liệu phân đoạn lớn nhất cho đến nay, nó cung cấp cho SAM một nguồn dữ liệu huấn luyện quy mô lớn và đa dạng.
  • Hiệu suất Zero-Shot: SAM hiển thị hiệu suất zero-shot nổi bật trên các tác vụ phân đoạn khác nhau, biến đây thành một công cụ sẵn sàng sử dụng cho các ứng dụng đa dạng với nhu cầu tối thiểu về kỹ thuật prompt.

Để có cái nhìn chi tiết về Segment Anything Model và tập dữ liệu SA-1B, vui lòng truy cập GitHub Segment Anything và xem bài báo nghiên cứu Segment Anything.

SAM trên nền tảng Ultralytics

SAM cung cấp năng lượng cho tính năng chú thích thông minh trên Ultralytics Platform, cho phép tạo mặt nạ thông minh dựa trên cú nhấp chuột để gắn nhãn tập dữ liệu nhanh chóng. Xem hướng dẫn chú thích để biết chi tiết.

Các model có sẵn, tác vụ được hỗ trợ và chế độ vận hành#

Bảng này trình bày các mô hình khả dụng cùng với trọng số huấn luyện sẵn cụ thể của chúng, các tác vụ mà chúng hỗ trợ và khả năng tương thích của chúng với các chế độ hoạt động khác nhau như Inference, Validation, TrainingExport, được biểu thị bằng biểu tượng cảm xúc ✅ cho các chế độ được hỗ trợ và ❌ cho các chế độ không được hỗ trợ.

Loại modelTrọng số PretrainedCác tác vụ được hỗ trợHuấn luyệnValidationSuy luậnXuất (Export)
SAM basesam_b.ptPhân đoạn Cá thể
SAM largesam_l.ptPhân đoạn Cá thể

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

Segment Anything Model có thể được sử dụng cho vô số tác vụ hạ nguồn vượt ra ngoài dữ liệu huấn luyện của nó. Điều này bao gồm phát hiện biên, tạo đề xuất đối tượng, phân đoạn thể hiện, và dự đoán văn bản thành mặt nạ sơ bộ. Với kỹ thuật prompt, SAM có thể nhanh chóng thích ứng với các tác vụ mới và phân phối dữ liệu theo cách zero-shot, thiết lập model này như một công cụ đa năng và mạnh mẽ cho mọi nhu cầu phân đoạn ảnh của bạn.

Ví dụ về dự đoán SAM#

Phân đoạn với các lời nhắc

Phân đoạn ảnh với các lời nhắc được cung cấp.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Run inference with single point
results = model(points=[900, 370], labels=[1])

# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Phân đoạn mọi thứ

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

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
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ỳ lời nhắc nào (bbox/điểm/mặt nạ).
Ví dụ về SAMPredictor

Bằng cách này, bạn có thể thiết lập hình ảnh một lần và chạy suy luận lời nhắc nhiều lần 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

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

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reset image
predictor.reset_image()

Phân đoạn mọi thứ với các đối số bổ sung.

from ultralytics.models.sam import Predictor as SAMPredictor

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

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)
Lưu ý

Tất cả các results trả về trong các ví dụ trên là các đối tượng Results cho phép truy cập dễ dàng vào các mặt nạ được dự đoán và ả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 Ultralytics bao gồm YOLO26n-seg:

Mô hìnhKích thước
(MB)
Tham số
(M)
Tốc độ (CPU)
(ms/im)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s với backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (nhỏ hơn 52.8x)3.4 (ít hơn 27.6x)24.8 (nhanh hơn 1682x)
Ultralytics YOLO11n-seg6.2 (nhỏ hơn 60.5x)2.9 (ít hơn 32.3x)24.3 (nhanh hơn 1716x)
Ultralytics YOLO26n-seg6.7 (nhỏ hơn 56.0x)2.7 (ít hơn 34.7x)25.2 (nhanh hơn 1655x)

So sánh này cho thấy sự khác biệt đáng kể về kích thước và tốc độ model giữa các biến thể SAM và các model phân đoạn YOLO. Trong khi SAM cung cấp các 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ả tính toán hơn đáng kể.

Tốc độ của SAM được đo bằng PyTorch, tốc độ của YOLO được đo bằng ONNX Runtime. Các thử nghiệm chạy trên Apple M4 Air 2025 với 16GB RAM sử dụng torch==2.10.0, ultralytics==8.4.31onnxruntime==1.24.4. Để tái tạo thử nghiệm này:

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

# Profile SAM-b, MobileSAM
for file in ["sam_b.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)

Tự động chú thích: Con đường nhanh chóng đến tập dữ liệu phân đoạn#

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

Tạo tập dữ liệu phân đoạn của bạn bằng model phát hiện#

Để tự động chú thích tập dữ liệu của bạn bằng framework Ultralytics, hãy sử dụng hàm auto_annotate 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="yolo26x.pt", sam_model="sam_b.pt")
Đối sốLoạiMặc địnhMô tả
datastrbắt buộcĐường dẫn đến thư mục chứa các hình ảnh mục tiêu để chú thích hoặc phân đoạn.
det_modelstr'yolo26x.pt'Đường dẫn model phát hiện YOLO cho phát hiện đối tượng ban đầu.
sam_modelstr'sam_b.pt'Đường dẫn model SAM cho phân đoạn (hỗ trợ trọng số 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 tin cậy của 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 chéo.
imgszint640Kí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_detint300Số lượng phát hiện tối đa trên mỗi hình ảnh để tối ưu bộ nhớ.
classeslist[int]NoneDanh sách các chỉ mục lớp cần phát hiện (ví dụ: [0, 1] cho người và xe đạp).
output_dirstrNoneThư mục lưu trữ cho các chú thích (mặc định: thư mục ngang hàng <data>_auto_annotate_labels).

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

Auto-annotation với các model đã được huấn luyện sẵn có thể giảm đáng kể thời gian và công sức cần thiết để tạo các tập dữ liệu segmentation 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à lập trình viên làm việc với các bộ sưu tập ảnh lớn, vì nó cho phép họ tập trung vào việc phát triển và đánh giá model thay vì gán nhãn thủ công.

Trích dẫn và Ghi nhận#

Nếu bạn thấy SAM hữu ích trong công việc nghiên cứu hoặc phát triển của mình, vui lòng cân nhắc trích dẫn bài báo của chúng tôi:

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 muốn bày tỏ lòng biết ơn tới Meta AI vì đã tạo và duy trì tài nguyên có giá trị này cho cộng đồng thị giác máy tính.

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

  • Segment Anything Model (SAM) bởi Ultralytics là một model phân đoạn ảnh mang tính cách mạng được thiết kế cho các tác vụ phân đoạn có thể nhắc. Model này tận dụng kiến trúc tiên tiến, bao gồm các bộ mã hóa hình ảnh và prompt kết hợp với bộ giải mã mặt nạ gọn nhẹ, để tạo ra các mặt nạ phân đoạn chất lượng cao từ các prompt khác nhau như tín hiệu không gian hoặc văn bản. Được huấn luyện trên tập dữ liệu SA-1B rộng lớn, SAM xuất sắc trong hiệu suất zero-shot, thích ứng với các phân phối ả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 Segment Anything Model (SAM) để thực hiện segmentation hình ảnh bằng cách chạy inference với nhiều prompt khác nhau như bounding box hoặc điểm. Dưới đây là ví dụ sử dụng Python:

    from ultralytics import SAM
    
    # Load a model
    model = SAM("sam_b.pt")
    
    # Segment with bounding box prompt
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Segment with points prompt
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Segment with multiple points prompt
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Segment with multiple points prompt per object
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Segment with negative points prompt.
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

    Ngoài ra, bạn có thể chạy inference với SAM trong giao diện dòng lệnh (CLI):

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

    Để biết thêm hướng dẫn sử dụng chi tiết, 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 cung cấp cá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. Điều này làm cho các model YOLO trở nên lý tưởng cho các ứng dụng đòi hỏi phân đoạn nhanh chóng, gọn nhẹ và hiệu quả về mặt tính toán, trong khi các model SAM xuất sắc trong các tác vụ phân đoạn linh hoạt, có thể nhắc và zero-shot.

  • SAM của Ultralytics cung cấp tính năng auto-annotation cho phép tạo tập dữ liệu segmentation bằng cách sử dụng một model detection đã được huấn luyện sẵn. Dưới đâ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 và các đối số tùy chọn cho các model phát hiện và phân đoạn SAM đã được huấn luyện trước, cùng với các thông số kỹ thuật về thiết bị và thư mục đầu ra. Để có hướng dẫn hoàn chỉnh, hãy xem Tự động chú thích.

  • SAM được huấn luyện trên tập dữ liệu SA-1B phong phú bao gồm hơn 1 tỷ mặt nạ trên 11 triệu hình ảnh. SA-1B là tập 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, đảm bảo hiệu suất zero-shot ấn tượng trong các tác vụ phân đoạn đa dạng. Để biết thêm chi tiết, hãy truy cập phần Tập dữ liệu.

Bình luận