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

Ultralytics YOLO ecosystem and integrations

Giới thiệu

Trong thế giới của machine learningcomputer vision, quá trình diễn giải dữ liệu thị giác thường được gọi là inference hoặc dự đoán. Ultralytics YOLO26 cung cấp một tính năng mạnh mẽ được gọi là predict mode, được tối ưu hóa cho inference hiệu năng cao theo thời gian thực trên nhiều nguồn dữ liệu khác nhau.



Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀

Các ứng dụng 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 ngã
Phát hiện phụ tùng xePhát hiện cầu thủ bóng đáPhát hiện người ngã

Tại sao nên sử dụng Ultralytics YOLO cho Inference?

Dưới đây là lý do tại sao bạn nên cân nhắc sử dụng predict mode của YOLO26 cho các nhu cầu inference đa dạng của mình:

  • Tính đa năng: Có khả năng thực hiện inference trên hình ảnh, video và cả các luồng trực tiếp.
  • Hiệu năng: Được thiết kế để xử lý tốc độ cao, theo thời gian thực mà không làm giảm accuracy.
  • Dễ sử dụng: Giao diện Python và CLI trực quan để triển khai và kiểm thử nhanh chóng.
  • Khả năng tùy biến cao: Nhiều thiết lập và tham số để tinh chỉnh hành vi inference của mô hình theo các yêu cầu cụ thể của bạn.
  • Sẵn sàng cho sản xuất: Triển khai các mô hình dưới dạng các API endpoints trên Ultralytics Platform với khả năng tự động mở rộng và giám sát, hoặc chạy inference tại chỗ (locally).

Các tính năng chính của Predict Mode

Predict mode của YOLO26 được thiết kế để trở nên mạnh mẽ và linh hoạt, với các tính năng:

  • Khả năng 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 đơn lẻ, tập hợp các hình ảnh, tệp video hay luồng video thời gian thực, predict mode đều đáp ứng được.
  • Chế độ Streaming: Sử dụng tính năng streaming để tạo ra một generator các đối tượng Results tiết kiệm bộ nhớ. Kích hoạt tính năng này bằng cách đặt stream=True trong phương thức gọi của predictor.
  • Batch Processing: Xử lý nhiều hình ảnh hoặc khung hình video trong một batch, giúp giảm tổng thời gian inference.
  • Dễ dàng tích hợp: Tích hợp dễ dàng với các quy trình xử lý 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ác mô hình Ultralytics YOLO trả về một danh sách Python gồm các đối tượng Results hoặc một generator các đối tượng Results tiết kiệm bộ nhớ khi stream=True được truyền vào mô hình trong quá trình inference:

Dự đoá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

Các nguồn Inference

YOLO26 có thể xử lý các loại nguồn đầu vào khác nhau cho inference, 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à nhiều định dạng dữ liệu khác nhau. Bảng cũng chỉ ra liệu mỗi nguồn có thể được sử dụng trong chế độ streaming với tham số stream=True ✅ hay không. Chế độ streaming rất hữu ích cho việc xử lý video hoặc luồng trực tiếp vì nó tạo ra một generator các kết quả thay vì tải toàn bộ khung hình vào bộ nhớ.

Mẹo

Sử dụng stream=True để xử lý các video dài hoặc tập dữ liệu lớn nhằm 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 làm đầy bộ nhớ và gây ra lỗi tràn bộ nhớ (out-of-memory) đối với các dữ liệu đầ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úp giảm đáng kể mức tiêu thụ bộ nhớ và ngăn ngừa các vấn đề liên quan đến tràn bộ nhớ.

NguồnVí dụLoạiGhi chú
image'image.jpg'str hoặc PathTệp hình ảnh đơn lẻ.
URL'https://ultralytics.com/images/bus.jpg'strURL đến 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 kênh màu RGB.
OpenCVcv2.imread('image.jpg')np.ndarrayĐịnh dạng HWC với các kênh màu BGR uint8 (0-255).
NumPynp.zeros((640,1280,3))np.ndarrayĐịnh dạng HWC với các kênh màu BGR uint8 (0-255).
torchtorch.zeros(16,3,320,640)torch.TensorĐịnh dạng BCHW với các kênh màu RGB float32 (0.0-1.0).
CSV'sources.csv'str hoặc PathTệp CSV chứa các đường dẫn đến hình ảnh, video hoặc thư mục.
video ✅'video.mp4'str hoặc PathTệp video ở các định dạng như MP4, AVI, v.v.
directory ✅'path/'str hoặc PathĐường dẫn đến một thư mục chứa hình ảnh hoặc video.
glob ✅'path/*.jpg'strMẫu glob để khớp nhiều tệp. Sử dụng ký tự * làm ký tự đại diện.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strURL đến một video YouTube.
stream ✅'rtsp://example.com/media.mp4'strURL cho các giao thức streaming như RTSP, RTMP, TCP hoặc địa chỉ IP.
multi-stream ✅'list.streams'str hoặc PathTệp văn bản *.streams với mỗi URL luồng trên một dòng, ví dụ: 8 luồng sẽ chạy với batch-size là 8.
webcam ✅0intChỉ số của thiết bị camera được kết nối để chạy inference.

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

Các nguồn dự đoán

Chạy inference trên một tệp 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 đối số dự đoán (Inference Arguments)

model.predict() chấp nhận nhiều đối số có thể được truyền vào tại thời điểm dự đoán để ghi đè các thiết lập mặc định:

Hình dạng 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 đệm hình chữ nhật tối thiểu (minimum-rectangle) khi có thể. Hình ảnh được thu phóng để vừa với imgsz và chỉ được đệm tới bội số stride gần nhất, vì vậy tensor cuối cùng có thể nhỏ hơn imgsz. Đệm hình chữ nhật tối thiểu chỉ được sử dụng khi tất cả các hình ảnh trong batch có cùng hình dạng và backend hỗ trợ (PyTorch .pt, hoặc ONNX / Triton động). Nếu không, các hình ảnh sẽ được đệm tới mục tiêu imgsz đầy đủ.

Sử dụng rect=False để luôn đệm tới mục tiêu imgsz đầy đủ. Điều này được khuyến nghị khi bạn cần kích thước đầu vào cố định để khớp với các model đã xuất (ONNX, TensorRT, v.v.).

imgsz dạng số nguyên so với tuple

  • Một số nguyên imgsz=640 trở thành mục tiêu hình vuông (640, 640) sau khi làm tròn stride.
  • Một tuple imgsz=(384, 672) thiết lập một mục tiêu hình chữ nhật. Với rect=Trueauto=True, tensor thực tế có thể nhỏ hơn mục tiêu này.

Huấn luyện (Training) so với dự đoán (predict)/xuất (export)

Huấn luyện chỉ chấp nhận một số nguyên imgsz duy nhất (một danh sách [h, w] sẽ được ép kiểu về giá trị lớn nhất). Predict và export chấp nhận số nguyên hoặc một 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ố suy luận (Inference arguments):

Đối sốLoạiMặc địnhMô tả
sourcestr hoặc int hoặc NoneNoneChỉ định nguồn dữ liệu để suy luận. Có thể là đường dẫn ảnh, tệp video, thư mục, URL hoặc ID thiết bị cho các luồng trực tiếp. Nếu bị bỏ qua, một cảnh báo sẽ được ghi lại và model sẽ quay về sử dụng các tài sản demo tích hợp (ultralytics/assets, hoặc URL demo cho OBB). Hỗ trợ nhiều định dạng và nguồn, cho phép ứng dụng linh hoạt trên các loại đầu vào khác nhau.
conffloat0.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ị loại bỏ. Việc điều chỉnh giá trị này có thể giúp giảm các trường hợp dương tính giả.
ioufloat0.7Ngưỡ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 lấp, hữu ích để giảm các kết quả trùng lặp.
imgszint hoặc tuple640Letterbox target. An integer gives a square N×N; a tuple gives (height, width). With rect=True, the actual tensor may be smaller than this target due to minimum-rectangle padding. Use rect=False for a fixed size. See Fixed shape vs minimum rectangle.
rectboolTrueNếu True, sử dụng padding hình chữ nhật tối thiểu khi có thể (batch cùng hình dạng và backend được hỗ trợ). Nếu False, luôn pad đến imgsz đầy đủ. Xem Hình dạng cố định vs hình chữ nhật tối thiểu.
halfboolFalseKích hoạt suy luận nửa độ chính xác (FP16), có thể tăng tốc độ suy luận của model trên các GPU được hỗ trợ mà ít ảnh hưởng đến độ chính xác.
devicestrNoneChỉ định thiết bị cho suy luận (ví dụ: cpu, cuda:0, 0, npu hoặc npu:0). Cho phép người dùng chọn giữa CPU, một GPU cụ thể, NPU Huawei Ascend hoặc các thiết bị tính toán khác để thực thi model.
batchint1Chỉ định kích thước batch cho suy luận (chỉ hoạt động khi nguồn là thư mục, tệp video hoặc tệp .txt). Kích thước batch lớn hơn có thể cung cấp lưu lượng cao hơn, rút ngắn tổng thời gian cần thiết cho suy luận.
max_detint300Số lượng phát hiện tối đa cho phép trên mỗi ảnh. Giới hạn tổng số đối tượng mà model có thể phát hiện trong một lần inference, giúp ngăn chặn kết quả đầu ra quá mức trong các cảnh có mật độ đối tượng cao.
vid_strideint1Bước nhảy khung hình (frame stride) cho đầu vào video. Cho phép bỏ qua các khung hình trong video để tăng tốc độ xử lý nhưng đánh đổi độ phân giải theo thời gian. Giá trị 1 xử lý mọi khung hình, giá trị cao hơn sẽ bỏ qua các khung hình.
stream_bufferboolFalseQuyết định xem có xếp hàng các khung hình đến cho luồng video hay không. Nếu False, các khung hình cũ sẽ bị loại bỏ để nhường chỗ cho khung hình mới (tối ưu cho các ứng dụng thời gian thực). Nếu True, sẽ xếp hàng các khung hình mới vào bộ đệm, đảm bảo không có khung hình nào bị bỏ qua, nhưng sẽ gây ra độ trễ nếu FPS của quá trình inference thấp hơn FPS của luồng.
visualizeboolFalseKích hoạt trực quan hóa các đặc trưng (features) của model trong quá trình inference, cung cấp thông tin về những gì model đang "nhìn thấy". Hữu ích cho việc gỡ lỗi và diễn giải model.
augmentboolFalseKích hoạt test-time augmentation (TTA) cho các dự đoán, có khả năng cải thiện độ ổn định của việc phát hiện với chi phí là tốc độ inference chậm hơn.
agnostic_nmsboolFalseKích hoạt Non-Maximum Suppression (NMS) không phân biệt lớp, giúp hợp nhất các khung bao (boxes) chồng lấp của các lớp khác nhau. Hữu ích trong các kịch bản phát hiện đa lớp nơi việc chồng lấp lớp thường xảy ra. Đối với các model end-to-end (YOLO26, YOLOv10), tùy chọn này chỉ ngăn chặn cùng một kết quả phát hiện xuất hiện với nhiều nhãn lớp (trùng lặp IoU=1.0) và không thực hiện triệt tiêu dựa trên ngưỡng IoU giữa các khung hình riêng biệt.
classeslist[int]NoneLọc các dự đoán theo một tập hợp ID lớp. Chỉ các kết quả 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 liên quan trong các tác vụ phát hiện đa lớp.
retina_masksboolFalseTrả về các mask phân đoạn độ phân giải cao. Nếu được bật, các mask được trả về (masks.data) sẽ khớp với kích thước ảnh gốc. Nếu bị tắt, chúng sẽ có kích thước ảnh được sử dụng trong quá trình inference.
embedlist[int]NoneChỉ định các lớp để trích xuất vectơ đặc trưng hoặc embeddings. Hữu ích cho các tác vụ hạ nguồn như phân cụm hoặc tìm kiếm sự tương đồng.
projectstrNoneTên của thư mục dự án nơi lưu kết quả dự đoán nếu save được bật.
namestrNoneTên của lần chạy dự đoán. Được sử dụng để tạo thư mục con trong thư mục dự án, nơi lưu trữ kết quả dự đoán nếu save được bật.
streamboolFalseKích hoạt xử lý tiết kiệm bộ nhớ cho các video dài hoặc số lượng lớn ảnh bằng cách trả về một trình tạo (generator) các đối tượng Results thay vì tải toàn bộ khung hình vào bộ nhớ cùng một lúc.
verboseboolTrueKiểm soát việc hiển thị các bản ghi inference 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.
compilebool hoặc strFalseKích hoạt biên dịch đồ thị PyTorch 2.x torch.compile với backend='inductor'. Chấp nhận True"default", False → vô hiệu hóa, hoặc một chế độ chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Nếu không được hỗ trợ, sẽ quay về chế độ eager và hiển thị cảnh báo.
end2endboolNoneGhi đè chế độ end-to-end trong các model YOLO hỗ trợ inference không cần NMS (YOLO26, YOLOv10). Thiết lập là False cho phép bạn chạy dự đoán bằng pipeline NMS truyền thống, đồng thời cho phép sử dụng đối số iou. Xem Hướng dẫn End-to-End Detection để biết thêm chi tiết.

Các đối số trực quan hóa:

Đối sốLoạiMặc địnhMô tả
showboolFalseNếu True, hiển thị các ảnh hoặc video đã được 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.
saveboolFalse or TrueKích hoạt lưu các ảnh hoặc video đã được chú thích vào tệp. Hữu ích cho việc tài liệu hóa, 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 các khung hình riêng lẻ dưới dạng ả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_txtboolFalseLưu kết quả phát hiện vào một tệp văn bản, 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 điểm tin cậy (confidence scores) trong các tệp văn bản đã lưu. Tăng cường thông tin chi tiết có sẵn để xử lý hậu kỳ và phân tích.
save_cropboolFalseLưu các ảnh cắt (cropped images) của các kết quả phát hiện. Hữu ích cho việc tăng cường dữ liệu (augmentation), phân tích hoặc tạo các bộ dữ liệu tập trung cho các đối tượng cụ thể.
show_labelsboolTrueHiển thị nhãn cho mỗi kết quả phát hiện trong đầu ra trực quan. Cung cấp hiểu biết ngay lập tức về các đối tượng được phát hiện.
show_confboolTrueHiển thị điểm tin cậy cho mỗi kết quả phát hiện bên cạnh nhãn. Cung cấp cái nhìn sâu sắc về độ chắc chắn của model cho mỗi kết quả phát hiện.
show_boxesboolTrueVẽ khung bao (bounding boxes) xung quanh các đối tượng được phát hiện. Rất cần thiết để xác định trực quan và xác định vị trí của các đối tượng trong ảnh hoặc khung hình video.
line_widthint or NoneNoneChỉ định độ dày đường kẻ của khung bao. Nếu là None, độ dày đường kẻ sẽ tự động được điều chỉnh dựa trên kích thước ảnh. Cung cấp khả năng tùy chỉnh trực quan để đảm bảo độ rõ nét.

Các định dạng Hình ảnh và Video

YOLO26 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à lệnh predict ví dụ.

Hình ảnh

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

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 hỗ trợ nguyên bản bởi Pillow.

Hậu tố hình ảnhVí dụ lệnh dự đoán (Predict Command)Tham chiếu
.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 hình ảnh hiệu suất cao (HEIF)
.heifyolo predict source=image.heifĐịnh dạng hình ảnh hiệu suất cao (HEIF)
.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 hình ảnh (Multi Picture Object)
.pngyolo predict source=image.pngĐồ họa mạng di động (Portable Network Graphics)
.tifyolo predict source=image.tifĐịnh dạng tệp hình ảnh thẻ (TIFF)
.tiffyolo predict source=image.tiffĐịnh dạng tệp hình ảnh thẻ (TIFF)
.webpyolo predict source=image.webpWebP

Video

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

Hậu tố videoVí dụ lệnh dự đoán (Predict Command)Tham chiếu
.asfyolo predict source=video.asfĐịnh dạng hệ thống nâng cao (Advanced Systems Format)
.aviyolo predict source=video.aviAudio Video Interleave
.gifyolo predict source=video.gifĐịnh dạng trao đổi đồ họa (Graphics Interchange Format)
.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 vận chuyển MPEG (MPEG Transport Stream)
.wmvyolo predict source=video.wmvWindows Media Video
.webmyolo predict source=video.webmDự án WebM

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

Tất cả các lệnh predict() của Ultralytics sẽ trả về một danh sách các đối tượng Results:

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

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

Thuộc tínhLoạiMô tả
orig_imgnp.ndarrayẢnh gốc dưới dạng mảng NumPy.
orig_shapetupleKích thước ảnh gốc ở định dạng (chiều cao, chiều rộng).
boxesBoxes, optionalMột đối tượng Boxes chứa các khung bao (bounding box) phát hiện được.
masksMasks, optionalMột đối tượng Masks chứa các mask phát hiện được.
probsProbs, optionalMột đối tượng Probs chứa xác suất của từng lớp cho tác vụ phân loại.
keypointsKeypoints, optionalMột đối tượng Keypoints chứa các điểm chính được phát hiện cho mỗi đối tượng.
obbOBB, optionalMột đối tượng OBB chứa các khung bao xoay (oriented bounding boxes).
speeddictMột dictionary chứa tốc độ tiền xử lý, suy luận (inference) và hậu xử lý tính bằng mili giây mỗi ảnh.
namesdictMột dictionary ánh xạ các chỉ số lớp sang tên lớp.
pathstrĐường dẫn đến tệp hình ảnh.
save_dirstr, optionalThư mục lưu trữ kết quả.

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

Phương thứcKiểu trả vềMô tả
update()NoneCập nhật đối tượng Results với dữ liệu phát hiện mới (boxes, masks, probs, obb, keypoints).
cpu()ResultsTrả về 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()ResultsTrả về bản sao của đối tượng Results với tất cả các tensor được chuyển đổi sang mảng NumPy.
cuda()ResultsTrả về 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()ResultsTrả về bản sao của đối tượng Results với các tensor được chuyển sang thiết bị và dtype chỉ định.
new()ResultsTạo một đối tượng Results mới với các thuộc tính ảnh, đường dẫn, tên và tốc độ tương tự.
plot()np.ndarrayVẽ kết quả phát hiện lên một ảnh RGB đầu vào và trả về ảnh đã được chú thích.
show()NoneHiển thị ảnh với các kết quả suy luận đã được chú thích.
save()strLưu ảnh kết quả suy luận đã 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ụ, chi tiết kết quả phát hiện và phân loại.
save_txt()strLưu kết quả phát hiện 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 đã cắt theo kết quả phát hiện 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ả phát hiện thành Polars DataFrame.
to_csv()strChuyển đổi kết quả phát hiện sang định dạng CSV.
to_json()strChuyển đổi kết quả phát hiện sang định dạng JSON.

Để biết thêm chi tiết, xem tài liệu lớp Results.

Boxes

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

Boxes
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 các phương thức và thuộc tính của lớp Boxes, bao gồm tên, kiểu và mô tả:

TênLoạiMô tả
cpu()Phương thứcDi chuyển đối tượng sang bộ nhớ CPU.
numpy()Phương thứcChuyển đổi đối tượng thành mảng NumPy.
cuda()Phương thứcDi chuyển đối tượng sang bộ nhớ CUDA.
to()Phương thứcDi chuyển đối tượng sang thiết bị được chỉ định.
xyxyThuộc tính (torch.Tensor)Trả về các khung bao ở định dạng xyxy.
confThuộc tính (torch.Tensor)Trả về các giá trị độ tin cậy của khung bao.
clsThuộc tính (torch.Tensor)Trả về các giá trị lớp của khung bao.
idThuộc tính (torch.Tensor)Trả về ID theo dõi (track ID) của các khung bao (nếu có).
xywhThuộc tính (torch.Tensor)Trả về các khung bao ở định dạng xywh.
xyxynThuộc tính (torch.Tensor)Trả về các khung bao ở đị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 khung bao ở định dạng xywh được chuẩn hóa theo kích thước ảnh gốc.

Để biết thêm chi tiết, xem tài liệu lớp Boxes.

Masks

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

Masks
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 các phương thức và thuộc tính của lớp Masks, bao gồm tên, kiểu và mô tả:

TênLoạiMô tả
cpu()Phương thứcTrả về tensor mask trên bộ nhớ CPU.
numpy()Phương thứcTrả về tensor mask dưới dạng mảng NumPy.
cuda()Phương thứcTrả về tensor mask trên bộ nhớ GPU.
to()Phương thứcTrả về tensor mask với thiết bị và dtype được chỉ định.
xynThuộc tính (torch.Tensor)Danh sách các phân đoạn đã chuẩn hóa được biểu diễn dưới dạng các tensor.
xyThuộc tính (torch.Tensor)Danh sách các phân đoạn theo tọa độ pixel được biểu diễn dưới dạng các tensor.

Để biết thêm chi tiết, xem tài liệu lớp Masks.

Keypoints

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

Keypoints
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 các phương thức và thuộc tính của lớp Keypoints, bao gồm tên, kiểu dữ liệu và mô tả của chúng:

TênLoạiMô tả
cpu()Phương thứcTrả về tensor các keypoint trên bộ nhớ CPU.
numpy()Phương thứcTrả về tensor các keypoint dưới dạng mảng NumPy.
cuda()Phương thứcTrả về tensor các keypoint trên bộ nhớ GPU.
to()Phương thứcTrả về tensor các keypoint với thiết bị (device) và kiểu dữ liệu (dtype) được chỉ định.
xynThuộc tính (torch.Tensor)Danh sách các keypoint đã 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 theo 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ị độ tin cậy của keypoint nếu có, ngược lại trả về None.

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

Probs

Đối tượng Probs có thể được sử dụng để truy xuất, lấy các chỉ số và điểm số top1top5 của quá trình phân loại.

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 cho lớp Probs:

TênLoạiMô tả
cpu()Phương thứcTrả về một bản sao của tensor probs trên bộ nhớ CPU.
numpy()Phương thứcTrả về một bản sao của tensor probs dưới dạng mảng NumPy.
cuda()Phương thứcTrả về một bản sao của tensor probs trên bộ nhớ GPU.
to()Phương thứcTrả về một bản sao của tensor probs với thiết bị và kiểu dữ liệu được chỉ định.
top1Thuộc tính (int)Chỉ số của lớp top 1.
top5Thuộc tính (list[int])Chỉ số của các lớp top 5.
top1confThuộc tính (torch.Tensor)Độ tin cậy của lớp top 1.
top5confThuộc tính (torch.Tensor)Độ tin cậy của các lớp top 5.

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

OBB

Đối tượng OBB có thể được sử dụng để truy xuất, thao tác và chuyển đổi các khung bao xoay (oriented bounding boxes) sang các định dạng 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 các phương thức và thuộc tính của lớp OBB, bao gồm tên, kiểu dữ liệu và mô tả của chúng:

TênLoạiMô tả
cpu()Phương thứcDi chuyển đối tượng sang bộ nhớ CPU.
numpy()Phương thứcChuyển đổi đối tượng thành mảng NumPy.
cuda()Phương thứcDi chuyển đối tượng sang bộ nhớ CUDA.
to()Phương thứcDi chuyển đối tượng sang thiết bị được chỉ định.
confThuộc tính (torch.Tensor)Trả về các giá trị độ tin cậy của khung bao.
clsThuộc tính (torch.Tensor)Trả về các giá trị lớp của khung bao.
idThuộc tính (torch.Tensor)Trả về ID theo dõi (track ID) của các khung bao (nếu có).
xyxyThuộc tính (torch.Tensor)Trả về các hộp nằm ngang ở định dạng xyxy.
xywhrThuộc tính (torch.Tensor)Trả về các hộp đã xoay ở định dạng xywhr.
xyxyxyxyThuộc tính (torch.Tensor)Trả về các hộp đã xoay ở định dạng xyxyxyxy.
xyxyxyxynThuộ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 ảnh.

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

Trực quan hóa kết quả (Plotting Results)

Phương thức plot() trong các đối tượng Results hỗ trợ việc trực quan hóa các dự đoán bằng cách phủ các đối tượng đã phát hiện (như khung bao, mặt nạ, 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, cho phép dễ dàng hiển thị hoặc lưu lại.

Vẽ biểu đồ/Hình ả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")

Các tham số của phương thức plot()

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

Đối sốLoạiMô tảMặc định
confboolBao gồm điểm số độ tin cậy của phát hiện.True
line_widthfloatĐộ dày đường vẽ của các khung bao. Tự động điều chỉnh theo kích thước ảnh nếu là None.None
font_sizefloatKích thước font chữ. Tự động điều chỉnh theo kích thước ảnh nếu là None.None
fontstrTên font chữ cho các chú thích văn bản.'Arial.ttf'
pilboolTrả về ảnh dưới dạng đối tượng PIL Image.False
imgnp.ndarrayẢnh thay thế để trực quan hóa. Sử dụng ảnh gốc nếu là None.None
im_gputorch.TensorẢnh tăng tốc GPU để vẽ mặt nạ nhanh hơn. Hình dạng (Shape): (1, 3, 640, 640).None
kpt_radiusintBán kính cho các keypoint được vẽ.5
kpt_lineboolKết nối các keypoint bằng các đường thẳng.True
labelsboolBao gồm nhãn lớp trong các chú thích.True
boxesboolPhủ khung bao lên trên ảnh.True
masksboolPhủ mặt nạ lên trên ảnh.True
probsboolBao gồm các xác suất phân loại.True
showboolHiển thị ảnh đã chú thích trực tiếp bằng trình xem ảnh mặc định.False
saveboolLưu ảnh đã chú thích vào tệp được chỉ định bởi filename.False
filenamestrĐường dẫn và tên tệp để lưu ảnh đã chú thích nếu saveTrue.None
color_modestrChỉ định chế độ màu, ví dụ: 'instance' hoặc 'class'.'class'
txt_colortuple[int, int, int]Màu văn bản RGB cho nhãn phân loại ảnh và khung bao.(255, 255, 255)

Suy luận an toàn luồng (Thread-Safe Inference)

Đảm bảo tính an toàn luồng trong khi suy luận là rất quan trọng khi bạn đang chạy nhiều mô hình YOLO song song 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 tách biệt và không gây ảnh hưởng lẫn nhau, tránh các điều kiện tranh chấp (race conditions) và đảm bảo đầu ra nhất quán, đáng tin cậy.

Khi sử dụng các mô hình YOLO trong ứ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 từng luồng hoặc sử dụng bộ nhớ cục bộ luồng (thread-local storage) để ngăn ngừa xung đột:

Suy luận an toàn luồng (Thread-Safe Inference)

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=("yolo26n.pt", "image1.jpg")).start()
Thread(target=thread_safe_predict, args=("yolo26n.pt", "image2.jpg")).start()

Để có cái nhìn chuyên sâu 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 của YOLO. 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 các lỗi thường gặp và đảm bảo quá trình suy luận đa luồng của bạn diễn ra suôn sẻ.

Vòng lặp for nguồn phát trực tuyến (Streaming Source)

Dưới đây là một tập lệnh Python sử dụng OpenCV (cv2) và YOLO để thực hiện suy luận trên các khung hình video. Tập lệnh này giả định rằng bạn đã cài đặt các gói cần thiết (opencv-pythonultralytics).

Vòng lặp for phát trực tuyến
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()

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

Câu hỏi thường gặp (FAQ)

Ultralytics YOLO và chế độ predict của nó để suy luận thời gian thực là gì?

Ultralytics YOLO là mô hình tiên tiến nhất dành cho việc phát hiện đối tượng, phân đoạn và phân loại trong thời gian thực. Chế độ predict của nó cho phép người dùng thực hiện suy luận tốc độ cao trên các nguồn dữ liệu đa dạng như hình ảnh, video và luồng trực tiếp. Được thiết kế cho hiệu suất và tính linh hoạt, nó cũng cung cấp các chế độ xử lý theo lô (batch) và phát trực tuyến. Để biết thêm chi tiết về các tính năng, hãy xem chế độ predict của Ultralytics YOLO.

Làm thế 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ý nhiều nguồn dữ liệu, bao gồm hình ảnh đơn lẻ, video, thư mục, URL và các luồng. 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 hình ảnh cục bộ hoặc 'https://ultralytics.com/images/bus.jpg' cho một URL. Hãy xem các ví dụ chi tiết cho nhiều nguồn suy luận khác nhau 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 (streaming mode) bằng cách đặt stream=True trong phương thức gọi của bộ dự đoán. Chế độ phát trực tuyến tạo ra một trình tạo các đối tượng Results tiết kiệm bộ nhớ thay vì tải tất cả các khung hình vào bộ nhớ. Để xử lý các video dài hoặc tập 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?

Phương thức model.predict() trong YOLO hỗ trợ các đối số khác nhau 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 quá trình suy luận, thiết lập các thông số như ngưỡng độ tin cậy, kích thước ả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ó thể được tìm thấy trong phần đối số suy luận.

Làm cách nào để trực quan hóa và lưu kết quả dự đoán của YOLO?

Sau khi chạy suy luận 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 tệp đều được tạo tự động (ví dụ: result.save("path/to/result.jpg")). Để 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ả.

Bình luận