Bỏ qua nội dung

Phân đoạn bất kỳ mô hình nào ( 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 Segment Anything

Mô hình phân khúc bất kỳ, 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, mang lại tính linh hoạt vô song trong các tác vụ phân tích hình ảnh. SAM hình thành nên cốt lõi 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à tập dữ liệu mới để phân đoạn hình ảnh.

SAM Thiết kế tiên tiến của 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 kiến thức trước, một tính năng được gọi là chuyển giao không cần chụp. Được đào tạo trên tập 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 ấn tượng khi không có phát bắn nào, vượt qua các kết quả được giám sát đầy đủ trước đây trong nhiều trường hợp.

Hình ảnh mẫu của bộ dữ liệu Hình ảnh ví dụ về SA-1B. Hình ảnh tập dữ liệu phủ mặt nạ từ tập 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à 1,1B mặt nạ phân đoạn chất lượng cao. Các 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 đánh giá 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 để trực quan hóa (trung bình có khoảng 100 mặt nạ trên mỗi hình ảnh).

Các tính năng chính của mô hình Segment Anything ( SAM )

  • Nhiệm vụ phân đoạn có thể nhắc nhở: SAM được thiết kế với mục đích thực hiện nhiệm vụ phân đoạn có thể nhắc nhở, cho phép 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, chẳng hạn như các 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 Segment Anything 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ạ theo thời gian thực và nhận biết sự 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 đoạn 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 và 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 hơn về Mô hình Segment Anything và tập dữ liệu SA-1B, vui lòng truy cập trang web Segment Anything và xem bài nghiên cứu Segment Anything .

Các mô hình có sẵn, nhiệm 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 đào tạo trước cụ thể, 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ế độ vận hành 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ợ.

Kiểu mẫu Tạ đã được tập luyện trước Nhiệm vụ được hỗ trợ Suy luận Xác thực Đào tạo Xuất khẩu
SAM căn cứ sam _b.pt Phân đoạn trường hợp
SAM lớn sam _l.pt Phân đoạn trường hợp

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 có lời nhắc

Phân đoạn hình ảnh theo lời nhắc cho sẵn.

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 truyền 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ể thiết lập hình ảnh một lần và chạy lệnh suy luận nhiều lần mà không cần chạy trình 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ứ bằng các đối số 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 chú

Tất cả đã trở về 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 dễ dàng.

SAM so sánh vs YOLOv8

Ở đây chúng ta so sánh Meta nhỏ nhất SAM người mẫu, SAM -b, với Ultralytics mô hình phân đoạn nhỏ nhất, YOLOv8n -seg :

Người mẫu Kích cỡ
(MB)
Các tham số
(Nam)
Tốc độ ( CPU )
(cô/anh)
Siêu dữ liệu SAM -b 358 94.7 51096
MobileSAM 40.7 10.1 46122
FastSAM -s với YOLOv8 xương sống 23.7 11.8 115
Ultralytics YOLOv8n -phân đoạn 6,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ề kích thước và tốc độ của các mô hình theo cấp số nhân. Trong khi SAM cung cấp khả năng độc đáo cho 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 được thực hiện trên Macbook Apple M2 2023 có RAM 16GB. Để thực hiện lại 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)

Chú thích tự động: Đường dẫn nhanh đến các 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 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 cho số lượng lớn hình ảnh, bỏ qua nhu cầu dán nhãn thủ công tốn thời gian.

Tạo Bộ dữ liệu phân đoạn của bạn bằng cách sử dụng Mô hình phát hiện

Để tự động chú thích tập dữ liệu của bạn với Ultralytics khung, sử dụng auto_annotate chức năng như 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="sam_b.pt")
Lý lẽ Kiểu Sự miêu tả Mặc định
data str Đường dẫn đến thư mục chứa hình ảnh cần chú thích.
det_model str, không bắt buộc Đã được đào tạo trước YOLO mô hình phát hiện. Mặc định là 'yolo11x.pt'. 'yolo11x.pt'
sam_model str, không bắt buộc Đã được đào tạo trước SAM mô hình phân đoạn. Mặc định là ' sam _b.pt'. 'sam_b.pt'
device str, không bắt buộc Thiết bị để chạy các mô hình trên. Mặc định là một chuỗi rỗng ( CPU hoặc GPU , nếu có).
conf float, không bắt buộc Ngưỡng tin cậy cho mô hình phát hiện; mặc định là 0,25. 0.25
iou float, không bắt buộc Ngưỡ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
imgsz int, không bắt buộc Nhập kích thước thay đổi hình ảnh; mặc định là 640. 640
max_det int, không bắt buộc Giớ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
classes list, không bắt buộc Lọ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_dir str, Không có, tùy chọn Thư mục lưu kết quả có chú thích. Mặc định là thư mục 'nhãn' trong cùng thư mục với 'dữ liệu'. None

Các auto_annotate hàm này sẽ đư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 mô hình và thư mục đầu ra để lưu 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 các tập 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à Lời cảm ơn

Nếu bạn tìm thấy SAM hữu ích cho công việc nghiên cứu hoặc phát triển của bạn, vui lòng cân nhắc 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 .

CÂU HỎI THƯỜNG GẶP

Mô hình Segment Anything là gì ( SAM ) qua Ultralytics ?

Mô hình phân khúc bất kỳ ( SAM ) qua 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 có thể nhắc nhở. Nó tận dụng kiến trúc tiên tiến, bao gồm bộ mã hóa hình ảnh và nhắc nhở 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ừ nhiều 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 trên tập dữ liệu SA-1B mở rộng, SAM vượt trội về hiệu suất không cần chụp, thích ứng với các tác vụ và phân phối hình ảnh 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 Segment Anything ( SAM ) để phân đoạn hình ảnh?

Bạn có thể sử dụng Mô hình Phân đoạn Bất kỳ ( 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 giới hạn hoặc điểm. Đâ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ề mặt hiệu suất?

So với YOLOv8 , SAM các mô hình như SAM -ban nhạc FastSAM -s lớn hơn và chậm hơn nhưng cung cấp khả năng độc đáo để phân đoạn tự động. Ví dụ, 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, SAM Hiệu suất không bắn của nó làm cho nó cực kỳ 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 đây .

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

Ultralytics ' SAM cung cấp tính năng chú thích tự động cho phép tạo các tập dữ liệu phân đoạn bằng cách sử dụ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 sẽ đưa đườ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 của thiết bị và thư mục đầu ra. Để biết hướng dẫn đầy đủ, hãy xem Chú thích tự động .

Những tập dữ liệu nào được sử dụng để đào tạo Mô hình Phân đoạn Bất kỳ ( 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 1 tháng

Bình luận