YOLO Vision 2026:

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 trực quan thường được gọi là inference hoặc prediction. Ultralytics YOLO26 cung cấp một tính năng mạnh mẽ được gọi là predict mode, được thiết kế riêng cho inference thời gian thực, hiệu suất cao 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
Vehicle Spare Parts DetectionFootball Player DetectionPeople Fall Detection
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:

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

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, bao gồm:

  • Tương thích với nhiều nguồn dữ liệu: Cho dù dữ liệu của bạn ở dạng hình ảnh đơn lẻ, tập hợp hình ảnh, tệp video hay luồng video thời gian thực, predict mode đều hỗ trợ tốt.
  • Streaming Mode: Sử dụng tính năng streaming để tạo một generator tiết kiệm bộ nhớ chứa các đối tượng Results. Bật tính năng này bằng cách đặt stream=True trong phương thức gọi của bộ dự đoán. Khác với hành vi mặc định (stream=False), trả về một danh sách chứa tất cả các kết quả, stream=True trả về từng kết quả một, điều này đặc biệt hữu ích cho các video dài và luồng trực tiếp.
  • 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: Dễ dàng kết nối với các pipeline 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 model Ultralytics YOLO trả về một Python list chứa các đối tượng Results hoặc một generator tiết kiệm bộ nhớ chứa các đối tượng Results khi stream=True được truyền vào model 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

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à các đị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 ở streaming mode với đối số stream=True ✅ hay không. Streaming mode rất hữu ích để xử lý video hoặc luồng trực tiếp vì nó tạo ra một generator kết quả thay vì tải toàn bộ các khung hình vào bộ nhớ.

Mẹo

Sử dụng stream=True để xử lý video dài hoặc tập dữ liệu lớn nhằm quản lý bộ nhớ hiệu quả. Khi dùng stream=False, kết quả cho tất cả các khung hình hoặc điểm dữ liệu được lưu trong bộ nhớ, điều này có thể nhanh chóng tích tụ và gây ra lỗi tràn bộ nhớ (out-of-memory) đối với các đầu vào lớn. Ngược lại, stream=True sử dụng một generator, chỉ giữ lại 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 sự cố tràn bộ nhớ.

NguồnVí dụLoạiLưu ý
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 RGB.
OpenCVcv2.imread('image.jpg')np.ndarrayĐịnh dạng HWC với các kênh BGR uint8 (0-255).
NumPynp.zeros((640,1280,3))np.ndarrayĐịnh dạng HWC với các kênh BGR uint8 (0-255).
torchtorch.zeros(16,3,320,640)torch.TensorĐịnh dạng BCHW với các kênh RGB float32 (0.0-1.0).
CSV'sources.csv'str hoặc PathTệp CSV chứa đườ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 thư mục chứa hình ảnh hoặc video.
glob ✅'path/*.jpg'strMẫu glob để khớp với 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 truyền phát 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ột URL luồng trên mỗi hàng, tức là 8 luồng sẽ chạy ở batch-size 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ã để sử dụng từng loại nguồn:

Nguồn dự đoán

Chạy inference trên 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ố suy luận#

model.predict() chấp nhận nhiều đối số có thể được truyền vào thời điểm inference để ghi đè các giá trị 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 khi có thể. Hình ảnh được chia tỷ lệ để vừa vặn bên trong imgsz và chỉ được đệm đến bội số bước nhảy (stride) gần nhất, do đó tensor cuối cùng có thể nhỏ hơn imgsz. Việc đệ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 lô có cùng hình dạng và backend hỗ trợ (PyTorch .pt, hoặc ONNX động / Triton). Nếu không, các hình ảnh được đệm đến mục tiêu đầy đủ imgsz.

Sử dụng rect=False để luôn đệm đến 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.).

Số nguyên so với tuple imgsz

  • Một imgsz=640 kiểu số nguyên sẽ trở thành một mục tiêu vuông (640, 640) sau khi làm tròn bước nhảy.
  • Một imgsz=(384, 672) kiểu tuple đặ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.

Training so với predict/export

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

Đố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, file video, thư mục, URL hoặc ID thiết bị cho các luồng trực tiếp. Nếu bỏ qua, một cảnh báo sẽ được ghi lại và model sẽ chuyển về sử dụng tài nguyên demo tích hợp sẵn (ultralytics/assets, hoặc URL demo cho OBB). Hỗ trợ nhiều loại định dạng và nguồn dữ liệu, cho phép ứng dụng linh hoạt trên các loại đầu vào khác nhau.
conffloat0.25Thiết lập ngưỡng tin cậy tối thiểu cho các lần 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ỏ. Đ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). Giá trị thấp hơn dẫn đến ít phát hiện hơn bằng cách loại bỏ các hộp chồng chéo, hữu ích để giảm các mục bị trùng lặp.
imgszint hoặc tuple640Mục tiêu Letterbox. Một số nguyên cho ra hình vuông N×N; một tuple cho ra (height, width). Với rect=True, tensor thực tế có thể nhỏ hơn mục tiêu này do padding hình chữ nhật tối thiểu. Sử dụng rect=False cho kích thước cố định. Xem Hình dạng cố định so với hình chữ nhật tối thiểu.
rectboolTrueNếu là True, hãy 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 là False, luôn padding đến toàn bộ imgsz. Xem Hình dạng cố định so với hình chữ nhật tối thiểu.
quantizeint hoặc strNoneĐộ chính xác suy luận: 16/"fp16" bật suy luận FP16 trên các GPU được hỗ trợ; 32/"fp32"/bỏ trống là FP32. Lượng tử hóa INT8/PTQ được cấu hình trong quá trình xuất model, sau đó được sử dụng bằng cách tải model đã xuất. Thay thế cờ half đã lỗi thời.
devicestrNoneChỉ định thiết bị để suy luận (ví dụ: cpu, cuda:0, 0, npu hoặc npu:0). Cho phép người dùng lựa chọn giữa CPU, một GPU cụ thể, Huawei Ascend NPU hoặc các thiết bị tính toán khác để thực thi model.
dnnboolFalseNếu True, sử dụng mô-đun DNN OpenCV thay vì ONNX Runtime để suy luận mô hình ONNX.
datastrNoneĐường dẫn đến YAML của tập dữ liệu (ví dụ: coco8.yaml) chỉ được đọc cho names của nó, và chỉ khi mô hình được tải không có sẵn tên lớp của riêng nó: một bản xuất của bên thứ ba, hoặc một bản xuất của Ultralytics được tách khỏi siêu dữ liệu đi kèm. Nếu không, một mô hình như vậy sẽ trả về class0, class1, v.v.
batchint1Chỉ định kích thước batch cho suy luận (chỉ hoạt động khi nguồn là thư mục, file video hoặc file .txt). Kích thước batch lớn hơn có thể cung cấp thông lượng cao hơn, rút ngắn tổng thời gian cần thiết cho 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 suy luận, tránh đầu ra quá mức trong các cảnh dày đặc đối tượng.
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ý với cái giá là độ phân giải thời gian. Giá trị 1 xử lý mọi khung hình, giá trị cao hơn sẽ bỏ qua khung hình.
stream_bufferboolFalseXác định xem có xếp hàng đợi các khung hình đến đối với luồng video hay không. Nếu là False, các khung hình cũ sẽ bị loại bỏ để nhường chỗ cho khung hình mới (được tối ưu hóa cho các ứng dụng thời gian thực). Nếu là True, xếp hàng đợi các khung hình mới vào một 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 suy luận thấp hơn FPS của luồng.
visualizeboolFalseLưu bản đồ nhiệt kích hoạt lớp (class activation heatmap) bên cạnh mỗi dự đoán, hiển thị các pixel nào đã làm tăng điểm số lớp được dự đoán. Tuân theo confclasses, do đó classes=[0] chỉ ánh xạ lớp đó. Chỉ khả dụng cho các model PyTorch của Ultralytics.
augmentboolFalseBật tính năng tăng cường thời gian kiểm tra (TTA) cho các dự đoán, có khả năng cải thiện độ ổn định khi phát hiện nhưng đánh đổi bằng tốc độ suy luận (inference). Chỉ khả dụng cho các model PyTorch của Ultralytics.
agnostic_nmsboolFalseBật Non-Maximum Suppression (NMS) bất chấp lớp, triệt tiêu các hộp chồng chéo 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 chéo lớp là phổ biến. Đối với các mô hình đầu cuối (YOLO26, YOLOv10), tính năng 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 (các bản sao có IoU=1.0) và không thực hiện việc triệt tiêu dựa trên ngưỡng IoU giữa các hộp 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 mặt nạ phân đoạn độ phân giải cao. Các mặt nạ được trả về (masks.data) sẽ khớp với kích thước ảnh gốc nếu được bật. Nếu bị tắt, chúng có kích thước ảnh được sử dụng trong quá trình suy luận.
embedlist[int]NoneChỉ định các lớp (layers) dùng để trích xuất vector đặc trưng hoặc embeddings. Sử dụng model.embed(source) cho embedding của lớp áp chót, hoặc model.predict(source, embed=[layer]) để chọn các lớp cụ thể. Hữu ích cho các tác vụ hạ nguồn (downstream tasks) như phân cụm (clustering) hoặc tìm kiếm độ tương đồng. Chỉ khả dụng cho các model PyTorch của Ultralytics.
projectstrNoneTên thư mục dự án nơi lưu trữ các 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 một thư mục con bên trong thư mục dự án, nơi lưu trữ các kết quả dự đoán nếu save được bật.
streamboolFalseKích hoạt xử lý hiệu quả bộ nhớ cho các video dài hoặc nhiều hình ảnh bằng cách trả về một generator các đối tượng Results thay vì tải tất cả các khung hình vào bộ nhớ cùng lúc.
verboseboolTrueKiểm soát việc hiển thị nhật ký suy luận chi tiết trong terminal, cung cấp phản hồi thời gian thực về quá trình dự đoán.
compilebool hoặc strFalseBật biên dịch đồ thị torch.compile của PyTorch 2.x với backend='inductor'. Chấp nhận True"default", False → tắt, hoặc chế độ chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Chuyển về chế độ eager kèm theo cảnh báo nếu không được hỗ trợ.
channels_lastboolFalseSử dụng định dạng bộ nhớ channels_last (NHWC) cho các phép tích chập trong quá trình inference, giúp tăng tốc các GPU CUDA Tensor Core mà không làm thay đổi kết quả. Chỉ áp dụng cho các model PyTorch gốc; bị bỏ qua đối với CPU, MPS và các định dạng được xuất ra như TensorRT và ONNX.
end2endboolNoneGhi đè chế độ end-to-end trong các model YOLO hỗ trợ suy luận không cần NMS (YOLO26, YOLOv10). Đặt giá trị thành False cho phép bạn chạy dự đoán sử dụng pipeline NMS truyền thống, đồng thời cho phép bạn tận dụng đối số iou. Xem Hướng dẫn Phát hiện End-to-End để biết chi tiết.

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

Đối sốLoạiMặc địnhMô tả
showboolFalseNếu là True, hiển thị các hình ảnh hoặc video đã được chú thích 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 phát triển hoặc kiểm thử.
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 ghi tài liệu, phân tích thêm hoặc chia sẻ kết quả. Mặc định là True khi sử dụng CLI & False khi sử dụng trong Python.
save_framesboolFalseKhi xử lý video, lưu từng khung hình dưới dạng hình ảnh. Hữu ích để trích xuất các khung hình cụ thể hoặc phân tích chi tiết từng khung hình.
save_txtboolFalseLưu kết quả phát hiện vào một file văn bản theo định dạng [class] [x_center] [y_center] [width] [height] [confidence]. Hữu ích cho việc tích hợp với các công cụ phân tích khác.
save_confboolFalseBao gồm các điểm số tin cậy trong các tệp văn bản đã lưu. Tăng cường thông tin chi tiết cho việc hậu xử lý và phân tích.
save_cropboolFalseLưu các ảnh cắt của các kết quả phát hiện. Hữu ích cho việc tăng cường dữ liệu, phân tích hoặc tạo tập dữ liệu tập trung cho các đối tượng cụ thể.
show_labelsboolTrueHiển thị nhãn cho mỗi phát hiện trong đầu ra hình ảnh. Cung cấp khả năng nhận biết tức thì các đối tượng được phát hiện.
show_confboolTrueHiển thị điểm số tin cậy (confidence score) cho mỗi phát hiện cùng với nhãn. Cung cấp thông tin chi tiết về độ chắc chắn của model đối với từng phát hiện.
show_boxesboolTrueVẽ các hộp bao quanh các đối tượng được phát hiện. Cần thiết cho việc nhận diện trực quan và xác định vị trí của đối tượng trong ảnh hoặc khung hình video.
line_widthint or NoneNoneChỉ định độ dày đường viền của các hộp bao. Nếu là None, độ dày đường viền được tự động đ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 để dễ quan sá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 phần mở rộng hợp lệ và các 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 cài đặt tự động trong lần sử dụng đầu tiên. AVIF được hỗ trợ gốc bởi Pillow.

Hậu tố hình ảnhLệnh predict ví dụTham chiếu
.avifyolo predict source=image.avifAV1 Image File Format
.bmpyolo predict source=image.bmpMicrosoft BMP File Format
.dngyolo predict source=image.dngAdobe DNG
.heicyolo predict source=image.heicHigh Efficiency Image Format
.heifyolo predict source=image.heifHigh Efficiency Image Format
.jp2yolo predict source=image.jp2JPEG 2000
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoMulti Picture Object
.pngyolo predict source=image.pngPortable Network Graphics
.tifyolo predict source=image.tifTag Image File Format
.tiffyolo predict source=image.tiffTag Image File Format
.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ố videoLệnh predict ví dụTham chiếu
.asfyolo predict source=video.asfAdvanced Systems Format
.aviyolo predict source=video.aviAudio Video Interleave
.gifyolo predict source=video.gifGraphics Interchange Format
.m4vyolo predict source=video.m4vMPEG-4 Part 14
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movQuickTime File Format
.mp4yolo predict source=video.mp4MPEG-4 Part 14 - Wikipedia
.mpegyolo predict source=video.mpegMPEG-1 Part 2
.mpgyolo predict source=video.mpgMPEG-1 Part 2
.tsyolo predict source=video.tsMPEG Transport Stream
.wmvyolo predict source=video.wmvWindows Media Video
.webmyolo predict source=video.webmWebM Project

Làm việc với các kết quả#

Tất cả các lệnh gọi Ultralytics predict() 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ínhLoạiMô tả
orig_imgnp.ndarrayẢnh gốc dưới dạng NumPy array.
orig_shapetupleKích thước ảnh gốc theo đị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 mỗi lớp cho tác vụ phân loại.
keypointsKeypoints, optionalMột đối tượng Keypoints chứa các điểm đặc trưng (keypoint) đã phát hiện cho mỗi đối tượng.
obbOBB, optionalMột đối tượng OBB chứa các khung bao định hướng (oriented bounding box).
semantic_maskSemanticMask, optionalMột đối tượng SemanticMask chứa bản đồ lớp dày đặc theo từng pixel.
speeddictMột dictionary chứa tốc độ tiền xử lý, suy luận và hậu xử lý tính bằng mili giây trên mỗi ảnh.
namesdictMột dictionary ánh xạ các chỉ số lớp sang tên lớp.
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 nào dưới đây được điền dữ liệu tùy thuộc vào tác vụ của model — 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ụ nào. Mỗi dự đoán trả về một đối tượng Results cho mỗi hình ả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ữ trong các trường dưới đây. Các tensor tọa độ, độ tin cậy và xác suất ở định dạng torch.float32 trừ khi sử dụng độ chính xác bán phần (half precision), khi đó sẽ 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ực thể (instance masks) là các tensor nhị phân torch.uint8, trong khi mặt nạ ngữ nghĩa (semantic masks) sử dụng kiểu dữ liệu số nguyên thực tế nhỏ nhất 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ínhLoạiKích thướcMô tả
result.boxesBoxes(N)Các khung bao phát hiện.
result.boxes.datatorch.float32(N,6/7)[x1,y1,x2,y2,conf,cls] thô, cộng với ID theo dõi tùy chọn.
result.boxes.xyxytorch.float32(N,4)Các hộp pixel xyxy.
result.boxes.conftorch.float32(N,)Điểm độ tin cậy.
result.boxes.clstorch.float32(N,)ID lớp; ép kiểu sang int để lấy tên.

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 mới như khung hì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ả các tensor được chuyển sang bộ nhớ CPU.
numpy()ResultsTrả về một bản sao của đối tượng Results với tất cả các tensor được chuyển đổi thành mảng NumPy.
cuda()ResultsTrả về một bản sao của đối tượng Results với tất cả các tensor được chuyển sang bộ nhớ GPU.
to()ResultsTrả về một 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ùng các thuộc tính hình ảnh, đường dẫn, tên và tốc độ.
plot()np.ndarrayVẽ kết quả phát hiện lên một hình ảnh BGR đầu vào và trả về hình ảnh đã được chú thích.
show()NoneHiển thị hình ảnh với các kết quả suy luận đã được chú thích.
save()strLưu hình ả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ụ, 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 một tệp văn bản và trả về đường dẫn đến tệp đã lưu.
save_crop()NoneLưu các hình ảnh phát hiện đã cắt vào thư mục được chỉ định.
summary()List[Dict[str, Any]]Chuyển đổi kết quả suy luận thành một từ điển tóm tắt với tùy chọn chuẩn hóa.
to_df()DataFrameChuyển đổi kết quả phát hiện thành một 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, hãy 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 hộp giới hạn 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 cho 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ả 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 sang 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 hình ở định dạng xyxy.
confThuộc tính (torch.Tensor)Trả về các giá trị độ tin cậy của các khung hình.
clsThuộc tính (torch.Tensor)Trả về các giá trị lớp của các khung hình.
idThuộc tính (torch.Tensor)Trả về các ID theo dõi của các khung hình (nếu có).
xywhThuộc tính (torch.Tensor)Trả về các khung hình ở định dạng xywh.
xyxynThuộc tính (torch.Tensor)Trả về các khung hình ở định dạng xyxy được chuẩn hóa theo kích thước hình ảnh gốc.
xywhnThuộc tính (torch.Tensor)Trả về các khung hình ở định dạng xywh được chuẩn hóa theo kích thước hình ảnh gốc.

Để biết thêm chi tiết, hãy 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 mặt nạ thành các phân đoạn (segments).

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 cho 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ả của chúng:

TênLoạiMô tả
dataThuộc tính (torch.Tensor)Tensor mặt nạ nhị phân torch.uint8 với hình dạng (N,H,W) và các giá trị 0 hoặc 1.
cpu()Phương thứcTrả về tensor masks trên bộ nhớ CPU.
numpy()Phương thứcTrả về tensor masks dưới dạng mảng NumPy.
cuda()Phương thứcTrả về tensor masks trên bộ nhớ GPU.
to()Phương thứcTrả về tensor masks với thiết bị và dtype được chỉ định.
xynThuộc tính (list[np.ndarray])Danh sách các đa giác mask đã được chuẩn hóa.
xyThuộc tính (list[np.ndarray])Danh sách các đa giác mask trong tọa độ pixel.

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

SemanticMask#

SemanticMask lưu trữ một bản đồ lớp dày đặc (dense class map) cho kết quả semantic segmentation. Khác với Masks, nó không chứa một mặt nạ nhị phân cho mỗi đối tượng và không cung cấp các tiện ích đa giác.

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ênLoạiMô tả
dataThuộc tính (torch.Tensor)Bản đồ ID lớp với hình dạng (H,W). Dtype là torch.uint8, torch.int16, hoặc torch.int32, được chọn theo số lượng lớp.
shapeThuộc tính (tuple)Hình dạng của bản đồ lớp, thường khớp với result.orig_shape.
cpu()Phương thứcTrả về tensor semantic mask trên bộ nhớ CPU.
numpy()Phương thứcTrả về tensor semantic mask dưới dạng mảng NumPy.
cuda()Phương thứcTrả về tensor semantic mask trên bộ nhớ GPU.
to()Phương thứcTrả về tensor semantic mask với thiết bị và dtype được chỉ định.

Keypoints#

Đối tượng Keypoints có thể được sử dụng để lập chỉ mục, thao tác và chuẩn hóa 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 cho các phương thức và thuộc tính của lớp Keypoints, bao gồm tên, kiểu và mô tả của chúng:

TênLoạiMô tả
cpu()Phương thứcTrả về tensor keypoints trên bộ nhớ CPU.
numpy()Phương thứcTrả về tensor keypoints dưới dạng mảng NumPy.
cuda()Phương thứcTrả về tensor keypoints trên bộ nhớ GPU.
to()Phương thứcTrả về tensor keypoints với thiết bị và kiểu dữ liệu được chỉ định.
xynThuộc tính (torch.Tensor)Một danh sách các keypoints được chuẩn hóa dưới dạng các tensor.
xyThuộc tính (torch.Tensor)Một danh sách các keypoints theo tọa độ pixel dưới dạng các tensor.
confThuộc tính (torch.Tensor)Trả về các giá trị độ tin cậy của keypoints nếu có, nếu không thì trả về None.

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

Probs#

Đối tượng Probs có thể được sử dụng để lấy các chỉ mục và điểm số 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 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])Các chỉ số của top 5 lớp.
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 top 5 lớp.

Để 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 để lập chỉ mục, thao tác và chuyển đổi các hộp giới hạn 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 cho các phương thức và thuộc tính của lớp OBB, bao gồm tên, kiể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 sang 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 các khung hình.
clsThuộc tính (torch.Tensor)Trả về các giá trị lớp của các khung hình.
idThuộc tính (torch.Tensor)Trả về các ID theo dõi của các khung hình (nếu có).
xyxyThuộc tính (torch.Tensor)Trả về các hộp nằm ngang theo định dạng xyxy.
xywhrThuộc tính (torch.Tensor)Trả về các hộp xoay theo định dạng xywhr.
xyxyxyxyThuộc tính (torch.Tensor)Trả về các hộp xoay theo định dạng xyxyxyxy.
xyxyxyxynThuộc tính (torch.Tensor)Trả về các hộp xoay theo đị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ả#

Phương thức plot() trong các đối tượng Results hỗ trợ trực quan hóa các dự đoán bằng cách chồng các đối tượng được phát hiện (như hộp giới hạn, mặt nạ, keypoint và xác suất) lên hình ảnh gốc. Phương thức này trả về hình ảnh đã được chú thích dưới dạng một mảng NumPy, cho phép hiển thị hoặc lưu dễ dàng.

Vẽ (Plotting)
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ố 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 tin cậy phát hiện.True
line_widthfloatĐộ dày đường viền của các hộp giới hạn. Tự động chia tỷ lệ theo kích thước hình ảnh nếu là None.None
font_sizefloatKích thước phông chữ văn bản. Tự động chia tỷ lệ theo kích thước hình ảnh nếu là None.None
fontstrTên font cho chú thích văn bản.'Arial.ttf'
pilboolTrả về ảnh dưới dạng đối tượng PIL Image.False
imgnp.ndarray | torch.TensorẢnh thay thế. Các Tensor phải là dạng HWC BGR uint8 liền kề.None
kpt_radiusintBán kính cho các keypoints được vẽ.5
kpt_lineboolNối các keypoints bằng các đường thẳng.True
labelsboolBao gồm nhãn lớp trong các chú thích.True
boxesboolPhủ các hộp bao lên ảnh.True
masksboolPhủ các mask lên ảnh.True
probsboolBao gồm 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 hình ảnh đã được chú thích vào tệp được chỉ định bởi filename.False
filenamestrĐường dẫn và tên của tệp để lưu hình ảnh được 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 chữ BGR cho hộp bao và nhãn phân loại ảnh.(255, 255, 255)

Suy luận an toàn với đa luồng#

Đảm bảo tính an toàn của luồng (thread safety) 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 với luồng đảm bảo rằng các dự đoán của mỗi luồng là độc lập và không can thiệp lẫn nhau, tránh tình trạng race conditions và đảm bảo kết quả nhất quán và đáng tin cậy.

Khi sử dụng các model 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 model riêng biệt cho từng luồng hoặc sử dụng bộ lưu trữ cục bộ của luồng (thread-local storage) để tránh xung đột:

Suy luận an toàn với đa luồng

Khởi tạo một model duy nhất bên trong mỗi luồng để có inference an toàn với 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()

Để tìm hiểu sâu hơn về inference an toàn luồng (thread-safe inference) với các model YOLO và hướng dẫn từng bước, vui lòng tham khảo Hướng dẫn Inference An toàn Luồng 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 những cạm bẫy phổ biến và đảm bảo quá trình inference đa luồng của bạn diễn ra suôn sẻ.

Vòng lặp for của Nguồn Streaming#

Dưới đây là một tập lệnh Python sử dụng OpenCV (cv2) và YOLO để chạy inference 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 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()

Tập lệnh này sẽ chạy 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ổ. Có thể thoát vòng lặp bằng cách nhấn phím 'q'.

Các bước tiếp theo#

Đã sẵn sàng chuyển sang một model được huấn luyện sẵn? Xác nhận tác vụ của bạn phù hợp với vấn đề, định dạng dữ liệu của riêng bạn bằng Hướng dẫn Datasets, sau đó tiến hành train trên dữ liệu đó.

Câu hỏi thường gặp#

  • Ultralytics YOLO là một model tiên tiến dành cho object detection, instance segmentation, semantic segmentation, depth estimationclassification thời gian thực. Predict mode của nó cho phép người dùng thực hiện inference tốc độ cao trên nhiều nguồn dữ liệu khác nhau như hình ảnh, video và luồng trực tiếp. Được thiết kế cho hiệu suất và tính linh hoạt, nó cũng cung cấp các chế độ xử lý theo lô và streaming. Để biết thêm chi tiết về các tính năng của nó, hãy xem Ultralytics YOLO predict mode.

  • Ultralytics YOLO có thể xử lý nhiều nguồn dữ liệu, bao gồm hình ảnh riêng lẻ, video, thư mục, URL và luồng trực tiếp. Bạn có thể chỉ định nguồn dữ liệu trong lệnh gọi model.predict(). Ví dụ, sử dụng 'image.jpg' cho một hình ảnh cục bộ hoặc 'https://ultralytics.com/images/bus.jpg' cho một URL. Hãy xem các ví dụ chi tiết cho các nguồn inference khác nhau trong tài liệu.

  • Để tối ưu hóa 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 đặt stream=True trong phương thức gọi của bộ dự đoán. Streaming mode tạo ra một generator tiết kiệm bộ nhớ chứa các đối tượng Results thay vì tải tất cả các khung hình vào bộ nhớ. Đối với việc xử lý video dài hoặc tập dữ liệu lớn, streaming mode tỏ ra vô cùng hữu ích. Tìm hiểu thêm về streaming mode.

  • 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 hơn nữa. Các đối số này cho phép bạn tùy chỉnh quá trình inference, thiết lập các tham số như ngưỡng độ tin cậy, kích thước hình ảnh và thiết bị được sử dụng để tính toán. Mô tả chi tiết về các đối số này có thể được tìm thấy trong phần inference arguments.

  • Sử dụng model.embed(source) để trích xuất các đặc trưng embedding từ lớp áp chót (second-to-last layer), hoặc truyền embed=[layer_index] vào model.predict() để chọn các lớp 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 hình ảnh đã được 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ả. Bất kỳ thư mục cha nào 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 toàn diện các phương thức này, hãy tham khảo phần working with results.

Bình luận