Dự đoán Mô hình với Ultralytics YOLO
Giới thiệu
Trong thế giới học máy và thị giác máy tính, quá trình tìm hiểu dữ liệu trực quan được gọi là 'suy luận' hoặc 'dự đoán'. Ultralytics YOLO11 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 suy luận hiệu suất cao, theo thời gian thực trên nhiều nguồn dữ liệu.
Xem: Cách trích xuất đầu ra từ Mô hình Ultralytics YOLO cho các Dự án Tùy chỉnh.
Các ứng dụng thực tế
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ười bị ngã |
Tại sao nên sử dụng Ultralytics YOLO để suy luận?
Dưới đây là lý do tại sao bạn nên cân nhắc chế độ dự đoán của YOLO11 cho các nhu cầu suy luận khác nhau của mình:
- Tính linh hoạt: Có khả năng đưa ra suy luận trên hình ảnh, video và thậm chí cả các luồng trực tiếp.
- Hiệu năng: Được thiết kế để xử lý tốc độ cao, thời gian thực mà không làm giảm độ chính xác.
- Dễ sử dụng: Giao diện Python và CLI trực quan để triển khai và thử nghiệm nhanh chóng.
- Khả năng tùy biến cao: Nhiều cài đặt và tham số khác nhau để điều chỉnh hành vi suy luận của mô hình theo các yêu cầu cụ thể của bạn.
Các tính năng chính của chế độ Predict
Chế độ dự đoán của YOLO11 được thiết kế để mạnh mẽ và linh hoạt, với các đặc điểm:
- Tương thích với nhiều nguồn dữ liệu: Cho dù dữ liệu của bạn ở dạng hình ảnh riêng lẻ, tập hợp hình ảnh, tệp video hoặc luồng video thời gian thực, chế độ dự đoán đều đáp ứng được.
- Chế độ Streaming: Sử dụng tính năng streaming để tạo ra một generator tiết kiệm bộ nhớ của
Results
các đối tượng. Bật tính năng này bằng cách thiết lậpstream=True
trong phương thức gọi của predictor. - Xử lý theo lô: Khả năng xử lý nhiều hình ảnh hoặc khung hình video trong một lô duy nhất, giúp tăng tốc thời gian suy luận.
- Dễ dàng tích hợp: Dễ dàng tích hợp với các quy trình dữ liệu hiện có và các thành phần phần mềm khác, nhờ API linh hoạt của nó.
Các mô hình Ultralytics YOLO trả về một danh sách Python các Results
đối tượng hoặc một Python generator tiết kiệm bộ nhớ của Results
các đối tượng khi stream=True
được truyền cho mô hình trong quá trình suy luận:
Dự đoán
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # pretrained YOLO11n model
# Run batched inference on a list of images
results = model(["image1.jpg", "image2.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("yolo11n.pt") # pretrained YOLO11n model
# Run batched inference on a list of images
results = model(["image1.jpg", "image2.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
Các nguồn suy luận
YOLO11 có thể xử lý các loại nguồn đầu vào khác nhau để suy luận, như được hiển thị 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 này cũng chỉ ra liệu mỗi nguồn có thể được sử dụng ở chế độ streaming với đối số stream=True
✅ hay không. Chế độ streaming có lợi cho việc xử lý video hoặc luồng trực tiếp vì nó tạo ra một generator kết quả thay vì tải tất cả các khung hình vào bộ nhớ.
Mẹo
Sử dụng stream=True
để xử lý các 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 hình 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 dồn và gây ra lỗi hết bộ nhớ đối với các đầu vào lớn. Ngược lại, stream=True
sử dụng một generator, chỉ giữ kết quả của khung hình 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 sự cố hết bộ nhớ.
Nguồn | Ví dụ | Loại | Ghi chú |
---|---|---|---|
hình ảnh | 'image.jpg' |
str hoặc Path |
Một file ảnh đơn lẻ. |
URL | 'https://ultralytics.com/images/bus.jpg' |
str |
URL đến một ảnh. |
ảnh chụp màn hình | 'screen' |
str |
Chụp ảnh màn hình. |
PIL | Image.open('image.jpg') |
PIL.Image |
Định dạng HWC với các kênh RGB. |
OpenCV | cv2.imread('image.jpg') |
np.ndarray |
Định dạng HWC với các kênh BGR. uint8 (0-255) . |
numpy | 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 |
File CSV chứa đường dẫn đến ảnh, video hoặc thư mục. |
video ✅ | 'video.mp4' |
str hoặc Path |
File video ở các định dạng như MP4, AVI, v.v. |
thư mục ✅ | 'path/' |
str hoặc Path |
Đường dẫn đến một thư mục chứa ảnh hoặc video. |
glob ✅ | 'path/*.jpg' |
str |
Mẫu Glob để khớp với nhiều file. Sử dụng ký tự * làm ký tự đại diện. |
YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' |
str |
URL đến một video YouTube. |
luồ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 chứa một URL luồng trên mỗi hàng, ví dụ: 8 luồng sẽ chạy ở kích thước lô là 8. |
webcam ✅ | 0 |
int |
Chỉ số của thiết bị camera được kết nối để chạy suy luận. |
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 một tệp hình ảnh.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 YOLO11n model
model = YOLO("yolo11n.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 một hình ảnh hoặc video được lưu trữ từ xa qua URL.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 một hình ảnh được mở bằng Python Imaging Library (PIL).
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 YOLO11n model
model = YOLO("yolo11n.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ột mảng numpy.
import numpy as np
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 YOLO11n model
model = YOLO("yolo11n.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 một tập hợp các hình ảnh, URL, video và thư mục được liệt kê trong một tệp CSV.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 một 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 YOLO11n model
model = YOLO("yolo11n.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ả các hình ảnh và video trong một thư mục. Để chụp cả hình ảnh và video trong các thư mục con, hãy sử dụng mẫu glob, ví dụ: path/to/dir/**/*
.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 khớp với biểu thức glob với *
ký tự.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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 Results để giảm mức sử dụng bộ nhớ cho các video dài.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.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
Sử dụng chế độ stream để chạy suy luận trên các luồng video trực tiếp bằng giao thức RTSP, RTMP, TCP hoặc địa chỉ IP. Nếu chỉ cung cấp một luồng, mô hình sẽ chạy suy luận với kích thước lô là 1. Đối với nhiều luồng, có thể sử dụng một .streams
tệp văn bản để thực hiện suy luận theo lô, trong đó kích thước lô được xác định bởi số lượng luồng được cung cấp (ví dụ: kích thước lô là 8 cho 8 luồng).
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Single stream with batch-size 1 inference
source = "rtsp://example.com/media.mp4" # RTSP, RTMP, TCP, or IP streaming address
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Đối với việc sử dụng một luồng, kích thước lô được đặt mặc định là 1, cho phép xử lý nguồn cấp dữ liệu video theo thời gian thực một cách hiệu quả.
Để xử lý đồng thời nhiều luồng video, hãy sử dụng một .streams
tệp văn bản chứa các nguồn phát trực tuyến. Mô hình sẽ chạy suy luận theo lô, trong đó kích thước lô bằng số lượng luồng. Thiết lập này cho phép xử lý hiệu quả nhiều nguồn cấp dữ liệu đồng thời.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Multiple streams with batched inference (e.g., batch-size 8 for 8 streams)
source = "path/to/list.streams" # *.streams text file with one streaming address per line
# Run inference on the source
results = model(source, stream=True) # generator of Results objects
Ví dụ .streams
tệp văn bản:
rtsp://example.com/media1.mp4
rtsp://example.com/media2.mp4
rtmp://example2.com/live
tcp://192.168.1.100:554
...
Mỗi hàng trong tệp đại diện cho một nguồn phát trực tuyến, cho phép bạn theo dõi và thực hiện suy luận trên một số luồng video cùng một lúc.
Bạn có thể chạy suy luận trên một thiết bị camera được kết nối bằng cách chuyển chỉ mục của camera đó đến source
.
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on the source
results = model(source=0, stream=True) # generator of Results objects
Các đối số suy luận
model.predict()
chấp nhận nhiều đối số có thể được chuyể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 YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.5)
Các đối số suy luận:
Đối số | Loại | Mặc định | Mô tả |
---|---|---|---|
source |
str |
'ultralytics/assets' |
Chỉ định nguồn dữ liệu cho 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 các nguồn cấp dữ liệu trực tiếp. Hỗ trợ nhiều định dạng và nguồn khác nhau, 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 cho các 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 các phát hiện sai. |
iou |
float |
0.7 |
Ngưỡng Intersection Over Union (IoU) cho Non-Maximum Suppression (NMS). Các 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 hoặc tuple |
640 |
Xác định kích thước hình ảnh cho 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 một bộ (chiều cao, chiều rộng). Định cỡ thích hợp có thể cải thiện khả năng phát hiện độ chính xác và tốc độ xử lý. |
rect |
bool |
True |
Nếu được bật, sẽ thêm phần đệm tối thiểu vào cạnh ngắn hơn của ảnh cho đến khi chia hết cho bước tiến để cải thiện tốc độ suy luận. Nếu tắt, sẽ thêm phần đệm vào ảnh thành hình vuông trong quá trình suy luận. |
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ị cho 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, một GPU cụ thể hoặc các thiết bị tính toán khác để thực thi mô hình. |
batch |
int |
1 |
Chỉ định kích thước lô cho suy luận (chỉ hoạt động khi nguồn là một thư mục, tệp video hoặc .txt tệp). Kích thước batch lớn hơn có thể cung cấp thông lượng cao hơn, rút ngắn tổng thời gian cần thiết cho quá trình suy luận. |
max_det |
int |
300 |
Số lượng phát hiện tối đa được phép trên 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 lần suy luận, ngăn chặn đầu ra quá mức trong các cảnh dày đặc. |
vid_stride |
int |
1 |
Bước nhảy khung hình cho dữ liệu đầu vào video. Cho phép bỏ qua các khung hình trong video để tăng tốc độ xử lý, đánh đổi bằng độ phân giải thời gian. Giá trị 1 xử lý mọi khung hình, giá trị cao hơn sẽ bỏ qua khung hình. |
stream_buffer |
bool |
False |
Xác định xem có xếp hàng chờ các khung hình đến cho luồng video hay không. Nếu False , các khung hình cũ bị loại bỏ để nhường chỗ cho các khung hình mới (được tối ưu hóa cho các ứng dụng thời gian thực). Nếu True , xếp hàng các khung hình mới vào bộ đệm, đảm bảo không bỏ qua khung hình nào, nhưng sẽ gây ra độ trễ nếu FPS suy luận thấp hơn FPS luồng. |
visualize |
bool |
False |
Kích hoạt trực quan hóa các đặc trư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à diễn giải mô hình. |
augment |
bool |
False |
Cho phép tăng cường dữ liệu lúc kiểm thử (TTA) để dự đoán, có khả năng cải thiện độ mạnh mẽ của việc phát hiện nhưng phải trả giá bằng tốc độ suy luận. |
agnostic_nms |
bool |
False |
Cho phép loại bỏ chồng lấp không phân biệt lớp (NMS), giúp hợp nhất các hộp chồng lấp của các lớp khác nhau. Hữu ích trong các tình huống phát hiện đa lớp, nơi sự chồng lấp lớp là phổ biến. |
classes |
list[int] |
None |
Lọc các dự đoán theo một tập hợp ID lớp. Chỉ các 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 tác vụ phát hiện đa lớp. |
retina_masks |
bool |
False |
Trả về mặt nạ phân đoạn có độ phân giải cao. Các mặt nạ được trả về (masks.data ) sẽ khớp với kích thước hình ảnh gốc nếu được bật. Nếu tắt, chúng sẽ có kích thước hình ảnh được sử dụng trong quá trình suy luận. |
embed |
list[int] |
None |
Chỉ định các lớp để trích xuất vectơ đặc trưng hoặc nhúng. Hữu ích cho các tác vụ hạ nguồn như phân cụm hoặc tìm kiếm tương tự. |
project |
str |
None |
Tên của thư mục dự án nơi lưu trữ đầu ra dự đoán nếu save được bật. |
name |
str |
None |
Tên của lần chạy dự đoán. Được sử dụng để tạo thư mục con bên trong thư mục dự án, nơi lưu trữ đầu ra dự đoán nếu save được bật. |
stream |
bool |
False |
Cho phép xử lý tiết kiệm bộ nhớ cho các video dài hoặc nhiều hình ảnh bằng cách trả về một trình tạo các đối tượng Kết quả thay vì tải tất cả các khung hình vào bộ nhớ cùng một lúc. |
verbose |
bool |
True |
Kiểm soát việc hiển thị nhật ký suy luận chi tiết trong terminal, cung cấp phản hồi theo thời gian thực về quá trình dự đoán. |
Các đối số trực quan hóa:
Đối số | Loại | Mặc định | Mô tả |
---|---|---|---|
show |
bool |
False |
Nếu True , hiển thị hình ảnh hoặc video đã chú thích trong một cửa sổ. Hữu ích để có 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 or True |
Cho phép lưu hình ảnh hoặc video đã chú thích vào tệp. Hữu ích cho việc lập tài liệu, phân tích thêm hoặc chia sẻ kết quả. Mặc định là True khi sử dụng CLI & False khi sử dụng trong python. |
save_frames |
bool |
False |
Khi xử lý video, 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 hình 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 một 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. Nâng cao chi tiết có sẵn để xử lý và phân tích hậu kỳ. |
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 tập 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 lần phát hiện trong đầu ra trực quan. 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 lần phát hiện cùng với nhãn. Cung cấp cái nhìn sâu sắc về độ 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 xác định trực quan và vị trí của các đối tượng trong hình ảnh hoặc khung hình video. |
line_width |
None or int |
None |
Chỉ định độ rộng đường của hộp giới hạn. Nếu None , độ rộng đường kẻ đượ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 để rõ ràng hơn. |
Định dạng Ảnh và Video
YOLO11 hỗ trợ nhiều định dạng hình ảnh và video khác nhau, như được chỉ định trong ultralytics/data/utils.py. Xem các bảng dưới đây để biết các hậu tố hợp lệ và các lệnh dự đoán mẫu.
Ảnh
Bảng dưới đây chứa các định dạng hình ảnh Ultralytics hợp lệ.
Lưu ý
Hình ảnh HEIC chỉ được hỗ trợ cho suy luận, không dùng cho huấn luyện.
Hậu tố Hình ảnh | Lệnh Dự đoán Mẫu | 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 Được Gắn Thẻ |
.tiff |
yolo predict source=image.tiff |
Định dạng Tệp Hình ảnh Được Gắn Thẻ |
.webp |
yolo predict source=image.webp |
WebP |
.pfm |
yolo predict source=image.pfm |
Portable FloatMap |
.HEIC |
yolo predict source=image.HEIC |
Định dạng Hình ảnh Hiệu suất Cao |
Video
Bảng dưới đây chứa các định dạng video Ultralytics hợp lệ.
Hậu tố Video | Lệnh Dự đoán Mẫu | Tham khảo |
---|---|---|
.asf |
yolo predict source=video.asf |
Định dạng Hệ thống Nâng cao |
.avi |
yolo predict source=video.avi |
Audio Video Interleave |
.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 Phần 14 - Wikipedia |
.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 |
MPEG Transport Stream |
.wmv |
yolo predict source=video.wmv |
Windows Media Video |
.webm |
yolo predict source=video.webm |
WebM Project |
Làm việc với Kết quả
Tất cả các lệnh gọi Ultralytics predict()
sẽ trả về một danh sách các Results
đối tượng:
Results
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
[
"https://ultralytics.com/images/bus.jpg",
"https://ultralytics.com/images/zidane.jpg",
]
) # batch inference
Results
Các đối tượng có những thuộc tính sau:
Thuộc tính | Loại | Mô tả |
---|---|---|
orig_img |
np.ndarray |
Hình ảnh gốc dưới dạng một mảng numpy. |
orig_shape |
tuple |
Hình dạng gốc của ảnh theo định dạng (chiều cao, chiều rộng). |
boxes |
Boxes, optional |
Một đối tượng Boxes chứa các hộp giới hạn phát hiện. |
masks |
Masks, optional |
Một đối tượng Masks chứa các 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 điểm chính đượ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 được định hướng. |
speed |
dict |
Một 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 trên mỗi hình ảnh. |
names |
dict |
Một từ điển ánh xạ các chỉ số lớp tới tên lớp. |
path |
str |
Đường dẫn đến tập tin hình ảnh. |
save_dir |
str, optional |
Thư mục để lưu kết quả. |
Results
Các đối tượng có những phương thức sau:
Phương thức | Loại trả về | Mô tả |
---|---|---|
update() |
None |
Cập nhật đối tượng Results với dữ liệu phát hiện mới (boxes, masks, probs, obb, keypoints). |
cpu() |
Results |
Trả về một bản sao của đối tượng Results với tất cả các tensor được chuyển sang bộ nhớ CPU. |
numpy() |
Results |
Trả về một bản sao của đối tượng Results với tất cả các tensor được chuyển đổi thành 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 được chuyển sang bộ nhớ GPU. |
to() |
Results |
Trả về một bản sao của đối tượng Results với các tensor được chuyển đến thiết bị và kiểu dữ liệu được chỉ định. |
new() |
Results |
Tạo một đối tượng Results mới với cùng hình ảnh, đường dẫn, tên và thuộc tính tốc độ. |
plot() |
np.ndarray |
Vẽ kết quả phát hiện lên ảnh RGB đầu vào và trả về ảnh đã được chú thích. |
show() |
None |
Hiển thị hình ảnh với kết quả suy luận đã được chú thích. |
save() |
str |
Lưu hình ảnh kết quả suy luận đã được chú thích vào tập tin và trả về tên tập tin. |
verbose() |
str |
Trả về một chuỗi nhật ký cho mỗi tác vụ, trình bày chi tiết kết quả phát hiện và phân loại. |
save_txt() |
str |
Lưu kết quả phát hiện vào một tập tin văn bản và trả về đường dẫn đến tập tin đã lưu. |
save_crop() |
None |
Lưu hình ảnh phát hiện đã cắt vào thư mục được chỉ định. |
summary() |
List[Dict[str, Any]] |
Chuyển đổi kết quả suy luận thành một từ điển tóm tắt với khả năng chuẩn hóa tùy chọn. |
to_df() |
DataFrame |
Chuyển đổi kết quả phát hiện sang Polars DataFrame. |
to_csv() |
str |
Chuyển đổi kết quả phát hiện sang định dạng CSV. |
to_json() |
str |
Chuyển đổi kết quả phát hiện sang định dạng JSON. |
Để biết thêm chi tiết, xem Results
tài liệu về class.
Hộp giới hạn
Boxes
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 giới hạn
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/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 dành cho Boxes
các phương thức và thuộc tính của class, bao gồm tên, loại và mô tả của chúng:
Tên | Loại | Mô tả |
---|---|---|
cpu() |
Phương thức | Di chuyển đối tượng vào bộ nhớ CPU. |
numpy() |
Phương thức | Chuyển đổi đối tượng thành một mảng numpy. |
cuda() |
Phương thức | Di chuyển đối tượng vào bộ nhớ CUDA. |
to() |
Phương thức | Di chuyển đối tượng đến thiết bị được chỉ định. |
xyxy |
Thuộc tính (torch.Tensor ) |
Trả về các hộp ở định dạng xyxy. |
conf |
Thuộc tính (torch.Tensor ) |
Trả về các giá trị độ tin cậy của các hộp. |
cls |
Thuộc tính (torch.Tensor ) |
Trả về các giá trị lớp của các hộp. |
id |
Thuộc tính (torch.Tensor ) |
Trả về ID theo dõi của các hộp (nếu có). |
xywh |
Thuộc tính (torch.Tensor ) |
Trả về các hộp ở định dạng xywh. |
xyxyn |
Thuộc tính (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 |
Thuộc tính (torch.Tensor ) |
Trả về 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, xem Boxes
tài liệu về class.
Mặt nạ
Masks
Đối tượng có thể được sử dụng để lập chỉ mục, thao tác và chuyển đổi mặt nạ thành các phân đoạn.
Mặt nạ
from ultralytics import YOLO
# Load a pretrained YOLO11n-seg Segment model
model = YOLO("yolo11n-seg.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/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 dành cho Masks
các phương thức và thuộc tính của class, bao gồm tên, loại và mô tả của chúng:
Tên | Loại | Mô tả |
---|---|---|
cpu() |
Phương thức | Trả về tensor mặt nạ trên bộ nhớ CPU. |
numpy() |
Phương thức | Trả về tensor mặt nạ dưới dạng một mảng numpy. |
cuda() |
Phương thức | Trả về tensor mặt nạ trên bộ nhớ GPU. |
to() |
Phương thức | Trả về tensor mặt nạ với thiết bị và kiểu dữ liệu (dtype) được chỉ định. |
xyn |
Thuộc tính (torch.Tensor ) |
Một danh sách các phân đoạn đã được chuẩn hóa, được biểu diễn dưới dạng tensor. |
xy |
Thuộc tính (torch.Tensor ) |
Một danh sách các phân đoạn theo tọa độ pixel, được biểu diễn dưới dạng tensor. |
Để biết thêm chi tiết, xem Masks
tài liệu về class.
Điểm chính
Keypoints
Đối tượng có thể được sử dụng để lập chỉ mục, thao tác và chuẩn hóa tọa độ.
Điểm chính
from ultralytics import YOLO
# Load a pretrained YOLO11n-pose Pose model
model = YOLO("yolo11n-pose.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/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 dành cho Keypoints
các phương thức và thuộc tính của class, bao gồm tên, loại và mô tả của chúng:
Tên | Loại | Mô tả |
---|---|---|
cpu() |
Phương thức | Trả về tensor keypoints trên bộ nhớ CPU. |
numpy() |
Phương thức | Trả về tensor keypoints dưới dạng một mảng numpy. |
cuda() |
Phương thức | Trả về tensor keypoints trên bộ nhớ GPU. |
to() |
Phương thức | Trả về tensor keypoints với thiết bị và kiểu dữ liệu (dtype) được chỉ định. |
xyn |
Thuộc tính (torch.Tensor ) |
Một danh sách các keypoints đã được chuẩn hóa, được biểu diễn dưới dạng tensor. |
xy |
Thuộc tính (torch.Tensor ) |
Một danh sách các keypoints theo tọa độ pixel, được biểu diễn dưới dạng tensor. |
conf |
Thuộc tính (torch.Tensor ) |
Trả về giá trị độ tin cậy của keypoints nếu có, nếu không thì trả về None. |
Để biết thêm chi tiết, xem Keypoints
tài liệu về class.
Xác suất
Probs
Đối tượng có thể được sử dụng để lập chỉ mục, lấy top1
và top5
chỉ số và điểm số của phân loại.
Xác suất
from ultralytics import YOLO
# Load a pretrained YOLO11n-cls Classify model
model = YOLO("yolo11n-cls.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/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 | Loại | Mô tả |
---|---|---|
cpu() |
Phương thức | Trả về một bản sao của tensor probs trên bộ nhớ CPU. |
numpy() |
Phương thức | Trả về một bản sao của tensor probs dưới dạng một mảng numpy. |
cuda() |
Phương thức | Trả về một bản sao của tensor probs trên bộ nhớ GPU. |
to() |
Phương thức | Trả về một bản sao của tensor probs với thiết bị và kiểu dữ liệu (dtype) được chỉ định. |
top1 |
Thuộc tính (int ) |
Chỉ số của lớp có độ tin cậy cao nhất (top 1). |
top5 |
Thuộc tính (list[int] ) |
Chỉ số của 5 lớp có độ tin cậy cao nhất (top 5). |
top1conf |
Thuộc tính (torch.Tensor ) |
Độ tin cậy của lớp có xác suất cao nhất. |
top5conf |
Thuộc tính (torch.Tensor ) |
Độ tin cậy của 5 lớp có xác suất cao nhất. |
Để biết thêm chi tiết, xem Probs
tài liệu về class.
OBB
OBB
object 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 theo hướng khác nhau sang các định dạng khác nhau.
OBB
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n-obb.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/boats.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 dành cho OBB
các phương thức và thuộc tính của class, bao gồm tên, loại và mô tả của chúng:
Tên | Loại | Mô tả |
---|---|---|
cpu() |
Phương thức | Di chuyển đối tượng vào bộ nhớ CPU. |
numpy() |
Phương thức | Chuyển đổi đối tượng thành một mảng numpy. |
cuda() |
Phương thức | Di chuyển đối tượng vào bộ nhớ CUDA. |
to() |
Phương thức | Di chuyển đối tượng đến thiết bị được chỉ định. |
conf |
Thuộc tính (torch.Tensor ) |
Trả về các giá trị độ tin cậy của các hộp. |
cls |
Thuộc tính (torch.Tensor ) |
Trả về các giá trị lớp của các hộp. |
id |
Thuộc tính (torch.Tensor ) |
Trả về ID theo dõi của các hộp (nếu có). |
xyxy |
Thuộc tính (torch.Tensor ) |
Trả về các hộp ngang ở định dạng xyxy. |
xywhr |
Thuộc tính (torch.Tensor ) |
Trả về các hộp xoay ở định dạng xywhr. |
xyxyxyxy |
Thuộc tính (torch.Tensor ) |
Trả về các hộp xoay ở định dạng xyxyxyxy. |
xyxyxyxyn |
Thuộc tính (torch.Tensor ) |
Trả về các hộp xoay ở định dạng xyxyxyxy được chuẩn hóa theo kích thước hình ảnh. |
Để biết thêm chi tiết, xem OBB
tài liệu về class.
Vẽ Đồ thị Kết quả
Hàm plot()
phương thức trong Results
các object tạo điều kiện thuận lợi cho việc 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 pháp 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ẽ đồ thị
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO11n model
model = YOLO("yolo11n.pt")
# Run inference on 'bus.jpg'
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/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 thức
Hàm plot()
phương thức hỗ trợ nhiều đối số khác nhau để tùy chỉnh đầu ra:
Đối số | Loại | Mô tả | Mặc định |
---|---|---|---|
conf |
bool |
Bao gồm điểm tin cậy phát hiện. | True |
line_width |
float |
Độ rộng đường kẻ của hộp giới hạn. Tỷ lệ theo kích thước hình ảnh nếu None . |
None |
font_size |
float |
Cỡ chữ văn bản. Tỷ lệ theo 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 |
np.ndarray |
Hình ảnh thay thế để vẽ đồ thị. Sử dụng hình ảnh gốc nếu None . |
None |
im_gpu |
torch.Tensor |
Hình ảnh tăng tốc GPU để 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 bằng đường thẳng. | True |
labels |
bool |
Bao gồm nhãn lớp trong chú thích. | True |
boxes |
bool |
Phủ hộp giới hạn lên hình ảnh. | True |
masks |
bool |
Phủ mặt nạ lên hình ảnh. | True |
probs |
bool |
Bao gồm xác suất phân loại. | True |
show |
bool |
Hiển thị trực tiếp hình ảnh đã được chú thích bằng trình xem ảnh mặc định. | False |
save |
bool |
Lưu hình ảnh đã được chú thích vào một tập tin được chỉ định bởi filename . |
False |
filename |
str |
Đường dẫn và tên của tập tin để lưu hình ảnh đã được chú thích nếu save là True . |
None |
color_mode |
str |
Chỉ định chế độ màu, ví dụ: 'instance' hoặc 'class'. | 'class' |
txt_color |
tuple[int, int, int] |
Màu văn bản RGB cho hộp giới hạn và nhãn phân loại hình ảnh. | (255, 255, 255) |
Suy luận An toàn 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 chạy song song nhiều mô hình YOLO trên các luồng khác nhau. Suy luận an toàn 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 tình trạng tranh chấp dữ liệu và đảm bảo đầu ra nhất quán và đáng tin cậy.
Khi sử dụng các mô hình YOLO 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 bộ nhớ cục bộ của luồng để ngăn ngừa xung đột:
Suy luận An toàn 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 luồng:
from threading import Thread
from ultralytics import YOLO
def thread_safe_predict(model, image_path):
"""Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
model = YOLO(model)
results = model.predict(image_path)
# Process results
# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("yolo11n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo11n.pt", "image2.jpg")).start()
Để tìm hiểu sâu hơn về suy luận an toàn luồng với các mô hình YOLO và hướng dẫn từng bước, vui lòng tham khảo Hướng dẫn Suy luận An toàn Luồng YOLO của chúng tôi. Hướng dẫn này sẽ cung cấp cho bạn tất 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
-loop
Dưới đây là một script python sử dụng OpenCV (cv2
) và YOLO để chạy suy luận trên các khung hình video. Script này giả định rằng bạn đã cài đặt các gói cần thiết (opencv-python
và ultralytics
).
Vòng lặp for phát trực tuyến
import cv2
from ultralytics import YOLO
# Load the YOLO model
model = YOLO("yolo11n.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 YOLO inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLO 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()
Script này sẽ chạy các dự đoán trên mỗi khung hình của video, trực quan hóa kết quả và hiển thị chúng trong một cửa sổ. Vòng lặp có thể được thoát bằng cách nhấn 'q'.
Câu hỏi thường gặp
Ultralytics YOLO là gì và chế độ dự đoán của nó để suy luận theo thời gian thực?
Ultralytics YOLO là một mô hình hiện đại để phát hiện đối tượng, phân đoạn và phân loại theo thời gian thực. Chế độ dự đoán của nó cho phép người dùng thực hiện suy luận tốc độ cao trên nhiều nguồn dữ liệu khác nhau như hình ảnh, video và luồng trực tiếp. Được thiết kế để mang lại hiệu suất và tính linh hoạt, nó cũng cung cấp khả năng xử lý hàng loạt và các chế độ phát trực tuyến. Để biết thêm chi tiết về các tính năng của nó, hãy xem chế độ dự đoán Ultralytics YOLO.
Làm cách nào để chạy suy luận bằng Ultralytics YOLO trên các nguồn dữ liệu khác nhau?
Ultralytics YOLO có thể xử lý một loạt các nguồn dữ liệu, bao gồm hình ảnh, video, thư mục, URL và luồng riêng lẻ. Bạn có thể chỉ định nguồn dữ liệu trong lệnh gọi model.predict()
. Ví dụ: sử dụng 'image.jpg'
cho một hình ảnh cục bộ hoặc 'https://ultralytics.com/images/bus.jpg'
cho một URL. Xem các ví dụ chi tiết cho nhiều nguồn suy luận trong tài liệu.
Làm cách nào để tối ưu hóa tốc độ suy luận và mức sử dụng bộ nhớ của YOLO?
Để tối ưu hóa tốc độ suy luận và quản lý bộ nhớ hiệu quả, bạn có thể sử dụng chế độ phát trực tuyến bằng cách đặt stream=True
trong phương thức gọi của trình dự đoán. Chế độ phát trực tuyến tạo ra một trình tạo tiết kiệm bộ nhớ gồm các Results
đối tượng thay vì tải tất cả các khung hình vào bộ nhớ. Đối với việc xử lý các video dài hoặc bộ dữ liệu lớn, chế độ phát trực tuyến đặc biệt hữu ích. Tìm hiểu thêm về chế độ phát trực tuyến.
Ultralytics YOLO hỗ trợ những đối số suy luận nào?
Hàm model.predict()
phương thức trong YOLO hỗ trợ nhiều đối số khác nhau, chẳng hạn như conf
, iou
, imgsz
, device
, v.v. Các đối số này cho phép bạn tùy chỉnh quy trình suy luận, thiết lập các tham số như ngưỡng tin cậy, kích thước hình ảnh và thiết bị được sử dụng để tính toán. Mô tả chi tiết về các đối số này có trong phần các đối số suy luận ở phần này.
Làm cách nào để trực quan hóa và lưu kết quả dự đoán YOLO?
Sau khi chạy suy luận với YOLO, các Results
đối tượng chứa các phương thức để hiển thị và lưu hình ảnh đã được chú thích. Bạn có thể sử dụng các phương thức như result.show()
và result.save(filename="result.jpg")
để trực quan hóa và lưu kết quả. Để có danh sách đầy đủ các phương thức này, hãy tham khảo phần làm việc với kết quả ở phần này.