Dự đoán model với Ultralytics YOLO#
Giới thiệu#
Trong lĩnh vực machine learning và computer vision, quy trình diễn giải dữ liệu trực quan thường được gọi là suy luận hoặc dự đoán. Ultralytics YOLO26 cung cấp một tính năng mạnh mẽ có tên là predict mode, được thiết kế cho suy luận hiệu năng cao, thời gian thực trên nhiều nguồn dữ liệu.
Xem bản xem trước YOLO27 chưa phát hành để biết các ví dụ suy luận dự kiến.
Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀
Ứng dụng trong 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 cho suy luận?#
Dưới đây là những lý do bạn nên cân nhắc predict mode của YOLO26 cho các nhu cầu suy luận khác nhau:
- Tính linh hoạt: Có thể thực hiện suy luận trên hình ảnh, video và 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 ảnh hưởng đến độ chính xác.
- Dễ sử dụng: Các interface Python và CLI trực quan giúp triển khai và kiểm thử nhanh chóng.
- Khả năng tùy chỉnh cao: Cung cấp nhiều cài đặt và tham số để điều chỉnh hành vi suy luận của model theo yêu cầu cụ thể.
- Sẵn sàng cho production: Triển khai model dưới dạng inference endpoint của Ultralytics Platform với khả năng tự động mở rộng và giám sát, hoặc chạy suy luận cục bộ.
Các tính năng chính của Predict Mode#
predict mode của YOLO26 được thiết kế mạnh mẽ và linh hoạt, với các tính năng:
- Tương thích với nhiều nguồn dữ liệu: Dù dữ liệu của bạn là các hình ảnh riêng lẻ, một tập hợp hình ảnh, các file video hay luồng video thời gian thực, predict mode đều có thể xử lý.
- Streaming Mode: Sử dụng tính năng streaming để tạo generator tiết kiệm bộ nhớ gồm các object
Results. Bật tính năng này bằng cách thiết lậpstream=Truetrong phương thức gọi của predictor. Khác với hành vi mặc định (stream=False) trả về một list chứa tất cả kết quả,stream=Truetrả về từng kết quả một, đặc biệt hữu ích cho video dài và các luồng trực tiếp. - Xử lý theo batch: Xử lý nhiều hình ảnh hoặc frame video trong một batch, tiếp tục giảm tổng thời gian suy luận.
- Dễ dàng tích hợp: Dễ dàng tích hợp với các data pipeline hiện có và các thành phần phần mềm khác nhờ API linh hoạt.
Các model Ultralytics YOLO trả về một Python list gồm các object Results hoặc một generator tiết kiệm bộ nhớ gồm các object Results khi truyền stream=True vào model trong quá trình suy luận:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # pretrained YOLO26n 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 diskNguồn suy luận#
YOLO26 có thể xử lý nhiều loại nguồn input khác nhau để suy luận, như minh họa trong bảng bên dưới. Các nguồn bao gồm hình ảnh tĩnh, luồng video và nhiều định dạng dữ liệu khác nhau. Bảng cũng cho biết mỗi nguồn có thể được sử dụng ở streaming mode với tham số stream=True ✅ hay không. Streaming mode hữu ích khi xử lý video hoặc luồng trực tiếp vì tạo một generator kết quả thay vì nạp toàn bộ frame vào bộ nhớ.
Sử dụng stream=True để xử lý video dài hoặc dataset lớn nhằm quản lý bộ nhớ hiệu quả. Khi stream=False, kết quả của tất cả frame hoặc điểm dữ liệu được lưu trong bộ nhớ, nhanh chóng làm tăng mức sử dụng bộ nhớ và gây lỗi hết bộ nhớ với input lớn. Ngược lại, stream=True sử dụng generator chỉ giữ kết quả của frame hoặc điểm dữ liệu hiện tại trong bộ nhớ, 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 | Ví dụ | Kiểu | Ghi chú |
|---|---|---|---|
| image | 'image.jpg' | str hoặc Path | File hình ảnh đơn. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL của một hình ảnh. |
| screenshot | 'screen' | str | Chụp ảnh màn hình. |
| PIL | Image.open('image.jpg') | PIL.Image | Định dạng HWC với các channel RGB. |
| OpenCV | cv2.imread('image.jpg') | np.ndarray | Định dạng HWC với các channel BGR uint8 (0-255). |
| NumPy | np.zeros((640,1280,3)) | np.ndarray | Định dạng HWC với các channel BGR uint8 (0-255). |
| torch | torch.zeros(16,3,320,640) | torch.Tensor | Định dạng BCHW với các channel RGB float32 (0.0-1.0). |
| CSV | 'sources.csv' | str hoặc Path | File CSV chứa đường dẫn đến hình ả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. |
| directory ✅ | 'path/' | str hoặc Path | Đường dẫn đến thư mục chứa hình ảnh hoặc video. |
| glob ✅ | 'path/*.jpg' | str | Mẫu Glob để khớp nhiều file. Sử dụng ký tự * làm wildcard. |
| YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | URL của một video YouTube. |
| stream ✅ | 'rtsp://example.com/media.mp4' | str | URL cho các giao thức streaming như RTSP, RTMP, TCP hoặc một địa chỉ IP. |
| multi-stream ✅ | 'list.streams' | str hoặc Path | File văn bản *.streams với một URL stream trên mỗi dòng, tức là 8 stream sẽ chạy với batch-size bằng 8. |
| webcam ✅ | 0 | int | Index của thiết bị camera được kết nối để thực hiện suy luận. |
Dưới đây là các ví dụ code sử dụng từng loại nguồn:
Thực hiện suy luận trên một file hình ảnh.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Define path to the image file
source = "path/to/image.jpg"
# Run inference on the source
results = model(source) # list of Results objectsCác tham số suy luận#
model.predict() chấp nhận nhiều tham số có thể được truyền tại thời điểm suy luận để ghi đè các giá trị mặc định:
Kích thước cố định so với hình chữ nhật tối thiểu (rect)#
Theo mặc định, predict sử dụng rect=True, cho phép padding hình chữ nhật tối thiểu khi có thể. Hình ảnh được scale để nằm trong imgsz và chỉ được padding đến bội số stride gần nhất, vì vậy tensor cuối cùng có thể nhỏ hơn imgsz. Padding hình chữ nhật tối thiểu chỉ được sử dụng khi tất cả hình ảnh trong batch có cùng shape và backend hỗ trợ tính năng này (PyTorch .pt, hoặc ONNX / Triton động). Nếu không, hình ảnh sẽ được padding đến target imgsz đầy đủ.
Sử dụng rect=False để luôn padding đến target imgsz đầy đủ. Cách này được khuyến nghị khi bạn cần kích thước input cố định để khớp với các model đã export (ONNX, TensorRT, v.v.).
imgsz dạng số nguyên so với tuple
- Một số nguyên
imgsz=640sẽ trở thành target hình vuông(640, 640)sau khi làm tròn theo stride. - Một tuple
imgsz=(384, 672)thiết lập target hình chữ nhật. Vớirect=Truevàauto=True, tensor thực tế có thể nhỏ hơn target này.
Training so với predict/export
Training chỉ chấp nhận một số nguyên duy nhất imgsz (list [h, w] sẽ được chuyển thành giá trị lớn nhất). Predict và export chấp nhận một số nguyên hoặc tuple (height, width).
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on 'bus.jpg' with arguments
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)Các đối số inference:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
source | str hoặc int hoặc None | None | Chỉ định nguồn dữ liệu cho inference. Có thể là đường dẫn image, file video, thư mục, URL hoặc ID thiết bị cho luồng trực tiếp. Nếu bỏ qua, một cảnh báo sẽ được ghi log và model sẽ chuyển về các asset demo tích hợp sẵn (ultralytics/assets hoặc URL demo cho OBB). 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 confidence tối thiểu cho các detection. Các object được phát hiện với confidence thấp hơn ngưỡng này sẽ bị loại bỏ. Điều chỉnh giá trị này có thể giúp giảm false positive. |
iou | float | 0.7 | Ngưỡng Intersection Over Union (IoU) cho Non-Maximum Suppression (NMS). Giá trị thấp hơn tạo ra ít detection hơn bằng cách loại bỏ các box chồng lấn, hữu ích để giảm các detection trùng lặp. |
imgsz | int hoặc tuple | 640 | Đích letterbox. Một số nguyên tạo ra N×N hình vuông; một tuple tạo ra (height, width). Với rect=True, tensor thực tế có thể nhỏ hơn đích này do padding minimum-rectangle. Sử dụng rect=False cho kích thước cố định. Xem Fixed shape vs minimum rectangle. |
rect | bool | True | Nếu True, sử dụng padding minimum-rectangle khi có thể (batch cùng shape và backend được hỗ trợ). Nếu False, luôn padding đến đầy đủ imgsz. Xem Fixed shape vs minimum rectangle. |
quantize | int hoặc str | None | Độ chính xác suy luận: 16/"fp16" và 32/"fp32"/chưa thiết lập chọn tính toán FP16 hoặc FP32 cho các model PyTorch và TorchScript; các định dạng khác tính toán ở độ chính xác mà artifact và runtime của chúng chọn. Tại 16, OpenVINO vẫn làm tròn FP16 đầu vào ở phía client và mở rộng lại thành FP32, mà không làm thay đổi độ chính xác mà runtime tính toán. Lượng tử hóa INT8/PTQ được cấu hình trong quá trình export, sau đó được sử dụng bằng cách tải model đã export. Thay thế cờ half đã lỗi thời. |
device | str | None | Chỉ định thiết bị cho inference (ví dụ: cpu, cuda:0, 0, npu hoặc npu:0). Cho phép người dùng chọn CPU, một GPU cụ thể, Huawei Ascend NPU hoặc các thiết bị tính toán khác để chạy model. |
dnn | bool | False | Nếu True, sử dụng module DNN của OpenCV thay cho ONNX Runtime để inference model ONNX. |
data | str | None | Đường dẫn đến YAML của dataset (ví dụ: coco8.yaml), chỉ được đọc để lấy names và chỉ khi model đã load không có tên class riêng: chẳng hạn export của bên thứ ba hoặc export Ultralytics bị tách khỏi metadata đi kèm. Nếu không, model như vậy sẽ báo cáo class0, class1 và tiếp tục như vậy. |
batch | int | 1 | Chỉ định batch size cho inference (chỉ hoạt động khi source là thư mục, file video hoặc file .txt). Batch size lớn hơn có thể cung cấp throughput cao hơn, rút ngắn tổng thời gian cần thiết cho inference. |
max_det | int | 300 | Số detection tối đa được phép trên mỗi image. Giới hạn tổng số object mà model có thể phát hiện trong một lần inference, ngăn output quá mức trong các cảnh dày đặc. |
vid_stride | int | 1 | Frame stride cho input video. Cho phép bỏ qua các frame trong video để tăng tốc xử lý, đánh đổi bằng độ phân giải theo thời gian. Giá trị 1 xử lý mọi frame; các giá trị cao hơn sẽ bỏ qua frame. |
stream_buffer | bool | False | Xác định có xếp hàng các frame đến trong video stream hay không. Nếu False, các frame cũ sẽ bị loại bỏ để tiếp nhận frame mới (tối ưu cho ứng dụng real-time). Nếu True, các frame mới được xếp vào buffer, đảm bảo không bỏ qua frame nào nhưng sẽ gây latency nếu FPS inference thấp hơn FPS của stream. |
visualize | bool | False | Lưu heatmap kích hoạt class cạnh mỗi prediction, cho biết pixel nào làm tăng score của class được dự đoán. Tuân theo conf và classes, vì vậy classes=[0] chỉ ánh xạ class đó. Chỉ khả dụng cho model PyTorch của Ultralytics. |
augment | bool | False | Bật test-time augmentation (TTA) cho prediction, có khả năng cải thiện độ robust của detection nhưng làm giảm tốc độ inference. Chỉ khả dụng cho model PyTorch của Ultralytics. |