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

Dự đoán mô hình với Ultralytics YOLO

Ultralytics YOLO Hệ sinh thái và tích hợp

Giới thiệu

Trong thế giới học máy và thị giác máy tính, quá trình hiểu ý nghĩa của dữ liệu trực quan được gọi là 'suy luận' hoặc 'dự đoán'. Ultralytics YOLOv8 Cung cấp một tính năng mạnh mẽ được gọi là Chế độ dự đoán được thiết kế riêng cho hiệu suất cao, suy luận theo thời gian thực trên nhiều nguồn dữ liệu.



Xem: Cách trích xuất kết quả đầu ra từ Ultralytics YOLOv8 Mô hình cho các dự án tùy chỉnh.

Ứng dụng trong thế giới thực

Sản xuất Thể thao An toàn
Phát hiện phụ tùng xe Phát hiện cầu thủ bóng đá Phát hiện ngã người
Phát hiện phụ tùng xe Phát hiện cầu thủ bóng đá Phát hiện ngã người

Tại sao sử dụng Ultralytics YOLO cho suy luận?

Đây là lý do tại sao bạn nên xem xét YOLOv8Chế độ dự đoán cho các nhu cầu suy luận khác nhau của bạn:

  • Linh hoạt: Có khả năng suy luận về hình ảnh, video và thậm chí cả luồng trực tiếp.
  • Hiệu năng: Được thiết kế để xử lý thời gian thực, tốc độ cao mà không làm giảm độ chính xác.
  • Dễ sử dụng: Trực quan Python và CLI giao diện để triển khai và thử nghiệm nhanh chóng.
  • Khả năng tùy biến cao: Các cài đặt và thông số khác nhau để điều chỉnh hành vi suy luận của mô hình theo yêu cầu cụ thể của bạn.

Các tính năng chính của Chế độ dự đoán

YOLOv8Chế độ dự đoán của Predict được thiết kế mạnh mẽ và linh hoạt, bao gồm:

  • Khả năng tương thích nhiều nguồn dữ liệu: Cho dù dữ liệu của bạn ở dạng hình ảnh riêng lẻ, bộ sưu tập hình ảnh, tệp video hay luồng video thời gian thực, chế độ dự đoán sẽ giúp bạn.
  • Chế độ phát trực tuyến: Sử dụng tính năng phát trực tuyến để tạo trình tạo bộ nhớ hiệu quả Results Đối tượng. Bật tùy chọn này bằng cách cài đặt stream=True trong phương thức gọi của người dự đoán.
  • Xử lý hàng loạt: Khả năng xử lý nhiều hình ảnh hoặc khung hình video trong một đợt duy nhất, giúp tăng tốc hơn nữa thời gian suy luận.
  • Tích hợp thân thiện: Dễ dàng tích hợp với các đường ống dữ liệu hiện có và các thành phần phần mềm khác, nhờ API linh hoạt.

Ultralytics YOLO Các mô hình trả về một trong hai Python Danh sách Results đối tượng hoặc bộ nhớ hiệu quả Python Máy phát điện của Results Đối tượng khi stream=True được chuyển đến mô hình trong quá trình suy luận:

Dự đoán

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(["im1.jpg", "im2.jpg"])  # return a list of Results objects

# Process results list
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk
from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(["im1.jpg", "im2.jpg"], stream=True)  # return a generator of Results objects

# Process results generator
for result in results:
    boxes = result.boxes  # Boxes object for bounding box outputs
    masks = result.masks  # Masks object for segmentation masks outputs
    keypoints = result.keypoints  # Keypoints object for pose outputs
    probs = result.probs  # Probs object for classification outputs
    obb = result.obb  # Oriented boxes object for OBB outputs
    result.show()  # display to screen
    result.save(filename="result.jpg")  # save to disk

Nguồn suy luận

YOLOv8 có thể xử lý các loại nguồn đầu vào khác nhau để suy luận, như thể hiện trong bảng dưới đây. Các nguồn bao gồm hình ảnh tĩnh, luồng video và các định dạng dữ liệu khác nhau. Bảng cũng cho biết liệu mỗi nguồn có thể được sử dụng trong chế độ phát trực tuyến với đối số hay không stream=True ✅ Chế độ phát trực tuyến có lợi cho việc xử lý video hoặc luồng trực tiếp vì nó tạo ra một trình tạo kết quả thay vì tải tất cả các khung hình vào bộ nhớ.

Mẹo

Dùng stream=True để xử lý video dài hoặc bộ dữ liệu lớn để quản lý bộ nhớ hiệu quả. Khi stream=False, kết quả cho tất cả các khung hoặc điểm dữ liệu được lưu trữ trong bộ nhớ, điều này có thể nhanh chóng cộng lại và gây ra lỗi hết bộ nhớ cho các đầu vào lớn. Ngược lại, stream=True sử dụng một máy phát điện, chỉ giữ kết quả của khung hoặc điểm dữ liệu hiện tại trong bộ nhớ, giảm đáng kể mức tiêu thụ bộ nhớ và ngăn ngừa các vấn đề hết bộ nhớ.

Nguồn Lý lẽ Kiểu Ghi chú
ảnh 'image.jpg' str hoặc Path Tệp hình ảnh đơn.
ĐỊA CHỈ 'https://ultralytics.com/images/bus.jpg' str URL đến hình ảnh.
Ảnh chụp màn hình 'screen' str Chụp ảnh màn hình.
PIL Image.open('im.jpg') PIL.Image Định dạng HWC với các kênh RGB.
Mở CV cv2.imread('im.jpg') np.ndarray Định dạng HWC với các kênh BGR uint8 (0-255).
tê liệt np.zeros((640,1280,3)) np.ndarray Định dạng HWC với các kênh BGR uint8 (0-255).
torch torch.zeros(16,3,320,640) torch.Tensor Định dạng BCHW với các kênh RGB float32 (0.0-1.0).
CSV 'sources.csv' str hoặc Path Tệp CSV chứa đường dẫn đến hình ảnh, video hoặc thư mục.
Video ✅ 'video.mp4' str hoặc Path Tệp video ở các định dạng như MP4, AVI, v.v.
thư mục ✅ 'path/' str hoặc Path Đường dẫn đến thư mục chứa hình ảnh hoặc video.
quả ✅ cầu 'path/*.jpg' str Mẫu hình cầu để khớp với nhiều tệp. Sử dụng * nhân vật như một ký tự đại diện.
YouTube ✅ 'https://youtu.be/LNwODJXcvt4' str URL đến video YouTube.
dòng ✅ 'rtsp://example.com/media.mp4' str URL cho các giao thức phát trực tuyến như RTSP, RTMP, TCP hoặc địa chỉ IP.
Đa luồng ✅ 'list.streams' str hoặc Path *.streams tệp văn bản có một URL luồng trên mỗi hàng, tức là 8 luồng sẽ chạy ở kích thước hàng loạt 8.

Dưới đây là các ví dụ về mã để sử dụng từng loại nguồn:

Nguồn dự đoán

Chạy suy luận trên tệp hình ảnh.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to the image file
source = "path/to/image.jpg"

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên nội dung màn hình hiện tại dưới dạng ảnh chụp màn hình.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define current screenshot as source
source = "screen"

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên hình ảnh hoặc video được lưu trữ từ xa qua URL.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define remote image or video URL
source = "https://ultralytics.com/images/bus.jpg"

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên hình ảnh được mở bằng Python Thư viện hình ảnh (PIL).

from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Open an image using PIL
source = Image.open("path/to/image.jpg")

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên một hình ảnh được đọc bằng OpenCV.

import cv2

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Read an image using OpenCV
source = cv2.imread("path/to/image.jpg")

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên một hình ảnh được biểu diễn dưới dạng mảng numpy.

import numpy as np

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype="uint8")

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên một hình ảnh được biểu diễn dưới dạng một PyTorch tensor.

import torch

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên tập hợp hình ảnh, URL, video và thư mục được liệt kê trong tệp CSV.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define a path to a CSV file with images, URLs, videos and directories
source = "path/to/file.csv"

# Run inference on the source
results = model(source)  # list of Results objects

Chạy suy luận trên tệp video. Bằng cách sử dụng stream=True, bạn có thể tạo một trình tạo các đối tượng Kết quả để giảm mức sử dụng bộ nhớ.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to video file
source = "path/to/video.mp4"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Chạy suy luận trên tất cả hình ảnh và video trong một thư mục. Để cũng chụp ảnh và quay video trong các thư mục con, hãy sử dụng mẫu hình cầu, tức là path/to/dir/**/*.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to directory containing images and videos for inference
source = "path/to/dir"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Chạy suy luận trên tất cả các hình ảnh và video phù hợp với biểu thức hình cầu với * Ký tự.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define a glob search for all JPG files in a directory
source = "path/to/dir/*.jpg"

# OR define a recursive glob search for all JPG files including subdirectories
source = "path/to/dir/**/*.jpg"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Chạy suy luận trên video YouTube. Bằng cách sử dụng stream=True, bạn có thể tạo một trình tạo các đối tượng Kết quả để giảm mức sử dụng bộ nhớ cho các video dài.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define source as YouTube video URL
source = "https://youtu.be/LNwODJXcvt4"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Chạy suy luận trên các nguồn phát trực tuyến từ xa bằng giao thức địa chỉ RTSP, RTMP, TCP và IP. Nếu nhiều luồng được cung cấp trong một *.streams Tệp văn bản sau đó suy luận hàng loạt sẽ chạy, tức là 8 luồng sẽ chạy ở kích thước hàng loạt 8, nếu không các luồng đơn sẽ chạy ở kích thước lô 1.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Single stream with batch-size 1 inference
source = "rtsp://example.com/media.mp4"  # RTSP, RTMP, TCP or IP streaming address

# Multiple streams with batched inference (i.e. batch-size 8 for 8 streams)
source = "path/to/list.streams"  # *.streams text file with one streaming address per row

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Lập luận suy luận

model.predict() Chấp nhận nhiều đối số có thể được truyền tại thời điểm suy luận để ghi đè các giá trị mặc định:

Ví dụ

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on 'bus.jpg' with arguments
model.predict("bus.jpg", save=True, imgsz=320, conf=0.5)

Lập luận suy luận:

Lý lẽ Kiểu Mặc định Sự miêu tả
source str 'ultralytics/assets' Chỉ định nguồn dữ liệu để suy luận. Có thể là đường dẫn hình ảnh, tệp video, thư mục, URL hoặc ID thiết bị cho nguồn cấp dữ liệu trực tiếp. Hỗ trợ nhiều định dạng và nguồn, cho phép ứng dụng linh hoạt trên các loại đầu vào khác nhau.
conf float 0.25 Đặt ngưỡng tin cậy tối thiểu để phát hiện. Các đối tượng được phát hiện với độ tin cậy dưới ngưỡng này sẽ bị bỏ qua. Điều chỉnh giá trị này có thể giúp giảm dương tính giả.
iou float 0.7 Ngưỡng giao nhau trên công đoàn (IoU) cho triệt tiêu không tối đa (NMS). Giá trị thấp hơn dẫn đến ít phát hiện hơn bằng cách loại bỏ các hộp chồng chéo, hữu ích để giảm trùng lặp.
imgsz int or tuple 640 Xác định kích thước hình ảnh để suy luận. Có thể là một số nguyên duy nhất 640 để thay đổi kích thước hình vuông hoặc bộ (chiều cao, chiều rộng). Kích thước phù hợp có thể cải thiện độ chính xác phát hiện và tốc độ xử lý.
half bool False Cho phép suy luận nửa chính xác (FP16), có thể tăng tốc độ suy luận mô hình trên các GPU được hỗ trợ với tác động tối thiểu đến độ chính xác.
device str None Chỉ định thiết bị để suy luận (ví dụ: cpu, cuda:0 hoặc 0). Cho phép người dùng lựa chọn giữa CPU, GPU cụ thể hoặc các thiết bị điện toán khác để thực thi mô hình.
max_det int 300 Số lần phát hiện tối đa được phép cho mỗi hình ảnh. Giới hạn tổng số đối tượng mà mô hình có thể phát hiện trong một suy luận duy nhất, ngăn chặn đầu ra quá mức trong các cảnh dày đặc.
vid_stride int 1 Sải chân khung hình cho đầu vào video. Cho phép bỏ qua các khung hình trong video để tăng tốc độ xử lý với chi phí phân giải tạm thời. Giá trị 1 xử lý mọi khung, giá trị cao hơn bỏ qua khung.
stream_buffer bool False Xác định xem tất cả các khung hình có nên được lưu vào bộ đệm khi xử lý luồng video hay không (True), hoặc nếu mô hình sẽ trả về khung hình gần đây nhất (False). Hữu ích cho các ứng dụng thời gian thực.
visualize bool False Kích hoạt trực quan hóa các tính năng của mô hình trong quá trình suy luận, cung cấp thông tin chi tiết về những gì mô hình đang "nhìn thấy". Hữu ích cho việc gỡ lỗi và giải thích mô hình.
augment bool False Cho phép tăng thời gian kiểm tra (TTA) cho các dự đoán, có khả năng cải thiện độ mạnh phát hiện với chi phí là tốc độ suy luận.
agnostic_nms bool False Cho phép ngăn chặn không tối đa bất khả tri lớp (NMS), kết hợp các hộp chồng chéo của các lớp khác nhau. Hữu ích trong các tình huống phát hiện nhiều lớp trong đó sự chồng chéo lớp là phổ biến.
classes list[int] None Lọc các dự đoán cho một tập hợp ID lớp. Chỉ những phát hiện thuộc các lớp được chỉ định mới được trả về. Hữu ích để tập trung vào các đối tượng có liên quan trong các nhiệm vụ phát hiện nhiều lớp.
retina_masks bool False Sử dụng mặt nạ phân đoạn có độ phân giải cao nếu có sẵn trong mô hình. Điều này có thể nâng cao chất lượng mặt nạ cho các nhiệm vụ phân đoạn, cung cấp chi tiết tốt hơn.
embed list[int] None Chỉ định các lớp để trích xuất các vectơ tính năng hoặc nhúng. Hữu ích cho các tác vụ xuôi dòng như phân cụm hoặc tìm kiếm tương tự.

Đối số trực quan hóa:

Lý lẽ Kiểu Mặc định Sự miêu tả
show bool False Nếu True, hiển thị hình ảnh hoặc video có chú thích trong cửa sổ. Hữu ích cho phản hồi trực quan ngay lập tức trong quá trình phát triển hoặc thử nghiệm.
save bool False Cho phép lưu hình ảnh hoặc video có chú thích vào tệp. Hữu ích cho tài liệu, phân tích thêm hoặc chia sẻ kết quả.
save_frames bool False Khi xử lý video, hãy lưu các khung hình riêng lẻ dưới dạng hình ảnh. Hữu ích để trích xuất các khung cụ thể hoặc để phân tích chi tiết từng khung hình.
save_txt bool False Lưu kết quả phát hiện trong tệp văn bản, theo định dạng [class] [x_center] [y_center] [width] [height] [confidence]. Hữu ích cho việc tích hợp với các công cụ phân tích khác.
save_conf bool False Bao gồm điểm tin cậy trong các tệp văn bản đã lưu. Tăng cường chi tiết có sẵn để xử lý hậu kỳ và phân tích.
save_crop bool False Lưu hình ảnh đã cắt của các phát hiện. Hữu ích cho việc tăng cường tập dữ liệu, phân tích hoặc tạo bộ dữ liệu tập trung cho các đối tượng cụ thể.
show_labels bool True Hiển thị nhãn cho mỗi phát hiện trong đầu ra hình ảnh. Cung cấp sự hiểu biết ngay lập tức về các đối tượng được phát hiện.
show_conf bool True Hiển thị điểm tin cậy cho mỗi phát hiện cùng với nhãn. Cung cấp cái nhìn sâu sắc về sự chắc chắn của mô hình cho mỗi lần phát hiện.
show_boxes bool True Vẽ các hộp giới hạn xung quanh các đối tượng được phát hiện. Cần thiết cho việc nhận dạng trực quan và vị trí của các đối tượng trong hình ảnh hoặc khung video.
line_width None or int None Chỉ định chiều rộng đường của các hộp giới hạn. Nếu None, chiều rộng dòng được tự động điều chỉnh dựa trên kích thước hình ảnh. Cung cấp tùy chỉnh trực quan cho rõ ràng.

Định dạng hình ảnh và video

YOLOv8 Hỗ trợ các định dạng hình ảnh và video khác nhau, như được chỉ định trong ultralytics/dữ liệu/utils.py. Xem các bảng bên dưới để biết hậu tố hợp lệ và ví dụ về các lệnh dự đoán.

Hình ảnh

Bảng dưới đây chứa hợp lệ Ultralytics định dạng hình ảnh.

Hậu tố hình ảnh Ví dụ về lệnh dự đoán Tham khảo
.bmp yolo predict source=image.bmp Định dạng tệp Microsoft BMP
.dng yolo predict source=image.dng Adobe DNG
.jpeg yolo predict source=image.jpeg JPEG
.jpg yolo predict source=image.jpg JPEG
.mpo yolo predict source=image.mpo Đối tượng đa hình ảnh
.png yolo predict source=image.png Đồ họa mạng di động
.tif yolo predict source=image.tif Định dạng tệp hình ảnh thẻ
.tiff yolo predict source=image.tiff Định dạng tệp hình ảnh thẻ
.webp yolo predict source=image.webp WebP
.pfm yolo predict source=image.pfm FloatMap di động

Video

Bảng dưới đây chứa hợp lệ Ultralytics định dạng video.

Hậu tố video Ví dụ về lệnh dự đoán Tham khảo
.asf yolo predict source=video.asf Định dạng hệ thống nâng cao
.avi yolo predict source=video.avi Xen kẽ video âm thanh
.gif yolo predict source=video.gif Định dạng trao đổi đồ họa
.m4v yolo predict source=video.m4v MPEG-4 Phần 14
.mkv yolo predict source=video.mkv Matroska
.mov yolo predict source=video.mov Định dạng tệp QuickTime
.mp4 yolo predict source=video.mp4 MPEG-4 Part 14 – Wikipedia tiếng Việt
.mpeg yolo predict source=video.mpeg MPEG-1 Phần 2
.mpg yolo predict source=video.mpg MPEG-1 Phần 2
.ts yolo predict source=video.ts Luồng truyền tải MPEG
.wmv yolo predict source=video.wmv Windows Media Video
.webm yolo predict source=video.webm Dự án WebM

Làm việc với Kết quả

Tất cả Ultralytics predict() Các cuộc gọi sẽ trả về một danh sách Results Đối tượng:

Kết quả

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on an image
results = model("bus.jpg")  # list of 1 Results object
results = model(["bus.jpg", "zidane.jpg"])  # list of 2 Results objects

Results Các đối tượng có các thuộc tính sau:

Thuộc tính Kiểu Sự miêu tả
orig_img numpy.ndarray Hình ảnh gốc dưới dạng một mảng numpy.
orig_shape tuple Hình dạng hình ảnh gốc ở định dạng (chiều cao, chiều rộng).
boxes Boxes, optional Một đối tượng Hộp chứa các hộp giới hạn phát hiện.
masks Masks, optional Một đối tượng Mặt nạ chứa mặt nạ phát hiện.
probs Probs, optional Một đối tượng Probs chứa xác suất của mỗi lớp cho nhiệm vụ phân loại.
keypoints Keypoints, optional Một đối tượng Keypoints chứa các keypoint được phát hiện cho mỗi đối tượng.
obb OBB, optional Một đối tượng OBB chứa các hộp giới hạn định hướng.
speed dict Từ điển về tốc độ tiền xử lý, suy luận và hậu xử lý tính bằng mili giây cho mỗi hình ảnh.
names dict Một từ điển tên lớp.
path str Đường dẫn đến tệp hình ảnh.

Results Đối tượng có các phương thức sau:

Phương pháp Loại trả hàng Sự miêu tả
update() None Cập nhật các thuộc tính hộp, mặt nạ và probs của đối tượng Kết quả.
cpu() Results Trả về một bản sao của đối tượng Results với tất cả các tensor trên bộ nhớ CPU.
numpy() Results Trả về một bản sao của đối tượng Kết quả với tất cả các tensor dưới dạng mảng numpy.
cuda() Results Trả về một bản sao của đối tượng Results với tất cả các tensor trên bộ nhớ GPU.
to() Results Trả về một bản sao của đối tượng Kết quả với tensor trên thiết bị được chỉ định và dtype.
new() Results Trả về một đối tượng Kết quả mới có cùng hình ảnh, đường dẫn và tên.
plot() numpy.ndarray Vẽ kết quả phát hiện. Trả về mảng numpy của hình ảnh được chú thích.
show() None Hiển thị kết quả có chú thích để sàng lọc.
save() None Lưu kết quả có chú thích vào tệp.
verbose() str Trả về chuỗi nhật ký cho mỗi tác vụ.
save_txt() None Lưu dự đoán vào tệp txt.
save_crop() None Lưu dự đoán đã xén vào save_dir/cls/file_name.jpg.
tojson() str Chuyển đổi đối tượng sang định dạng JSON.

Để biết thêm chi tiết, hãy xem Results Tài liệu lớp học.

Hộp

Boxes Đối tượng có thể được sử dụng để lập chỉ mục, thao tác và chuyển đổi các hộp giới hạn sang các định dạng khác nhau.

Hộp

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

# View results
for r in results:
    print(r.boxes)  # print the Boxes object containing the detection bounding boxes

Dưới đây là bảng cho Boxes Các phương thức và thuộc tính của lớp, bao gồm tên, loại và mô tả của chúng:

Tên Kiểu Sự miêu tả
cpu() Phương pháp Di chuyển đối tượng vào bộ nhớ CPU.
numpy() Phương pháp Chuyển đổi đối tượng thành một mảng numpy.
cuda() Phương pháp Di chuyển đối tượng vào bộ nhớ CUDA.
to() Phương pháp Di chuyển đối tượng đến thiết bị được chỉ định.
xyxy Bất động sản (torch.Tensor) Trả lại các hộp ở định dạng xyxy.
conf Bất động sản (torch.Tensor) Trả về giá trị tin cậy của các hộp.
cls Bất động sản (torch.Tensor) Trả về giá trị lớp của các hộp.
id Bất động sản (torch.Tensor) Trả về ID theo dõi của các hộp (nếu có).
xywh Bất động sản (torch.Tensor) Trả lại các hộp ở định dạng xywh.
xyxyn Bất động sản (torch.Tensor) Trả về các hộp ở định dạng xyxy được chuẩn hóa theo kích thước hình ảnh gốc.
xywhn Bất động sản (torch.Tensor) Trả lại các hộp ở định dạng xywh được chuẩn hóa theo kích thước hình ảnh gốc.

Để biết thêm chi tiết, hãy xem Boxes Tài liệu lớp học.

Mặt nạ

Masks Đối tượng có thể được sử dụng chỉ mục, thao tác và chuyển đổi mặt nạ thành phân đoạn.

Mặt nạ

from ultralytics import YOLO

# Load a pretrained YOLOv8n-seg Segment model
model = YOLO("yolov8n-seg.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

Dưới đây là bảng cho Masks Các phương thức và thuộc tính của lớp, bao gồm tên, loại và mô tả của chúng:

Tên Kiểu Sự miêu tả
cpu() Phương pháp Trả về mặt nạ tensor trên bộ nhớ CPU.
numpy() Phương pháp Trả về mặt nạ tensor như một mảng numpy.
cuda() Phương pháp Trả về mặt nạ tensor trên bộ nhớ GPU.
to() Phương pháp Trả về mặt nạ tensor Với thiết bị được chỉ định và DTYPE.
xyn Bất động sản (torch.Tensor) Một danh sách các phân đoạn chuẩn hóa được biểu diễn dưới dạng tensor.
xy Bất động sản (torch.Tensor) Danh sách các phân đoạn trong tọa độ pixel được biểu diễn dưới dạng tensor.

Để biết thêm chi tiết, hãy xem Masks Tài liệu lớp học.

Điểm chính

Keypoints Đối tượng có thể được sử dụng index, thao tác và chuẩn hóa tọa độ.

Điểm chính

from ultralytics import YOLO

# Load a pretrained YOLOv8n-pose Pose model
model = YOLO("yolov8n-pose.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected keypoints

Dưới đây là bảng cho Keypoints Các phương thức và thuộc tính của lớp, bao gồm tên, loại và mô tả của chúng:

Tên Kiểu Sự miêu tả
cpu() Phương pháp Trả về các điểm chính tensor trên bộ nhớ CPU.
numpy() Phương pháp Trả về các điểm chính tensor như một mảng numpy.
cuda() Phương pháp Trả về các điểm chính tensor trên bộ nhớ GPU.
to() Phương pháp Trả về các điểm chính tensor Với thiết bị được chỉ định và DTYPE.
xyn Bất động sản (torch.Tensor) Một danh sách các điểm chính chuẩn hóa được biểu diễn dưới dạng tensor.
xy Bất động sản (torch.Tensor) Danh sách các điểm chính trong tọa độ pixel được biểu diễn dưới dạng tensor.
conf Bất động sản (torch.Tensor) Trả về giá trị tin cậy của các điểm chính nếu có, nếu không thì Không có.

Để biết thêm chi tiết, hãy xem Keypoints Tài liệu lớp học.

Thăm dò

Probs Đối tượng có thể được sử dụng index, get top1top5 chỉ số và điểm số phân loại.

Thăm dò

from ultralytics import YOLO

# Load a pretrained YOLOv8n-cls Classify model
model = YOLO("yolov8n-cls.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

Dưới đây là bảng tóm tắt các phương thức và thuộc tính cho Probs lớp:

Tên Kiểu Sự miêu tả
cpu() Phương pháp Trả về một bản sao của prob tensor trên bộ nhớ CPU.
numpy() Phương pháp Trả về một bản sao của prob tensor như một mảng numpy.
cuda() Phương pháp Trả về một bản sao của prob tensor trên bộ nhớ GPU.
to() Phương pháp Trả về một bản sao của prob tensor Với thiết bị được chỉ định và DTYPE.
top1 Bất động sản (int) Chỉ số của lớp 1 hàng đầu.
top5 Bất động sản (list[int]) Chỉ số của 5 lớp hàng đầu.
top1conf Bất động sản (torch.Tensor) Sự tự tin của lớp top 1.
top5conf Bất động sản (torch.Tensor) Sự tự tin của 5 lớp hàng đầu.

Để biết thêm chi tiết, hãy xem Probs Tài liệu lớp học.

OBB

OBB Đối tượng có thể được sử dụng để lập chỉ mục, thao tác và chuyển đổi các hộp giới hạn định hướng sang các định dạng khác nhau.

OBB

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n-obb.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

Dưới đây là bảng cho OBB Các phương thức và thuộc tính của lớp, bao gồm tên, loại và mô tả của chúng:

Tên Kiểu Sự miêu tả
cpu() Phương pháp Di chuyển đối tượng vào bộ nhớ CPU.
numpy() Phương pháp Chuyển đổi đối tượng thành một mảng numpy.
cuda() Phương pháp Di chuyển đối tượng vào bộ nhớ CUDA.
to() Phương pháp Di chuyển đối tượng đến thiết bị được chỉ định.
conf Bất động sản (torch.Tensor) Trả về giá trị tin cậy của các hộp.
cls Bất động sản (torch.Tensor) Trả về giá trị lớp của các hộp.
id Bất động sản (torch.Tensor) Trả về ID theo dõi của các hộp (nếu có).
xyxy Bất động sản (torch.Tensor) Trả về các hộp ngang ở định dạng xyxy.
xywhr Bất động sản (torch.Tensor) Trả về các hộp đã xoay ở định dạng xywhr.
xyxyxyxy Bất động sản (torch.Tensor) Trả về các hộp đã xoay ở định dạng xyxyxyxy.
xyxyxyxyn Bất động sản (torch.Tensor) Trả về các hộp đã xoay ở định dạng xyxyxyxyy được chuẩn hóa theo kích thước hình ảnh.

Để biết thêm chi tiết, hãy xem OBB Tài liệu lớp học.

Kết quả vẽ

Các plot() Phương pháp trong Results Các đối tượng tạo điều kiện trực quan hóa các dự đoán bằng cách phủ các đối tượng được phát hiện (chẳng hạn như hộp giới hạn, mặt nạ, điểm chính và xác suất) lên hình ảnh gốc. Phương thức này trả về hình ảnh được chú thích dưới dạng mảng NumPy, cho phép hiển thị hoặc lưu dễ dàng.

Vẽ

from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on 'bus.jpg'
results = model(["bus.jpg", "zidane.jpg"])  # results list

# Visualize the results
for i, r in enumerate(results):
    # Plot results image
    im_bgr = r.plot()  # BGR-order numpy array
    im_rgb = Image.fromarray(im_bgr[..., ::-1])  # RGB-order PIL image

    # Show results to screen (in supported environments)
    r.show()

    # Save results to disk
    r.save(filename=f"results{i}.jpg")

plot() Tham số phương pháp

Các plot() Phương pháp hỗ trợ các đối số khác nhau để tùy chỉnh đầu ra:

Lý lẽ Kiểu Sự miêu tả Mặc định
conf bool Bao gồm điểm tin cậy phát hiện. True
line_width float Chiều rộng đường của các hộp giới hạn. Tỷ lệ với kích thước hình ảnh nếu None. None
font_size float Cỡ chữ văn bản. Tỷ lệ với kích thước hình ảnh nếu None. None
font str Tên phông chữ cho chú thích văn bản. 'Arial.ttf'
pil bool Trả về hình ảnh dưới dạng đối tượng PIL Image. False
img numpy.ndarray Hình ảnh thay thế cho âm mưu. Sử dụng hình ảnh gốc nếu: None. None
im_gpu torch.Tensor Hình ảnh được GPU tăng tốc để vẽ mặt nạ nhanh hơn. Hình dạng: (1, 3, 640, 640). None
kpt_radius int Bán kính cho các điểm chính được vẽ. 5
kpt_line bool Kết nối các điểm chính với các dòng. True
labels bool Bao gồm nhãn lớp trong chú thích. True
boxes bool Các hộp giới hạn lớp phủ trên hình ảnh. True
masks bool Mặt nạ phủ trên hình ảnh. True
probs bool Bao gồm xác suất phân loại. True
show bool Hiển thị hình ảnh được chú thích trực tiếp bằng trình xem hình ảnh mặc định. False
save bool Lưu hình ảnh được chú thích vào một tệp được chỉ định bởi filename. False
filename str Đường dẫn và tên của tệp để lưu hình ảnh được chú thích nếu: saveTrue. None

Suy luận an toàn cho luồng

Đảm bảo an toàn luồng trong quá trình suy luận là rất quan trọng khi bạn đang chạy nhiều YOLO mô hình song song trên các chủ đề khác nhau. Suy luận an toàn theo luồng đảm bảo rằng các dự đoán của mỗi luồng được cô lập và không can thiệp lẫn nhau, tránh các điều kiện cuộc đua và đảm bảo đầu ra nhất quán và đáng tin cậy.

Khi sử dụng YOLO Các mô hình Trong một ứng dụng đa luồng, điều quan trọng là phải khởi tạo các đối tượng mô hình riêng biệt cho mỗi luồng hoặc sử dụng lưu trữ luồng-cục bộ để ngăn xung đột:

Suy luận an toàn cho luồng

Khởi tạo một mô hình duy nhất bên trong mỗi luồng để suy luận an toàn theo luồng:

from threading import Thread

from ultralytics import YOLO


def thread_safe_predict(image_path):
    """Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
    local_model = YOLO("yolov8n.pt")
    results = local_model.predict(image_path)
    # Process results


# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()

Để có cái nhìn sâu sắc về suy luận an toàn theo luồng với YOLO Mô hình và hướng dẫn từng bước, vui lòng tham khảo YOLO Hướng dẫn suy luận an toàn theo luồng. Hướng dẫn này sẽ cung cấp cho bạn tất cả các thông tin cần thiết để tránh những cạm bẫy phổ biến và đảm bảo rằng suy luận đa luồng của bạn chạy trơn tru.

Nguồn phát trực tuyến for-vòng lặp

Đây là một Python script sử dụng OpenCV (cv2) và YOLOv8 để chạy suy luận trên khung video. Tập lệnh này giả định bạn đã cài đặt các gói cần thiết (opencv-pythonultralytics).

Phát trực tuyến theo vòng lặp

import cv2

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8n.pt")

# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()

Tập lệnh này sẽ chạy các dự đoán trên từng khung hình của video, trực quan hóa kết quả và hiển thị chúng trong cửa sổ. Vòng lặp có thể được thoát ra bằng cách nhấn 'q'.



Created 2023-11-12, Updated 2024-06-18
Authors: glenn-jocher (23), IvorZhu331 (1), RizwanMunawar (1), UltralyticsAssistant (1), Burhan-Q (1), plashchynski (1), tensorturtle (1), AyushExel (1), Laughing-q (1)

Ý kiến