Bỏ để qua phần nội dung

Mô hình phân khúc bất cứ thứ gì (SAM)

Chào mừng đến với ranh giới của phân đoạn hình ảnh với Mô hình phân đoạn bất kỳ hoặc SAM . Mô hình mang tính cách mạng 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 nhanh chóng 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: Mô hình phân khúc bất cứ thứ gì

Phân khúc bất cứ mô hình nào, hoặc SAM, là một mô hình phân đoạn hình ảnh tiên tiến cho phép phân đoạn nhanh chóng, cung cấp tính linh hoạt vô song trong các tác vụ phân tích hình ảnh. SAM tạo thành trung tâm của sáng kiến Segment Anything, một dự án đột phá giới thiệu một mô hình, nhiệm vụ và bộ dữ liệu mới để phân đoạn hình ảnh.

SAMThiết kế tiên tiến của nó cho phép nó 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 biết trước, một tính năng được gọi là zero-shot transfer. Được đào tạo về bộ dữ liệu SA-1B mở rộng, chứa hơn 1 tỷ mặt nạ trải rộng trên 11 triệu hình ảnh được quản lý cẩn thận, SAM đã thể hiện hiệu suất zero-shot ấn tượng, vượt qua kết quả giám sát đầy đủ trước đó trong nhiều trường hợp.

Hình ảnh mẫu tập dữ liệu SA-1B Hình ảnh ví dụ. Hình ảnh tập dữ liệu phủ lên mặt nạ từ bộ dữ liệu SA-1B mới được giới thiệu. SA-1B chứa 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ư và mặt nạ phân đoạn chất lượng cao 1.1B. Những mặt nạ này được chú thích hoàn toàn tự động bởi SAM, và được xác minh bởi xếp hạng của con người và nhiều thí nghiệm, có chất lượng cao và đa dạng. Hình ảnh được nhóm theo số lượng mặt nạ trên mỗi hình ảnh để hiển thị (trung bình có ∼100 mặt nạ trên mỗi hình ảnh).

Các tính năng chính của mô hình phân khúc bất cứ điều gì (SAM)

  • Nhiệm vụ phân đoạn có thể nhắc nhở: SAM được thiết kế với một nhiệm vụ phân đoạn có thể nhắc nhở trong tâm trí, cho phép nó tạo mặt nạ phân đoạn hợp lệ từ bất kỳ lời nhắc nhất định nào, chẳng hạn như manh mối không gian hoặc văn bản xác định một đối tượng.
  • Kiến trúc nâng cao: Mô hình phân đoạn bất cứ điều gì sử dụng bộ mã hóa hình ảnh mạnh mẽ, bộ mã hóa nhắc nhở và bộ giải mã mặt nạ nhẹ. Kiến trúc độc đáo này cho phép nhắc nhở linh hoạt, tính toán mặt nạ thời gian thực và nhận thức 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ỷ mặt nạ trên 11 triệu hình ảnh. Là bộ dữ liệu phân khúc lớn nhất cho đến nay, nó cung cấp SAM với nguồn dữ liệu đào tạo đa dạng, quy mô lớn.
  • Hiệu suất Zero-Shot: SAM thể hiện hiệu suất vượt trội khi thực hiện nhiều tác vụ phân đoạn khác nhau, khiến nó trở thành công cụ sẵn sàng sử dụng cho nhiều ứng dụng khác nhau với nhu cầu tối thiểu về kỹ thuật nhanh chóng .

Để có cái nhìn sâu sắc về Mô hình phân đoạn bất cứ điều gì và bộ dữ liệu SA-1B, vui lòng truy cập trang web Phân đoạn bất cứ điều gì và xem tài liệu nghiên cứu Phân đoạn bất cứ điều gì.

Các kiểu máy có sẵn, tác vụ được hỗ trợ và chế độ hoạt động

Bảng này trình bày các mô hình có sẵn với trọng số cụ thể được đào tạo trước, 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ư Suy luận, Xác thực, Đào tạoXuất, được biểu thị bằng ✅ biểu tượng cảm xúc cho các chế độ được hỗ trợ và ❌ biểu tượng cảm xúc cho các chế độ không được hỗ trợ.

Loại mô hìnhTrọng lượng được đào tạo trướcCác tác vụ được hỗ trợSuy luậnXác nhậnĐào tạoXuất khẩu
SAM căn cứsam_b.ptPhân đoạn phiên bản
SAM lớnsam_l.ptPhân đoạn phiên bản

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 Segment Anything có thể được sử dụng cho nhiều tác vụ hạ nguồn vượt ra ngoài dữ liệu đào tạo của nó. Điều này bao gồm phát hiện cạnh, tạo đề xuất đối tượng, phân đoạn thể hiện và dự đoán sơ bộ từ văn bản đến mặt nạ. Với kỹ thuật nhanh chóng, 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 một cách dễ dàng, trở thành công cụ đa năng và mạnh mẽ đáp ứng mọi nhu cầu phân đoạn hình ảnh của bạn.

SAM Ví dụ dự đoán

Phân đoạn bằng lời nhắc

Hình ảnh phân đoạn với lời nhắc nhất định.

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")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • Logic ở đây là phân đoạn toàn bộ hình ảnh nếu bạn không vượt qua bất kỳ lời nhắc nào (hộp / điểm / mặt nạ).

Ví dụ về SAMPredictor

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

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(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 arg bổ sung.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(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)

Ghi

Tất cả những gì được trả lại results Trong các ví dụ trên là Kết quả đối tượng cho phép truy cập mặt nạ dự đoán và hình ảnh nguồn một cách dễ dàng.

SAM So sánh với YOLOv8

Ở đây chúng tôi so sánh nhỏ nhất của Meta SAM mẫu SAM-b, với Ultralytics mô hình phân khúc nhỏ nhất, YOLOv8n-Seg:

MẫuKích cỡ
(MB)
Các tham số
(Nam)
Tốc độ (CPU)
(cô/anh)
Siêu dữ liệu SAM -b35894.751096
MobileSAM40.710.146122
FastSAM-s với YOLOv8 xương sống23.711.8115
Ultralytics YOLOv8n-Seg6,7 (nhỏ hơn 53,4 lần)3.4 (giảm 27,9 lần)59 (nhanh hơn 866 lần)

So sánh này cho thấy sự khác biệt về thứ tự cường độ trong kích thước mô hình và tốc độ giữa các mô hình. Trong khi đó: SAM Trình bày các khả năng độc đáo để phân đoạn tự động, nó không phải là đối thủ cạnh tranh trực tiếp với YOLOv8 mô hình phân khúc, nhỏ hơn, nhanh hơn và hiệu quả hơn.

Các thử nghiệm chạy trên Macbook Apple M2 2023 với RAM 16GB. Để 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 YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model(ASSETS)

Tự động chú thích: Đường dẫn nhanh đến bộ 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 mô hình phát hiện được đào tạo trước. Tính năng này cho phép chú thích nhanh chóng và chính xác một số lượng lớn hình ảnh, bỏ qua nhu cầu ghi 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 mô hình phát hiện

Để tự động chú thích tập dữ liệu của bạn bằng Ultralytics framework, sử dụng auto_annotate Chức năng như hình dưới đây:

Ví dụ

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Lý lẽKiểuSự miêu tảMặc định
datastrĐường dẫn đến thư mục chứa hình ảnh cần chú thích.
det_modelstrTùy chọnĐã được đào tạo trước YOLO mô hình phát hiện. Mặc định là 'yolo11x.pt'.'yolo11x.pt'
sam_modelstrTùy chọnĐào tạo trước SAM mô hình phân khúc. Mặc định là 'sam_b.pt'.'sam_b.pt'
devicestrTùy chọnThiết bị để chạy các mô hình trên. Mặc định là một chuỗi trống (CPU hoặc GPU, nếu có).
conffloatTùy chọnNgưỡng tin cậy cho mô hình phát hiện; mặc định là 0,25.0.25
ioufloatTùy chọnNgưỡng IoU để lọc các hộp chồng lấn trong kết quả phát hiện; mặc định là 0,45.0.45
imgszintTùy chọnNhập kích thước thay đổi hình ảnh; mặc định là 640.640
max_detintTùy chọnGiới hạn số lần phát hiện trên mỗi hình ảnh để kiểm soát đầu ra trong các cảnh dày đặc.300
classeslistTùy chọnLọc các dự đoán theo ID lớp đã chỉ định, chỉ trả về các phát hiện có liên quan.None
output_dirstr, Không có, tùy chọnThư mục để lưu các kết quả được chú thích. Mặc định là thư mục 'labels' trong cùng thư mục với 'data'.None

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

Chú thích tự động với các mô hình được đào tạo trước có thể cắt 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 có lợi cho các nhà nghiên cứu và nhà phát triển xử lý các bộ sưu tập hình ảnh lớn, vì nó cho phép họ tập trung vào phát triển và đánh giá mô hình thay vì chú thích thủ công.

Trích dẫn và xác nhận

Nếu bạn tìm thấy SAM Hữu ích trong công việc 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 của chúng tôi:

@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 ra và duy trì nguồn tài nguyên giá trị này cho cộng đồng thị giác máy tính .

FAQ

Mô hình phân đoạn bất cứ điều gì là gì (SAM) bởi Ultralytics?

Mô hình phân khúc bất cứ điều gì (SAM) bởi Ultralytics là một mô hình phân đoạn hình ảnh mang tính cách mạng được thiết kế cho các tác vụ phân đoạn nhanh chóng. Nó tận dụng kiến trúc tiên tiến, bao gồm bộ mã hóa hình ảnh và lời nhắc kết hợp với bộ giải mã mặt nạ nhẹ, để tạo mặt nạ phân đoạn chất lượng cao từ các lời nhắc khác nhau như tín hiệu không gian hoặc văn bản. Được đào tạo về bộ dữ liệu SA-1B mở rộng, SAM Vượt trội về 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. Tìm hiểu thêm tại đây.

Làm thế nào tôi có thể sử dụng mô hình phân đoạn bất cứ điều gì (SAM) để phân đoạn hình ảnh?

Bạn có thể sử dụng Segment Anything Model (SAM) để phân đoạn hình ảnh bằng cách chạy suy luận với nhiều lời nhắc khác nhau như hộp hoặc điểm giới hạn. Dưới đây là một 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 suy luận 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 hướng dẫn sử dụng chi tiết hơn, hãy truy cập phần Phân đoạn.

Làm thế nào để SAM và YOLOv8 So sánh về hiệu suất?

So với YOLOv8, SAM Các mô hình như SAM-b và FastSAM-s lớn hơn và chậm hơn nhưng cung cấp các khả năng độc đáo để phân đoạn tự động. Chẳng hạn Ultralytics YOLOv8n-SEG nhỏ hơn 53,4 lần và nhanh hơn 866 lần so với SAM-b. Tuy nhiên SAMHiệu suất zero-shot của nó làm cho nó rất linh hoạt và hiệu quả trong các nhiệm vụ đa dạng, chưa được đào tạo. Tìm hiểu thêm về so sánh hiệu suất giữa SAM và YOLOv8 tại đây.

Làm cách nào để tự động chú thích tập dữ liệu của tôi bằng cách sử dụng SAM?

Ultralytics' SAM Cung cấp tính năng tự động chú thích cho phép tạo bộ dữ liệu phân đoạn bằng mô hình phát hiện được đào tạo trước. Đây là một ví dụ trong Python:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")

Hàm này đi đường dẫn đến hình ảnh của bạn và các đối số tùy chọn để phát hiện được đào tạo trước và SAM Mô hình phân đoạn, cùng với thông số kỹ thuật thư mục đầu ra và thiết bị. Để có hướng dẫn đầy đủ, hãy xem Chú thích tự động.

Những bộ dữ liệu nào được sử dụng để đào tạo Mô hình phân đoạn bất cứ điều gì (SAM)?

SAM được đào tạo trên tập dữ liệu SA-1B mở rộng 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 đào tạo 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 khác nhau. Để biết thêm chi tiết, hãy truy cập phần Tập dữ liệu .

📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 16 ngày

Ý kiến