Dự đoán mô hình với Ultralytics YOLO
Giới thiệu
Trong thế giới của machine learning và computer 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ất | Thể thao | An toàn |
|---|---|---|
![]() | ![]() | ![]() |
| Phát hiện phụ tùng xe | Phát hiện cầu thủ bóng đá | Phát hiện người 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
Resultstiết kiệm bộ nhớ. Kích hoạt tính năng này bằng cách đặtstream=Truetrong 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:
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 diskCá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ớ.
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ồn | Ví dụ | Loại | Ghi chú |
|---|---|---|---|
| image | 'image.jpg' | str hoặc Path | Tệp hình ảnh đơn lẻ. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL đến một hình ảnh. |
| screenshot | 'screen' | str | Chụp ảnh màn hình. |
| PIL | Image.open('image.jpg') | PIL.Image | Định dạng HWC với các kênh màu RGB. |
| OpenCV | cv2.imread('image.jpg') | np.ndarray | Định dạng HWC với các kênh màu BGR uint8 (0-255). |
| NumPy | np.zeros((640,1280,3)) | np.ndarray | Định dạng HWC với các kênh màu BGR uint8 (0-255). |
| torch | torch.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 Path | Tệ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 Path | Tệ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' | str | Mẫ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' | str | URL đến một video YouTube. |
| stream ✅ | 'rtsp://example.com/media.mp4' | str | URL cho các giao thức streaming như RTSP, RTMP, TCP hoặc địa chỉ IP. |
| multi-stream ✅ | 'list.streams' | str hoặc Path | Tệ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 ✅ | 0 | int | Chỉ 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:
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 objectsCá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=640trở 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ớirect=Truevàauto=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).
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ại | Mặc định | Mô tả |
|---|---|---|---|
source | str hoặc int hoặc None | None | Chỉ đị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. |
conf | float | 0.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ả. |
iou | float | 0.7 | Ngưỡ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. |
imgsz | int hoặc tuple | 640 | Letterbox 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. |
rect | bool | True | Nế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. |
half | bool | False | Kí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. |
device | str | None | Chỉ đị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. |
batch | int | 1 | Chỉ đị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_det | int | 300 | Số 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_stride | int | 1 | Bướ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_buffer | bool | False | Quyế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. |
visualize | bool | False | Kí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. |
augment | bool | False | Kí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_nms | bool | False | Kí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. |
classes | list[int] | None | Lọ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_masks | bool | False | Trả 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. |
embed | list[int] | None | Chỉ đị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. |
project | str | None | Tên của thư mục dự án nơi lưu kết quả dự đoán nếu save được bật. |
name | str | None | Tê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. |
stream | bool | False | Kí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. |
verbose | bool | True | Kiể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. |
compile | bool hoặc str | False | Kí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. |
end2end | bool | None | Ghi đè 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ại | Mặc định | Mô tả |
|---|---|---|---|
show | bool | False | Nế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. |
save | bool | False or True | Kí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_frames | bool | False | Khi 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_txt | bool | False | Lư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_conf | bool | False | Bao 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_crop | bool | False | Lư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_labels | bool | True | Hiể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_conf | bool | True | Hiể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_boxes | bool | True | Vẽ 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_width | int or None | None | Chỉ đị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.
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 ảnh | Ví dụ lệnh dự đoán (Predict Command) | Tham chiếu |
|---|---|---|
.avif | yolo predict source=image.avif | Định dạng tệp hình ảnh AV1 |
.bmp | yolo predict source=image.bmp | Định dạng tệp BMP của Microsoft |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | Định dạng hình ảnh hiệu suất cao (HEIF) |
.heif | yolo predict source=image.heif | Định dạng hình ảnh hiệu suất cao (HEIF) |
.jp2 | yolo predict source=image.jp2 | JPEG 2000 |
.jpeg | yolo predict source=image.jpeg | JPEG |
.jpg | yolo predict source=image.jpg | JPEG |
.mpo | yolo predict source=image.mpo | Đối tượng đa hình ảnh (Multi Picture Object) |
.png | yolo predict source=image.png | Đồ họa mạng di động (Portable Network Graphics) |
.tif | yolo predict source=image.tif | Định dạng tệp hình ảnh thẻ (TIFF) |
.tiff | yolo predict source=image.tiff | Định dạng tệp hình ảnh thẻ (TIFF) |
.webp | yolo predict source=image.webp | WebP |
Video
Bảng dưới đây chứa các định dạng video hợp lệ của Ultralytics.
| Hậu tố video | Ví dụ lệnh dự đoán (Predict Command) | Tham chiếu |
|---|---|---|
.asf | yolo predict source=video.asf | Định dạng hệ thống nâng cao (Advanced Systems Format) |
.avi | yolo predict source=video.avi | Audio Video Interleave |
.gif | yolo predict source=video.gif | Định dạng trao đổi đồ họa (Graphics Interchange Format) |
.m4v | yolo predict source=video.m4v | MPEG-4 Phần 14 |
.mkv | yolo predict source=video.mkv | Matroska |
.mov | yolo predict source=video.mov | Định dạng tệp QuickTime |
.mp4 | yolo predict source=video.mp4 | MPEG-4 Phần 14 - Wikipedia |
.mpeg | yolo predict source=video.mpeg | MPEG-1 Phần 2 |
.mpg | yolo predict source=video.mpg | MPEG-1 Phần 2 |
.ts | yolo predict source=video.ts | Luồng vận chuyển MPEG (MPEG Transport Stream) |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | Dự á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:
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
[
"https://ultralytics.com/images/bus.jpg",
"https://ultralytics.com/images/zidane.jpg",
]
) # batch inferenceCác đối tượng Results có các thuộc tính sau:
| Thuộc tính | Loại | Mô tả |
|---|---|---|
orig_img | np.ndarray | Ảnh gốc dưới dạng mảng NumPy. |
orig_shape | tuple | Kích thước ảnh gốc ở định dạng (chiều cao, chiều rộng). |
boxes | Boxes, optional | Một đối tượng Boxes chứa các khung bao (bounding box) phát hiện được. |
masks | Masks, optional | Một đối tượng Masks chứa các mask phát hiện được. |
probs | Probs, optional | Mộ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. |
keypoints | Keypoints, optional | Một đối tượng Keypoints chứa các điểm chính được phát hiện cho mỗi đối tượng. |
obb | OBB, optional | Một đối tượng OBB chứa các khung bao xoay (oriented bounding boxes). |
speed | dict | Mộ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. |
names | dict | Một dictionary ánh xạ các chỉ số lớp sang tên lớp. |
path | str | Đường dẫn đến tệp hình ảnh. |
save_dir | str, optional | Thư 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ức | Kiểu trả về | Mô tả |
|---|---|---|
update() | None | Cập nhật đối tượng Results với dữ liệu phát hiện mới (boxes, masks, probs, obb, keypoints). |
cpu() | Results | Trả 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() | Results | Trả 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() | Results | Trả 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() | Results | Trả 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() | Results | Tạ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.ndarray | Vẽ 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() | None | Hiển thị ảnh với các kết quả suy luận đã được chú thích. |
save() | str | Lưu ảnh kết quả suy luận đã chú thích vào tệp và trả về tên tệp. |
verbose() | str | Trả về một chuỗi log cho từng tác vụ, chi tiết kết quả phát hiện và phân loại. |
save_txt() | str | Lư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() | None | Lư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() | DataFrame | Chuyển đổi kết quả phát hiện thành Polars DataFrame. |
to_csv() | str | Chuyển đổi kết quả phát hiện sang định dạng CSV. |
to_json() | str | Chuyể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.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.boxes) # print the Boxes object containing the detection bounding boxesDưới đây là bảng 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ên | Loại | Mô tả |
|---|---|---|
cpu() | Phương thức | Di chuyển đối tượng sang bộ nhớ CPU. |
numpy() | Phương thức | Chuyển đổi đối tượng thành mảng NumPy. |
cuda() | Phương thức | Di chuyển đối tượng sang bộ nhớ CUDA. |
to() | Phương thức | Di chuyển đối tượng sang thiết bị được chỉ định. |
xyxy | Thuộc tính (torch.Tensor) | Trả về các khung bao ở định dạng xyxy. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị độ tin cậy của khung bao. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị lớp của khung bao. |
id | Thuộc tính (torch.Tensor) | Trả về ID theo dõi (track ID) của các khung bao (nếu có). |
xywh | Thuộc tính (torch.Tensor) | Trả về các khung bao ở định dạng xywh. |
xyxyn | Thuộ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. |
xywhn | Thuộ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.
from ultralytics import YOLO
# Load a pretrained YOLO26n-seg Segment model
model = YOLO("yolo26n-seg.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.masks) # print the Masks object containing the detected instance masksDưới đây là bảng 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ên | Loại | Mô tả |
|---|---|---|
cpu() | Phương thức | Trả về tensor mask trên bộ nhớ CPU. |
numpy() | Phương thức | Trả về tensor mask dưới dạng mảng NumPy. |
cuda() | Phương thức | Trả về tensor mask trên bộ nhớ GPU. |
to() | Phương thức | Trả về tensor mask với thiết bị và dtype được chỉ định. |
xyn | Thuộ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. |
xy | Thuộ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 độ.
from ultralytics import YOLO
# Load a pretrained YOLO26n-pose Pose model
model = YOLO("yolo26n-pose.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.keypoints) # print the Keypoints object containing the detected keypointsDưới đây là bảng 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ên | Loại | Mô tả |
|---|---|---|
cpu() | Phương thức | Trả về tensor các keypoint trên bộ nhớ CPU. |
numpy() | Phương thức | Trả về tensor các keypoint dưới dạng mảng NumPy. |
cuda() | Phương thức | Trả về tensor các keypoint trên bộ nhớ GPU. |
to() | Phương thức | Trả về tensor các keypoint với thiết bị (device) và kiểu dữ liệu (dtype) được chỉ định. |
xyn | Thuộ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. |
xy | Thuộ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. |
conf | Thuộ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ố top1 và top5 của quá trình phân loại.
from ultralytics import YOLO
# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-cls.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.probs) # print the Probs object containing the detected class probabilitiesDưới đây là bảng tóm tắt các phương thức và thuộc tính cho lớp Probs:
| Tên | Loại | Mô tả |
|---|---|---|
cpu() | Phương thức | Trả về một bản sao của tensor probs trên bộ nhớ CPU. |
numpy() | Phương thức | Trả về một bản sao của tensor probs dưới dạng mảng NumPy. |
cuda() | Phương thức | Trả về một bản sao của tensor probs trên bộ nhớ GPU. |
to() | Phương thức | Trả về một bản sao của tensor probs với thiết bị và kiểu dữ liệu được chỉ định. |
top1 | Thuộc tính (int) | Chỉ số của lớp top 1. |
top5 | Thuộc tính (list[int]) | Chỉ số của các lớp top 5. |
top1conf | Thuộc tính (torch.Tensor) | Độ tin cậy của lớp top 1. |
top5conf | Thuộ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.
from ultralytics import YOLO
# Load a pretrained YOLO26n model
model = YOLO("yolo26n-obb.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/boats.jpg") # results list
# View results
for r in results:
print(r.obb) # print the OBB object containing the oriented detection bounding boxesDưới đây là bảng 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ên | Loại | Mô tả |
|---|---|---|
cpu() | Phương thức | Di chuyển đối tượng sang bộ nhớ CPU. |
numpy() | Phương thức | Chuyển đổi đối tượng thành mảng NumPy. |
cuda() | Phương thức | Di chuyển đối tượng sang bộ nhớ CUDA. |
to() | Phương thức | Di chuyển đối tượng sang thiết bị được chỉ định. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị độ tin cậy của khung bao. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị lớp của khung bao. |
id | Thuộc tính (torch.Tensor) | Trả về ID theo dõi (track ID) của các khung bao (nếu có). |
xyxy | Thuộc tính (torch.Tensor) | Trả về các hộp nằm ngang ở định dạng xyxy. |
xywhr | Thuộc tính (torch.Tensor) | Trả về các hộp đã xoay ở định dạng xywhr. |
xyxyxyxy | Thuộc tính (torch.Tensor) | Trả về các hộp đã xoay ở định dạng xyxyxyxy. |
xyxyxyxyn | Thuộ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.
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ại | Mô tả | Mặc định |
|---|---|---|---|
conf | bool | Bao gồm điểm số độ tin cậy của phát hiện. | True |
line_width | float | Độ 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_size | float | Kích thước font chữ. Tự động điều chỉnh theo kích thước ảnh nếu là None. | None |
font | str | Tên font chữ cho các chú thích văn bản. | 'Arial.ttf' |
pil | bool | Trả về ảnh dưới dạng đối tượng PIL Image. | False |
img | np.ndarray | Ảnh thay thế để trực quan hóa. Sử dụng ảnh gốc nếu là None. | None |
im_gpu | torch.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_radius | int | Bán kính cho các keypoint được vẽ. | 5 |
kpt_line | bool | Kết nối các keypoint bằng các đường thẳng. | True |
labels | bool | Bao gồm nhãn lớp trong các chú thích. | True |
boxes | bool | Phủ khung bao lên trên ảnh. | True |
masks | bool | Phủ mặt nạ lên trên ảnh. | True |
probs | bool | Bao gồm các xác suất phân loại. | True |
show | bool | Hiển thị ảnh đã chú thích trực tiếp bằng trình xem ảnh mặc định. | False |
save | bool | Lưu ảnh đã chú thích vào tệp được chỉ định bởi filename. | False |
filename | str | Đường dẫn và tên tệp để lưu ảnh đã chú thích nếu save là True. | None |
color_mode | str | Chỉ định chế độ màu, ví dụ: 'instance' hoặc 'class'. | 'class' |
txt_color | tuple[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:
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-python và ultralytics).
import cv2
from ultralytics import YOLO
# Load the YOLO model
model = YOLO("yolo26n.pt")
# Open the video file
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
# Loop through the video frames
while cap.isOpened():
# Read a frame from the video
success, frame = cap.read()
if success:
# Run YOLO inference on the frame
results = model(frame)
# Visualize the results on the frame
annotated_frame = results[0].plot()
# Display the annotated frame
cv2.imshow("YOLO Inference", annotated_frame)
# Break the loop if 'q' is pressed
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# Break the loop if the end of the video is reached
break
# Release the video capture object and close the display window
cap.release()
cv2.destroyAllWindows()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() và result.save(filename="result.jpg") để trực quan hóa và lưu kết quả. Mọi thư mục cha còn thiếu trong đường dẫn 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ả.


