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. |
agnostic_nms | bool | False | Bật Non-Maximum Suppression (NMS) không phân biệt lớp, giúp loại bỏ các hộp chồng lấp có điểm số thấp hơn trên các lớp khác nhau thay vì chỉ trong cùng một lớp. Hữu ích trong các kịch bản phát hiện đa lớp nơi hiện tượng chồng lấp lớp là phổ biến. Với suy luận không có NMS (nms=False trên YOLO26 hoặc YOLOv10), điều này chỉ ngăn cản cùng một phát hiện xuất hiện với nhiều nhãn lớp (bản sao IoU=1.0) chứ không thực hiện việc loại bỏ dựa trên ngưỡng IoU giữa các hộp riêng biệt. |
classes | list[int] | None | Lọc prediction theo một tập ID class. Chỉ các detection thuộc những class được chỉ định mới được trả về. Hữu ích khi tập trung vào các object liên quan trong tác vụ detection đa class. |
retina_masks | bool | False | Trả về mask segmentation độ phân giải cao. Nếu được bật, các mask trả về (masks.data) sẽ khớp với kích thước image gốc. Nếu bị tắt, chúng có kích thước image được sử dụng trong inference. |
embed | list[int] | None | Chỉ định các layer cần dùng để trích xuất vector đặc trưng hoặc embedding. Sử dụng model.embed(source) cho embedding của layer áp chót hoặc model.predict(source, embed=[layer]) để chọn các layer cụ thể. Hữu ích cho các tác vụ downstream như clustering hoặc tìm kiếm tương đồng. Chỉ khả dụng cho model PyTorch của Ultralytics. |
project | str | None | Tên thư mục project nơi output prediction được lưu nếu save được bật. |
name | str | None | Tên của prediction run. Được sử dụng để tạo thư mục con trong thư mục project, nơi lưu output prediction nếu save được bật. |
stream | bool | False | Bật xử lý tiết kiệm bộ nhớ cho video dài hoặc số lượng lớn image bằng cách trả về một generator của các object Results thay vì load tất cả frame vào bộ nhớ cùng lúc. |
verbose | bool | True | Kiểm soát việc hiển thị log inference chi tiết trong terminal, cung cấp phản hồi real-time về quá trình prediction. |
compile | bool hoặc str | False | Bật biên dịch graph PyTorch 2.x torch.compile với backend='inductor'. Chấp nhận True → "default", False → tắt, hoặc một mode chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Nếu không được hỗ trợ, sẽ chuyển về eager mode kèm cảnh báo. |
channels_last | bool | None | Sử dụng định dạng bộ nhớ channels_last (NHWC) cho inference PyTorch native. None tự động bật trên CPU x86 Linux và Windows có oneDNN với PyTorch 1.13 trở lên, False tắt, còn True yêu cầu bật trên CPU x86 hoặc thiết bị CUDA được hỗ trợ. ARM64, MPS, các phiên bản PyTorch cũ hơn, CPU không có oneDNN và các định dạng đã export như TensorRT và ONNX vẫn không thay đổi. |
nms | bool, tùy chọn | None | Chạy suy luận một-nhiều với NMS theo mặc định (None hoặc True). Đặt False để sử dụng phần đầu một-một không có NMS khi khả dụng. Xem hướng dẫn Phát hiện Đầu-cuối để biết chi tiết. |
Các đối số visualization:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
show | bool | False | Nếu True, hiển thị image hoặc video đã được annotate trong một cửa sổ. Hữu ích để nhận phản hồi trực quan ngay lập tức trong quá trình development hoặc testing. |
save | bool | False or True | Bật lưu image hoặc video đã được annotate vào file. Hữu ích cho documentation, phân tích thêm hoặc chia sẻ kết quả. Mặc định là True khi sử dụng CLI và False khi sử dụng trong Python. |
save_frames | bool | False | Khi xử lý video, lưu từng frame riêng lẻ dưới dạng image. Hữu ích để trích xuất các frame cụ thể hoặc phân tích chi tiết từng frame. |
save_txt | bool | False | Lưu kết quả detection vào file text theo định dạng [class] [x_center] [y_center] [width] [height] [confidence]. Hữu ích để tích hợp với các công cụ phân tích khác. |
save_conf | bool | False | Bao gồm score confidence trong các file text đã lưu. Tăng mức độ chi tiết sẵn có cho post-processing và phân tích. |
save_crop | bool | False | Lưu các image đã crop của detection. Hữu ích cho augmentation dataset, phân tích hoặc tạo dataset tập trung vào các object cụ thể. |
show_labels | bool | True | Hiển thị label cho mỗi detection trong output trực quan. Cung cấp nhận biết tức thì về các object được phát hiện. |
show_conf | bool | True | Hiển thị score confidence cho mỗi detection bên cạnh label. Cung cấp thông tin về mức độ chắc chắn của model đối với từng detection. |
show_boxes | bool | True | Vẽ bounding box xung quanh các object được phát hiện. Đây là thành phần thiết yếu để nhận diện trực quan và xác định vị trí object trong image hoặc frame video. |
line_width | int or None | None | Chỉ định độ rộng đường viền của bounding box. Nếu None, độ rộng đường viền sẽ được tự động điều chỉnh dựa trên kích thước image. Cung cấp khả năng tùy chỉnh trực quan để tăng độ rõ ràng. |
Định dạng hình ảnh và video#
YOLO26 hỗ trợ nhiều định dạng hình ảnh và video, như được chỉ định trong ultralytics/data/utils.py. Xem các bảng bên dưới để biết các hậu tố hợp lệ và lệnh predict mẫu.
Ảnh#
Bảng dưới đây chứa các định dạng hình ảnh Ultralytics hợp lệ.
Các định dạng HEIC/HEIF yêu cầu pi-heif, được tự động cài đặt trong lần sử dụng đầu tiên. AVIF được Pillow hỗ trợ nguyên bản.
| Hậu tố hình ảnh | Lệnh Predict mẫu | Tham khảo |
|---|---|---|
.avif | yolo predict source=image.avif | Định dạng tệp hình ảnh AV1 |
.bmp | yolo predict source=image.bmp | Định dạng tệp BMP của Microsoft |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | Định dạng ảnh hiệu suất cao |
.heif | yolo predict source=image.heif | Định dạng ảnh hiệu suất cao |
.jp2 | yolo predict source=image.jp2 | JPEG 2000 |
.jpeg | yolo predict source=image.jpeg | JPEG |
.jpg | yolo predict source=image.jpg | JPEG |
.mpo | yolo predict source=image.mpo | Đối tượng đa ảnh |
.png | yolo predict source=image.png | Đồ họa mạng di động |
.tif | yolo predict source=image.tif | Định dạng tệp ảnh có thẻ |
.tiff | yolo predict source=image.tiff | Định dạng tệp ảnh có thẻ |
.webp | yolo predict source=image.webp | WebP |
Video#
Bảng dưới đây liệt kê các định dạng video hợp lệ của Ultralytics.
| Hậu tố video | Lệnh Predict 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 | Xen kẽ âm thanh và video |
.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 | Luồng truyền tải MPEG |
.wmv | yolo predict source=video.wmv | Video Windows Media |
.webm | yolo predict source=video.webm | Dự án WebM |
Làm việc với kết quả#
Tất cả các lệnh gọi predict() của Ultralytics sẽ trả về một danh sách các đối tượng Results:
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.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 inferenceCác đối tượng Results có các thuộc tính sau:
| Thuộc tính | Kiểu | Mô tả |
|---|---|---|
orig_img | np.ndarray | Ảnh gốc dưới dạng mảng NumPy. |
orig_shape | tuple | Kích thước ảnh gốc theo định dạng (height, width). |
boxes | Boxes, optional | Đối tượng Boxes chứa các bbox phát hiện được. |
masks | Masks, optional | Đối tượng Masks chứa các mask phát hiện được. |
probs | Probs, optional | Đối tượng Probs chứa xác suất của từng class cho tác vụ phân loại. |
keypoints | Keypoints, optional | Đối tượng Keypoints chứa các keypoint được phát hiện cho từng đối tượng. |
obb | OBB, optional | Đối tượng OBB chứa các bbox có hướng. |
semantic_mask | SemanticMask, optional | Đối tượng SemanticMask chứa bản đồ class dày đặc theo từng pixel. |
speed | dict | Một dictionary ánh xạ tốc độ tiền xử lý, suy luận và hậu xử lý theo mili giây trên mỗi ảnh. |
names | dict | Một dictionary ánh xạ chỉ số class với tên class. |
path | str | Đường dẫn đến tệp ảnh. |
save_dir | str, optional | Thư mục lưu kết quả. |
Kết quả theo tác vụ#
Các trường bên dưới được điền dữ liệu tùy thuộc vào tác vụ của model của bạn — hãy so sánh detection, segmentation, semantic segmentation, depth estimation, classification, pose, và OBB nếu bạn chưa chọn một tác vụ. Mỗi dự đoán trả về một Results object cho mỗi ảnh hoặc khung hình. Các trường chung ở trên luôn có sẵn, trong khi dữ liệu dự đoán đặc thù của tác vụ được lưu trữ ở các trường bên dưới. Các tensor tọa độ và độ tin cậy của YOLO là torch.float32; các tensor xác suất là torch.float32 trừ khi sử dụng độ chính xác bán phần (half precision), khi đó là torch.float16. Sau result.numpy(), các tensor trở thành các mảng NumPy với các kiểu dữ liệu NumPy tương ứng. Các mặt nạ thể hiện (instance mask) là các tensor nhị phân torch.uint8, trong khi các mặt nạ ngữ nghĩa (semantic mask) sử dụng kiểu dữ liệu số nguyên nhỏ nhất có thể cho ID lớp: torch.uint8, torch.int16, hoặc torch.int32, tùy thuộc vào số lượng lớp.
| Thuộc tính | Kiểu | Shape | Mô tả |
|---|---|---|---|
result.boxes | Boxes | (N) | Các box của detection. |
result.boxes.data | torch.float32 | (N,6/7) | [x1,y1,x2,y2,conf,cls] thô, cùng track ID tùy chọn. |
result.boxes.xyxy | torch.float32 | (N,4) | Các box pixel xyxy. |
result.boxes.conf | torch.float32 | (N,) | Điểm độ tin cậy. |
result.boxes.cls | torch.float32 | (N,) | ID class; chuyển kiểu sang int để lấy tên. |
Các đối tượng Results có các phương thức sau:
| Method | Kiểu trả về | Mô tả |
|---|---|---|
update() | None | Cập nhật đối tượng Results với dữ liệu mới như boxes, masks, probs, obb, keypoints hoặc semantic masks. |
cpu() | Results | Trả về một bản sao của đối tượng Results với tất cả tensor được chuyển vào bộ nhớ CPU. |
numpy() | Results | Trả về một bản sao của đối tượng Results với tất cả tensor được chuyển đổi thành các mảng NumPy. |
cuda() | Results | Trả về một bản sao của đối tượng Results với tất cả tensor được chuyển vào 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 sang device và dtype được chỉ định. |
new() | Results | Tạo một đối tượng Results mới với cùng các thuộc tính image, path, names và speed. |
plot() | np.ndarray | Vẽ kết quả detection trên ảnh BGR đầu vào và trả về ảnh đã được chú thích. |
show() | None | Hiển thị ảnh cùng kết quả suy luận đã được chú thích. |
save() | str | Lưu ảnh kết quả suy luận đã được chú thích vào tệp và trả về tên tệp. |
verbose() | str | Trả về một chuỗi log cho từng tác vụ, nêu chi tiết kết quả detection và classification. |
save_txt() | str | Lưu kết quả detection vào tệp văn bản và trả về đường dẫn đến tệp đã lưu. |
save_crop() | None | Lưu các ảnh detection đã crop 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 dictionary tóm tắt với tùy chọn chuẩn hóa. |
to_df() | DataFrame | Chuyển đổi kết quả detection thành Polars DataFrame. |
to_csv() | str | Chuyển đổi kết quả detection sang định dạng CSV. |
to_json() | str | Chuyển đổi kết quả detection sang định dạng JSON. |
Để biết thêm chi tiết, hãy xem tài liệu về class Results.
Box#
Có thể sử dụng đối tượng Boxes để lập chỉ mục, thao tác và chuyển đổi bbox sang các định dạng khác nhau.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.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 boxesDưới đây là bảng về các phương thức và thuộc tính của class Boxes, bao gồm tên, kiểu và mô tả:
| Tên | Kiểu | Mô tả |
|---|---|---|
cpu() | Method | Chuyển đối tượng vào bộ nhớ CPU. |
numpy() | Method | Chuyển đổi đối tượng thành mảng NumPy. |
cuda() | Method | Chuyển đối tượng vào bộ nhớ CUDA. |
to() | Method | Chuyển đối tượng sang device được chỉ định. |
xyxy | Thuộc tính (torch.Tensor) | Trả về các box theo định dạng xyxy. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị độ tin cậy của các box. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị class của các box. |
id | Thuộc tính (torch.Tensor) | Trả về track ID của các box (nếu có). |
xywh | Thuộc tính (torch.Tensor) | Trả về các box theo định dạng xywh. |
xyxyn | Thuộc tính (torch.Tensor) | Trả về các box theo định dạng xyxy được chuẩn hóa theo kích thước ảnh gốc. |
xywhn | Thuộc tính (torch.Tensor) | Trả về các box theo định dạng xywh được chuẩn hóa theo kích thước ảnh gốc. |
Để biết thêm chi tiết, hãy xem tài liệu về class Boxes.
Mask#
Có thể sử dụng đối tượng Masks để lập chỉ mục, thao tác và chuyển đổi mask thành các segment.
from ultralytics import YOLO
# Load a pretrained YOLO26n-seg Segment model
model = YOLO("yolo26n-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 masksDưới đây là bảng về các phương thức và thuộc tính của class Masks, bao gồm tên, kiểu và mô tả:
| Tên | Kiểu | Mô tả |
|---|---|---|
data | Thuộc tính (torch.Tensor) | Tensor mask nhị phân torch.uint8 có shape (N,H,W) và các giá trị 0 hoặc 1. |
cpu() | Method | Trả về tensor mask trong bộ nhớ CPU. |
numpy() | Method | Trả về tensor mask dưới dạng mảng NumPy. |
cuda() | Method | Trả về tensor mask trong bộ nhớ GPU. |
to() | Method | Trả về tensor mask với device và dtype được chỉ định. |
xyn | Thuộc tính (list[np.ndarray]) | Danh sách các polygon mask đã chuẩn hóa. |
xy | Thuộc tính (list[np.ndarray]) | Danh sách các polygon mask theo tọa độ pixel. |
Để biết thêm chi tiết, hãy xem tài liệu về class Masks.
SemanticMask#
SemanticMask lưu một bản đồ class dày đặc cho kết quả semantic segmentation. Không giống Masks, đối tượng này không chứa một mask nhị phân cho mỗi đối tượng và không cung cấp các helper cho polygon.
from ultralytics import YOLO
# Load a pretrained YOLO26n-sem Semantic model
model = YOLO("yolo26n-sem.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.semantic_mask.data) # print the H x W class-ID map| Tên | Kiểu | Mô tả |
|---|---|---|
data | Thuộc tính (torch.Tensor) | Bản đồ ID class có shape (H,W). Dtype là torch.uint8, torch.int16 hoặc torch.int32, được chọn theo số lượng class. |
shape | Thuộc tính (tuple) | Shape của bản đồ class, thường khớp với result.orig_shape. |
cpu() | Method | Trả về tensor mask ngữ nghĩa trong bộ nhớ CPU. |
numpy() | Method | Trả về tensor mask ngữ nghĩa dưới dạng mảng NumPy. |
cuda() | Method | Trả về tensor mask ngữ nghĩa trong bộ nhớ GPU. |
to() | Method | Trả về tensor mask ngữ nghĩa với device và dtype được chỉ định. |
Keypoint#
Đối tượng Keypoints có thể được dùng để lập chỉ mục, thao tác và chuẩn hóa các tọa độ.
from ultralytics import YOLO
# Load a pretrained YOLO26n-pose Pose model
model = YOLO("yolo26n-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 keypointsDưới đây là bảng về các phương thức và thuộc tính của class Keypoints, bao gồm tên, kiểu và mô tả:
| Tên | Kiểu | Mô tả |
|---|---|---|
cpu() | Method | Trả về tensor keypoint trong bộ nhớ CPU. |
numpy() | Method | Trả về tensor keypoint dưới dạng mảng NumPy. |
cuda() | Method | Trả về tensor keypoint trong bộ nhớ GPU. |
to() | Method | Trả về tensor keypoint với device và dtype được chỉ định. |
xyn | Thuộc tính (torch.Tensor) | Danh sách các keypoint đã được chuẩn hóa, được biểu diễn dưới dạng tensor. |
xy | Thuộc tính (torch.Tensor) | Danh sách các keypoint trong tọa độ pixel, được biểu diễn dưới dạng tensor. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị confidence của keypoint nếu có, nếu không thì trả về None. |
Để biết thêm chi tiết, hãy xem tài liệu về class Keypoints.
Probs#
Đối tượng Probs có thể được dùng để lấy các chỉ số và score phân loại top1 và top5.
from ultralytics import YOLO
# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-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 probabilitiesDưới đây là bảng tóm tắt các phương thức và thuộc tính của class Probs:
| Tên | Kiểu | Mô tả |
|---|---|---|
cpu() | Method | Trả về một bản sao của tensor probs trong bộ nhớ CPU. |
numpy() | Method | Trả về một bản sao của tensor probs dưới dạng mảng NumPy. |
cuda() | Method | Trả về một bản sao của tensor probs trong bộ nhớ GPU. |
to() | Method | Trả về một bản sao của tensor probs với device và dtype được chỉ định. |
top1 | Thuộc tính (int) | Chỉ số của class top 1. |
top5 | Thuộc tính (list[int]) | Các chỉ số của 5 class hàng đầu. |
top1conf | Thuộc tính (torch.Tensor) | Confidence của class top 1. |
top5conf | Thuộc tính (torch.Tensor) | Confidence của 5 class hàng đầu. |
Để biết thêm chi tiết, hãy xem tài liệu về class Probs.
OBB#
Đối tượng OBB có thể được dùng để lập chỉ mục, thao tác và chuyển đổi các bounding box định hướng sang các format khác nhau.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n-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 boxesDưới đây là bảng về các phương thức và thuộc tính của class OBB, bao gồm tên, kiểu và mô tả:
| Tên | Kiểu | Mô tả |
|---|---|---|
cpu() | Method | Chuyển đối tượng vào bộ nhớ CPU. |
numpy() | Method | Chuyển đổi đối tượng thành mảng NumPy. |
cuda() | Method | Chuyển đối tượng vào bộ nhớ CUDA. |
to() | Method | Chuyển đối tượng sang device được chỉ định. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị độ tin cậy của các box. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị class của các box. |
id | Thuộc tính (torch.Tensor) | Trả về track ID của các box (nếu có). |
xyxy | Thuộc tính (torch.Tensor) | Trả về các box ngang ở format xyxy. |
xywhr | Thuộc tính (torch.Tensor) | Trả về các box xoay ở format xywhr. |
xyxyxyxy | Thuộc tính (torch.Tensor) | Trả về các box xoay ở format xyxyxyxy. |
xyxyxyxyn | Thuộc tính (torch.Tensor) | Trả về các box xoay ở format xyxyxyxy được chuẩn hóa theo kích thước ảnh. |
Để biết thêm chi tiết, hãy xem tài liệu về class OBB.
Vẽ kết quả#
Phương thức plot() trong các đối tượng Results hỗ trợ trực quan hóa dự đoán bằng cách phủ các đối tượng được phát hiện (chẳng hạn như bounding box, mask, keypoint và xác suất) lên ảnh gốc. Phương thức này trả về ảnh đã chú thích dưới dạng mảng NumPy, giúp dễ dàng hiển thị hoặc lưu ảnh.
from PIL import Image
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.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")Tham số của phương thức plot()#
Phương thức plot() hỗ trợ nhiều đối số để tùy chỉnh đầu ra:
| Đối số | Kiểu | Mô tả | Mặc định |
|---|---|---|---|
conf | bool | Bao gồm các confidence score của detection. | True |
line_width | float | Độ rộng đường viền của bounding box. Tỷ lệ thay đổi theo kích thước ảnh nếu None. | None |
font_size | float | Cỡ font của văn bản. Tỷ lệ thay đổi theo kích thước ảnh nếu None. | None |
font | str | Tên font cho văn bản chú thích. | 'Arial.ttf' |
pil | bool | Trả về ảnh dưới dạng đối tượng PIL Image. | False |
img | np.ndarray | torch.Tensor | Ảnh thay thế. Tensor phải liên tục và có dạng HWC BGR uint8. | None |
kpt_radius | int | Bán kính của keypoint được vẽ. | 5 |
kpt_line | bool | Nối các keypoint bằng đường thẳng. | True |
labels | bool | Bao gồm nhãn class trong phần chú thích. | True |
boxes | bool | Phủ bounding box lên ảnh. | True |
masks | bool | Phủ mask lên ả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 ảnh đã chú thích bằng trình xem ảnh mặc định. | False |
save | bool | Lưu ảnh đã chú thích vào file được chỉ định bởi filename. | False |
filename | str | Đường dẫn và tên file dùng để lưu ảnh đã chú thích nếu save là True. | None |
color_mode | str | Chỉ định color mode, ví dụ 'instance' hoặc 'class'. | 'class' |
txt_color | tuple[int, int, int] | Màu văn bản BGR cho bounding box và nhãn phân loại ảnh. | (255, 255, 255) |
Suy luận an toàn luồng#
Đảm bảo an toàn luồng trong quá trình inference là rất quan trọng khi bạn chạy nhiều model YOLO song song trên các luồng khác nhau. Inference an toàn luồng đảm bảo dự đoán của mỗi luồng được cô lập và không ảnh hưởng lẫn nhau, giúp tránh các race condition cũng như đảm bảo đầu ra nhất quán và đáng tin cậy.
Khi sử dụng model YOLO trong ứng dụng đa luồng, điều quan trọng là khởi tạo các đối tượng model riêng cho từng luồng hoặc sử dụng thread-local storage để ngăn xung đột:
Khởi tạo một model duy nhất bên trong mỗi luồng để thực hiện inference 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=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()Để xem chi tiết về inference an toàn luồng với model YOLO và hướng dẫn từng bước, vui lòng tham khảo Hướng dẫn inference YOLO an toàn luồng. Hướng dẫn này cung cấp mọi thông tin cần thiết để tránh các lỗi thường gặp và đảm bảo inference đa luồng của bạn hoạt động ổn định.
Vòng lặp for-loop cho nguồn streaming#
Dưới đây là script Python sử dụng OpenCV (cv2) và YOLO để thực hiện inference trên các frame video. Script này giả định rằng bạn đã cài đặt các package cần thiết (opencv-python và ultralytics).
import cv2
from ultralytics import YOLO
# Load the YOLO model
model = YOLO("yolo26n.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 dự đoán trên từng frame của video, trực quan hóa kết quả và hiển thị chúng trong một cửa sổ. Có thể thoát vòng lặp bằng cách nhấn 'q'.
Tiếp theo là gì?#
Đã sẵn sàng vượt qua giai đoạn sử dụng model pretrained? Xác nhận task của bạn phù hợp với bài toán, định dạng dữ liệu của riêng bạn bằng hướng dẫn Datasets, sau đó train trên dữ liệu đó.
FAQ#
Ultralytics YOLO là một model hiện đại cho phát hiện đối tượng, phân đoạn instance, phân đoạn ngữ nghĩa, ước tính độ sâu và phân loại theo thời gian thực. predict mode cho phép người dùng thực hiện inference tốc độ cao trên nhiều nguồn dữ liệu như ảnh, video và luồng trực tiếp. Được thiết kế để mang lại hiệu năng và tính linh hoạt, mode này cũng hỗ trợ xử lý theo batch và streaming. Để biết thêm chi tiết về các tính năng, hãy xem predict mode của Ultralytics YOLO.
Ultralytics YOLO có thể xử lý nhiều nguồn dữ liệu, bao gồm ảnh riêng lẻ, video, thư mục, URL và stream. 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 ảnh cục bộ hoặc'https://ultralytics.com/images/bus.jpg'cho URL. Hãy xem các ví dụ chi tiết về nhiều nguồn inference trong tài liệu.Để tối ưu tốc độ inference và quản lý bộ nhớ hiệu quả, bạn có thể sử dụng streaming mode bằng cách thiết lập
stream=Truetrong phương thức call của predictor. Streaming mode tạo một generator tiết kiệm bộ nhớ gồm các đối tượngResultsthay vì tải tất cả frame vào bộ nhớ. Streaming mode đặc biệt hữu ích khi xử lý video dài hoặc dataset lớn. Tìm hiểu thêm về streaming mode.Phương thức
model.predict()trong YOLO hỗ trợ nhiều đối số nhưconf,iou,imgsz,devicevà nhiều đối số khác. Các đối số này cho phép bạn tùy chỉnh quy trình inference, thiết lập các tham số như ngưỡng confidence, kích thước ảnh và device dùng cho tính toán. Mô tả chi tiết về các đối số này có trong phần đối số inference.Sử dụng
model.embed(source)để trích xuất feature embedding từ layer áp chót hoặc truyềnembed=[layer_index]vàomodel.predict()để chọn các layer cụ thể.from ultralytics import YOLO model = YOLO("yolo26n.pt") source = "https://ultralytics.com/images/bus.jpg" results = model.predict(source) # Results objects embeddings = model.embed(source) # list of torch.Tensor embeddingsSau khi chạy inference với YOLO, các đối tượng
Resultschứa các phương thức để hiển thị và lưu ảnh đã 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ả. Mọi thư mục cha còn thiếu trong đường dẫn file sẽ được tự động tạo (ví dụ:result.save("path/to/result.jpg")). Để xem 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ả.