Ultralytics YOLO27:

Dự đoán model với Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Giới thiệu#

Trong lĩnh vực machine learningcomputer 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ấtThể thaoAn toàn
Phát hiện phụ tùng xePhá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ập stream=True trong 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=True trả 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:

Predict
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 disk

Nguồ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ớ.

Mẹo

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ồnVí dụKiểuGhi chú
image'image.jpg'str hoặc PathFile hình ảnh đơn.
URL'https://ultralytics.com/images/bus.jpg'strURL của một hình ảnh.
screenshot'screen'strChụp ảnh màn hình.
PILImage.open('image.jpg')PIL.ImageĐịnh dạng HWC với các channel RGB.
OpenCVcv2.imread('image.jpg')np.ndarrayĐịnh dạng HWC với các channel BGR uint8 (0-255).
NumPynp.zeros((640,1280,3))np.ndarrayĐịnh dạng HWC với các channel BGR uint8 (0-255).
torchtorch.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 PathFile CSV chứa đường dẫn đến hình ảnh, video hoặc thư mục.
video ✅'video.mp4'str hoặc PathFile 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'strMẫu Glob để khớp nhiều file. Sử dụng ký tự * làm wildcard.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strURL của một video YouTube.
stream ✅'rtsp://example.com/media.mp4'strURL 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 PathFile 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 ✅0intIndex 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:

Nguồn dự đoá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 objects

Cá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=640 sẽ 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ới rect=Trueauto=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).

Ví dụ
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ểuMặc địnhMô tả
sourcestr hoặc int hoặc NoneNoneChỉ đị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.
conffloat0.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.
ioufloat0.7Ngưỡ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.
imgszint hoặc tuple640Đí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.
rectboolTrueNế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.
quantizeint hoặc strNoneĐộ chính xác suy luận: 16/"fp16"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.
devicestrNoneChỉ đị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.
dnnboolFalseNếu True, sử dụng module DNN của OpenCV thay cho ONNX Runtime để inference model ONNX.
datastrNoneĐườ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.
batchint1Chỉ đị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_detint300Số 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_strideint1Frame 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_bufferboolFalseXá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.
visualizeboolFalseLư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 confclasses, vì vậy classes=[0] chỉ ánh xạ class đó. Chỉ khả dụng cho model PyTorch của Ultralytics.
augmentboolFalseBậ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_nmsboolFalseBậ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.
classeslist[int]NoneLọ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_masksboolFalseTrả 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.
embedlist[int]NoneChỉ đị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.
projectstrNoneTên thư mục project nơi output prediction được lưu nếu save được bật.
namestrNoneTê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.
streamboolFalseBậ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.
verboseboolTrueKiể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.
compilebool hoặc strFalseBậ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_lastboolNoneSử 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.
nmsbool, tùy chọnNoneChạ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ểuMặc địnhMô tả
showboolFalseNế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.
saveboolFalse or TrueBậ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_framesboolFalseKhi 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_txtboolFalseLư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_confboolFalseBao 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_cropboolFalseLư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_labelsboolTrueHiể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_confboolTrueHiể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_boxesboolTrueVẽ 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_widthint or NoneNoneChỉ đị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ệ.

Lưu ý

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 ảnhLệnh Predict mẫuTham khảo
.avifyolo predict source=image.avifĐịnh dạng tệp hình ảnh AV1
.bmpyolo predict source=image.bmpĐịnh dạng tệp BMP của Microsoft
.dngyolo predict source=image.dngAdobe DNG
.heicyolo predict source=image.heicĐịnh dạng ảnh hiệu suất cao
.heifyolo predict source=image.heifĐịnh dạng ảnh hiệu suất cao
.jp2yolo predict source=image.jp2JPEG 2000
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoĐối tượng đa ảnh
.pngyolo predict source=image.pngĐồ họa mạng di động
.tifyolo predict source=image.tifĐịnh dạng tệp ảnh có thẻ
.tiffyolo predict source=image.tiffĐịnh dạng tệp ảnh có thẻ
.webpyolo predict source=image.webpWebP

Video#

Bảng dưới đây liệt kê các định dạng video hợp lệ của Ultralytics.

Hậu tố videoLệnh Predict mẫuTham khảo
.asfyolo predict source=video.asfĐịnh dạng hệ thống nâng cao
.aviyolo predict source=video.aviXen kẽ âm thanh và video
.gifyolo predict source=video.gifĐịnh dạng trao đổi đồ họa
.m4vyolo predict source=video.m4vMPEG-4 Phần 14
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movĐịnh dạng tệp QuickTime
.mp4yolo predict source=video.mp4MPEG-4 Phần 14 - Wikipedia
.mpegyolo predict source=video.mpegMPEG-1 Phần 2
.mpgyolo predict source=video.mpgMPEG-1 Phần 2
.tsyolo predict source=video.tsLuồng truyền tải MPEG
.wmvyolo predict source=video.wmvVideo Windows Media
.webmyolo predict source=video.webmDự á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:

Kết quả
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 inference

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

Thuộc tínhKiểuMô tả
orig_imgnp.ndarrayẢnh gốc dưới dạng mảng NumPy.
orig_shapetupleKích thước ảnh gốc theo định dạng (height, width).
boxesBoxes, optionalĐối tượng Boxes chứa các bbox phát hiện được.
masksMasks, optionalĐối tượng Masks chứa các mask phát hiện được.
probsProbs, optionalĐối tượng Probs chứa xác suất của từng class cho tác vụ phân loại.
keypointsKeypoints, optionalĐối tượng Keypoints chứa các keypoint được phát hiện cho từng đối tượng.
obbOBB, optionalĐối tượng OBB chứa các bbox có hướng.
semantic_maskSemanticMask, optionalĐối tượng SemanticMask chứa bản đồ class dày đặc theo từng pixel.
speeddictMộ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.
namesdictMột dictionary ánh xạ chỉ số class với tên class.
pathstrĐường dẫn đến tệp ảnh.
save_dirstr, optionalThư 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ínhKiểuShapeMô tả
result.boxesBoxes(N)Các box của detection.
result.boxes.datatorch.float32(N,6/7)[x1,y1,x2,y2,conf,cls] thô, cùng track ID tùy chọn.
result.boxes.xyxytorch.float32(N,4)Các box pixel xyxy.
result.boxes.conftorch.float32(N,)Điểm độ tin cậy.
result.boxes.clstorch.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:

MethodKiểu trả vềMô tả
update()NoneCậ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()ResultsTrả 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()ResultsTrả 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()ResultsTrả 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()ResultsTrả 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()ResultsTạ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.ndarrayVẽ kết quả detection trên ảnh BGR đầu vào và trả về ảnh đã được chú thích.
show()NoneHiển thị ảnh cùng kết quả suy luận đã được chú thích.
save()strLưu ảnh kết quả suy luận đã được chú thích vào tệp và trả về tên tệp.
verbose()strTrả 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()strLư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()NoneLư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()DataFrameChuyển đổi kết quả detection thành Polars DataFrame.
to_csv()strChuyển đổi kết quả detection sang định dạng CSV.
to_json()strChuyể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.

Box
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 boxes

Dướ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ênKiểuMô tả
cpu()MethodChuyển đối tượng vào bộ nhớ CPU.
numpy()MethodChuyển đổi đối tượng thành mảng NumPy.
cuda()MethodChuyển đối tượng vào bộ nhớ CUDA.
to()MethodChuyển đối tượng sang device được chỉ định.
xyxyThuộc tính (torch.Tensor)Trả về các box theo định dạng xyxy.
confThuộc tính (torch.Tensor)Trả về các giá trị độ tin cậy của các box.
clsThuộc tính (torch.Tensor)Trả về các giá trị class của các box.
idThuộc tính (torch.Tensor)Trả về track ID của các box (nếu có).
xywhThuộc tính (torch.Tensor)Trả về các box theo định dạng xywh.
xyxynThuộ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.
xywhnThuộ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.

Mask
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 masks

Dướ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ênKiểuMô tả
dataThuộ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()MethodTrả về tensor mask trong bộ nhớ CPU.
numpy()MethodTrả về tensor mask dưới dạng mảng NumPy.
cuda()MethodTrả về tensor mask trong bộ nhớ GPU.
to()MethodTrả về tensor mask với device và dtype được chỉ định.
xynThuộc tính (list[np.ndarray])Danh sách các polygon mask đã chuẩn hóa.
xyThuộ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.

SemanticMask
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ênKiểuMô tả
dataThuộ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.
shapeThuộc tính (tuple)Shape của bản đồ class, thường khớp với result.orig_shape.
cpu()MethodTrả về tensor mask ngữ nghĩa trong bộ nhớ CPU.
numpy()MethodTrả về tensor mask ngữ nghĩa dưới dạng mảng NumPy.
cuda()MethodTrả về tensor mask ngữ nghĩa trong bộ nhớ GPU.
to()MethodTrả 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 độ.

Keypoint
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 keypoints

Dướ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ênKiểuMô tả
cpu()MethodTrả về tensor keypoint trong bộ nhớ CPU.
numpy()MethodTrả về tensor keypoint dưới dạng mảng NumPy.
cuda()MethodTrả về tensor keypoint trong bộ nhớ GPU.
to()MethodTrả về tensor keypoint với device và dtype được chỉ định.
xynThuộ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.
xyThuộ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.
confThuộ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 top1top5.

Probs
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 probabilities

Dướ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ênKiểuMô tả
cpu()MethodTrả về một bản sao của tensor probs trong bộ nhớ CPU.
numpy()MethodTrả về một bản sao của tensor probs dưới dạng mảng NumPy.
cuda()MethodTrả về một bản sao của tensor probs trong bộ nhớ GPU.
to()MethodTrả về một bản sao của tensor probs với device và dtype được chỉ định.
top1Thuộc tính (int)Chỉ số của class top 1.
top5Thuộc tính (list[int])Các chỉ số của 5 class hàng đầu.
top1confThuộc tính (torch.Tensor)Confidence của class top 1.
top5confThuộ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.

OBB
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 boxes

Dướ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ênKiểuMô tả
cpu()MethodChuyển đối tượng vào bộ nhớ CPU.
numpy()MethodChuyển đổi đối tượng thành mảng NumPy.
cuda()MethodChuyển đối tượng vào bộ nhớ CUDA.
to()MethodChuyển đối tượng sang device được chỉ định.
confThuộc tính (torch.Tensor)Trả về các giá trị độ tin cậy của các box.
clsThuộc tính (torch.Tensor)Trả về các giá trị class của các box.
idThuộc tính (torch.Tensor)Trả về track ID của các box (nếu có).
xyxyThuộc tính (torch.Tensor)Trả về các box ngang ở format xyxy.
xywhrThuộc tính (torch.Tensor)Trả về các box xoay ở format xywhr.
xyxyxyxyThuộc tính (torch.Tensor)Trả về các box xoay ở format xyxyxyxy.
xyxyxyxynThuộ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.

Vẽ
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ểuMô tảMặc định
confboolBao gồm các confidence score của detection.True
line_widthfloatĐộ rộng đường viền của bounding box. Tỷ lệ thay đổi theo kích thước ảnh nếu None.None
font_sizefloatCỡ font của văn bản. Tỷ lệ thay đổi theo kích thước ảnh nếu None.None
fontstrTên font cho văn bản chú thích.'Arial.ttf'
pilboolTrả về ảnh dưới dạng đối tượng PIL Image.False
imgnp.ndarray | torch.TensorẢnh thay thế. Tensor phải liên tục và có dạng HWC BGR uint8.None
kpt_radiusintBán kính của keypoint được vẽ.5
kpt_lineboolNối các keypoint bằng đường thẳng.True
labelsboolBao gồm nhãn class trong phần chú thích.True
boxesboolPhủ bounding box lên ảnh.True
masksboolPhủ mask lên ảnh.True
probsboolBao gồm xác suất phân loại.True
showboolHiển thị trực tiếp ảnh đã chú thích bằng trình xem ảnh mặc định.False
saveboolLưu ảnh đã chú thích vào file được chỉ định bởi filename.False
filenamestrĐường dẫn và tên file dùng để lưu ảnh đã chú thích nếu saveTrue.None
color_modestrChỉ định color mode, ví dụ 'instance' hoặc 'class'.'class'
txt_colortuple[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:

Suy luận an toàn luồng

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-pythonultralytics).

Vòng lặp for streaming
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âuphâ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=True trong 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ượng Results thay 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, device và 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ền embed=[layer_index] vào model.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 embeddings
  • Sau khi chạy inference với YOLO, các đối tượng Results chứ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()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ả.

Bình luận