Bỏ qua nội dung

Phân đoạn và theo dõi trường hợp sử dụng Ultralytics YOLO11 🚀

Phân đoạn phiên bản là gì?

Phân đoạn trường hợp YOLO11 Ultralytics liên quan đến việc xác định và phác thảo các đối tượng riêng lẻ trong một hình ảnh, cung cấp hiểu biết chi tiết về phân bố không gian. Không giống như phân đoạn ngữ nghĩa , nó dán nhãn duy nhất và mô tả chính xác từng đối tượng, rất quan trọng đối với các tác vụ như phát hiện đối tượng và hình ảnh y tế.

Có hai loại theo dõi phân đoạn trường hợp có sẵn trong Ultralytics bưu kiện:

  • Phân đoạn phiên bản bằng đối tượng lớp: Mỗi đối tượng lớp được gán một màu duy nhất để phân tách trực quan rõ ràng.

  • Phân đoạn phiên bản bằng các đường dẫn đối tượng: Mỗi đường dẫn được biểu thị bằng một màu riêng biệt, giúp dễ dàng nhận dạng và theo dõi.



Đồng hồ: Phân đoạn trường hợp với theo dõi đối tượng bằng cách sử dụng Ultralytics YOLO11

Mẫu

Phân đoạn trường hợp Phân đoạn trường hợp + Theo dõi đối tượng
Ultralytics Phân đoạn trường hợp Ultralytics Phân đoạn trường hợp với theo dõi đối tượng
Ultralytics Phân đoạn trường hợp 😍 Ultralytics Phân đoạn trường hợp với theo dõi đối tượng 🔥

Phân đoạn và theo dõi trường hợp

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolo11n-seg.pt")  # segmentation model
names = model.model.names
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    results = model.predict(im0)
    annotator = Annotator(im0, line_width=2)

    if results[0].masks is not None:
        clss = results[0].boxes.cls.cpu().tolist()
        masks = results[0].masks.xy
        for mask, cls in zip(masks, clss):
            color = colors(int(cls), True)
            txt_color = annotator.get_txt_color(color)
            annotator.seg_bbox(mask=mask, mask_color=color, label=names[int(cls)], txt_color=txt_color)

    out.write(im0)
    cv2.imshow("instance-segmentation", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()
import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolo11n-seg.pt")  # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        print("Video frame is empty or video processing has been successfully completed.")
        break

    annotator = Annotator(im0, line_width=2)

    results = model.track(im0, persist=True)

    if results[0].boxes.id is not None and results[0].masks is not None:
        masks = results[0].masks.xy
        track_ids = results[0].boxes.id.int().cpu().tolist()

        for mask, track_id in zip(masks, track_ids):
            color = colors(int(track_id), True)
            txt_color = annotator.get_txt_color(color)
            annotator.seg_bbox(mask=mask, mask_color=color, label=str(track_id), txt_color=txt_color)

    out.write(im0)
    cv2.imshow("instance-segmentation-object-tracking", im0)

    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

seg_bbox Lập luận

Tên Kiểu Mặc định Sự miêu tả
mask array None Tọa độ mặt nạ phân đoạn
mask_color RGB (255, 0, 255) Màu mặt nạ cho mỗi hộp phân đoạn
label str None Nhãn cho đối tượng phân đoạn
txt_color RGB None Màu nhãn cho đối tượng được phân đoạn và theo dõi

Ghi chú

Nếu có bất kỳ thắc mắc nào, bạn có thể thoải mái đăng câu hỏi của mình trong Phần vấn đề của Ultralytics hoặc phần thảo luận bên dưới.

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

Làm thế nào để tôi thực hiện phân đoạn phiên bản bằng cách sử dụng Ultralytics YOLO11 ?

Để thực hiện phân đoạn trường hợp bằng cách sử dụng Ultralytics YOLO11 , khởi tạo YOLO mô hình với phiên bản phân đoạn của YOLO11 và xử lý khung hình video thông qua nó. Sau đây là một ví dụ mã đơn giản:

Ví dụ

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolo11n-seg.pt")  # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        break

    results = model.predict(im0)
    annotator = Annotator(im0, line_width=2)

    if results[0].masks is not None:
        clss = results[0].boxes.cls.cpu().tolist()
        masks = results[0].masks.xy
        for mask, cls in zip(masks, clss):
            annotator.seg_bbox(mask=mask, mask_color=colors(int(cls), True), det_label=model.model.names[int(cls)])

    out.write(im0)
    cv2.imshow("instance-segmentation", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

Tìm hiểu thêm về phân đoạn phiên bản trong hướng dẫn Ultralytics YOLO11 .

Sự khác biệt giữa phân đoạn thể hiện và theo dõi đối tượng trong Ultralytics YOLO11 ?

Phân đoạn thể hiện xác định và phác thảo các đối tượng riêng lẻ trong một hình ảnh, cung cấp cho mỗi đối tượng một nhãn và mặt nạ duy nhất. Theo dõi đối tượng mở rộng điều này bằng cách gán nhãn nhất quán cho các đối tượng trên các khung hình video, tạo điều kiện theo dõi liên tục các đối tượng giống nhau theo thời gian. Tìm hiểu thêm về các điểm khác biệt trong tài liệu Ultralytics YOLO11 .

Tại sao tôi nên sử dụng Ultralytics YOLO11 ví dụ như phân đoạn và theo dõi trên các mô hình khác như Mask R-CNN hoặc Faster R-CNN?

Ultralytics YOLO11 cung cấp hiệu suất thời gian thực, độ chính xác vượt trội và dễ sử dụng so với các mô hình khác như Mask R-CNN hoặc Faster R-CNN. YOLO11 cung cấp sự tích hợp liền mạch với Ultralytics HUB, cho phép người dùng quản lý các mô hình, tập dữ liệu và đường ống đào tạo một cách hiệu quả. Khám phá thêm về các lợi ích của YOLO11 trong blog Ultralytics .

Làm thế nào tôi có thể thực hiện theo dõi đối tượng bằng cách sử dụng Ultralytics YOLO11 ?

Để thực hiện theo dõi đối tượng, hãy sử dụng model.track phương pháp và đảm bảo rằng ID của mỗi đối tượng được chỉ định nhất quán trên các khung hình. Dưới đây là một ví dụ đơn giản:

Ví dụ

import cv2

from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator, colors

model = YOLO("yolo11n-seg.pt")  # segmentation model
cap = cv2.VideoCapture("path/to/video/file.mp4")
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))

out = cv2.VideoWriter("instance-segmentation-object-tracking.avi", cv2.VideoWriter_fourcc(*"MJPG"), fps, (w, h))

while True:
    ret, im0 = cap.read()
    if not ret:
        break

    annotator = Annotator(im0, line_width=2)
    results = model.track(im0, persist=True)

    if results[0].boxes.id is not None and results[0].masks is not None:
        masks = results[0].masks.xy
        track_ids = results[0].boxes.id.int().cpu().tolist()

        for mask, track_id in zip(masks, track_ids):
            annotator.seg_bbox(mask=mask, mask_color=colors(track_id, True), track_label=str(track_id))

    out.write(im0)
    cv2.imshow("instance-segmentation-object-tracking", im0)
    if cv2.waitKey(1) & 0xFF == ord("q"):
        break

out.release()
cap.release()
cv2.destroyAllWindows()

Tìm hiểu thêm trong phần Phân đoạn và Theo dõi Trường hợp .

Có bất kỳ tập dữ liệu nào được cung cấp bởi Ultralytics thích hợp cho việc đào tạo YOLO11 các mô hình ví dụ như phân đoạn và theo dõi?

Đúng, Ultralytics cung cấp một số tập dữ liệu phù hợp để đào tạo YOLO11 mô hình, bao gồm phân đoạn và theo dõi tập dữ liệu. Ví dụ về tập dữ liệu, cấu trúc và hướng dẫn sử dụng có thể được tìm thấy trong tài liệu Ultralytics Datasets .

📅 Được tạo cách đây 11 tháng ✏️ Đã cập nhật cách đây 1 ngày

Bình luận