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 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ấ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:
- 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 đặtstream=Truetrong 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=Truetrả 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:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # pretrained YOLO26n model
# Run batched inference on a list of images
results = model(["image1.jpg", "image2.jpg"]) # return a list of Results objects
# Process results list
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename="result.jpg") # save to diskNguồn 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ớ.
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ồn | Ví dụ | Loại | Lưu ý |
|---|---|---|---|
| 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 RGB. |
| OpenCV | cv2.imread('image.jpg') | np.ndarray | Định dạng HWC với các kênh BGR uint8 (0-255). |
| NumPy | np.zeros((640,1280,3)) | np.ndarray | Định dạng HWC với các kênh BGR uint8 (0-255). |
| torch | torch.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 Path | Tệp CSV chứa đườ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 thư mục chứa hình ảnh hoặc video. |
| glob ✅ | 'path/*.jpg' | str | Mẫ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' | str | URL đến một video YouTube. |
| stream ✅ | 'rtsp://example.com/media.mp4' | str | URL 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 Path | Tệ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 ✅ | 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ã để sử dụng từng loại nguồ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 objectsCá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=640kiể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ớirect=Truevàauto=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).
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ạ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, 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. |
conf | float | 0.25 | Thiế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ả. |
iou | float | 0.7 | Ngưỡ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. |
imgsz | int hoặc tuple | 640 | Mụ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. |
rect | bool | True | Nế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. |
quantize | int hoặc str | None | Độ 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. |
device | str | None | Chỉ đị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. |
dnn | bool | False | Nếu True, sử dụng mô-đun DNN OpenCV thay vì ONNX Runtime để suy luận mô hình ONNX. |
data | str | None | Đườ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. |
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, 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_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 suy luận, tránh đầu ra quá mức trong các cảnh dày đặc đối tượng. |
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ý 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_buffer | bool | False | Xá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. |
visualize | bool | False | Lư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 conf và classes, do đó classes=[0] chỉ ánh xạ lớp đó. Chỉ khả dụng cho các model PyTorch của Ultralytics. |
augment | bool | False | Bậ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_nms | bool | False | Bậ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. |
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 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. |
embed | list[int] | None | Chỉ đị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. |
project | str | None | Tê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. |
name | str | None | Tê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. |
stream | bool | False | Kí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. |
verbose | bool | True | Kiể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. |
compile | bool hoặc str | False | Bậ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_last | bool | False | Sử 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. |
end2end | bool | None | Ghi đè 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ại | Mặc định | Mô tả |
|---|---|---|---|
show | bool | False | Nế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ử. |
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 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_frames | bool | False | Khi 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_txt | bool | False | Lư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_conf | bool | False | Bao 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_crop | bool | False | Lư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_labels | bool | True | Hiể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_conf | bool | True | Hiể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_boxes | bool | True | Vẽ 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_width | int or None | None | Chỉ đị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.
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 ảnh | Lệnh predict ví dụ | Tham chiếu |
|---|---|---|
.avif | yolo predict source=image.avif | AV1 Image File Format |
.bmp | yolo predict source=image.bmp | Microsoft BMP File Format |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | High Efficiency Image Format |
.heif | yolo predict source=image.heif | High Efficiency Image Format |
.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 | Multi Picture Object |
.png | yolo predict source=image.png | Portable Network Graphics |
.tif | yolo predict source=image.tif | Tag Image File Format |
.tiff | yolo predict source=image.tiff | Tag Image File Format |
.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 | Lệnh predict ví dụ | Tham chiếu |
|---|---|---|
.asf | yolo predict source=video.asf | Advanced Systems Format |
.avi | yolo predict source=video.avi | Audio Video Interleave |
.gif | yolo predict source=video.gif | Graphics Interchange Format |
.m4v | yolo predict source=video.m4v | MPEG-4 Part 14 |
.mkv | yolo predict source=video.mkv | Matroska |
.mov | yolo predict source=video.mov | QuickTime File Format |
.mp4 | yolo predict source=video.mp4 | MPEG-4 Part 14 - Wikipedia |
.mpeg | yolo predict source=video.mpeg | MPEG-1 Part 2 |
.mpg | yolo predict source=video.mpg | MPEG-1 Part 2 |
.ts | yolo predict source=video.ts | MPEG Transport Stream |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | WebM 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:
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 NumPy array. |
orig_shape | tuple | Kích thước ảnh gốc theo đị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 mỗi 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 đặc trưng (keypoint) đã 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 định hướng (oriented bounding box). |
semantic_mask | SemanticMask, optional | Một đối tượng SemanticMask chứa bản đồ lớp dày đặc theo từng pixel. |
speed | dict | Mộ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. |
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 ảnh. |
save_dir | str, optional | Thư 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ính | Loại | Kích thước | Mô tả |
|---|---|---|---|
result.boxes | Boxes | (N) | Các khung bao phát hiện. |
result.boxes.data | torch.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.xyxy | torch.float32 | (N,4) | Các hộp pixel xyxy. |
result.boxes.conf | torch.float32 | (N,) | Điểm độ tin cậy. |
result.boxes.cls | torch.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ức | Kiểu trả về | Mô tả |
|---|---|---|
update() | None | Cậ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() | Results | Trả 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() | Results | Trả 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() | Results | Trả 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() | Results | Trả 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() | Results | Tạ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.ndarray | Vẽ 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() | None | Hiển thị hình ảnh với các kết quả suy luận đã được chú thích. |
save() | str | Lư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() | 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 một tệp văn bản và trả về đường dẫn đến tệp đã lưu. |
save_crop() | None | Lư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() | DataFrame | Chuyển đổi kết quả phát hiện thành một 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, 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.
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 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ê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 sang 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 hình ở định dạng xyxy. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị độ tin cậy của các khung hình. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị lớp của các khung hình. |
id | Thuộc tính (torch.Tensor) | Trả về các ID theo dõi của các khung hình (nếu có). |
xywh | Thuộc tính (torch.Tensor) | Trả về các khung hình ở định dạng xywh. |
xyxyn | Thuộ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. |
xywhn | Thuộ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).
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 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ên | Loại | Mô tả |
|---|---|---|
data | Thuộ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ức | Trả về tensor masks trên bộ nhớ CPU. |
numpy() | Phương thức | Trả về tensor masks dưới dạng mảng NumPy. |
cuda() | Phương thức | Trả về tensor masks trên bộ nhớ GPU. |
to() | Phương thức | Trả về tensor masks với thiết bị và dtype được chỉ định. |
xyn | Thuộc tính (list[np.ndarray]) | Danh sách các đa giác mask đã được chuẩn hóa. |
xy | Thuộ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.
from ultralytics import YOLO
# Load a pretrained YOLO26n-sem Semantic model
model = YOLO("yolo26n-sem.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.semantic_mask.data) # print the H x W class-ID map| Tên | Loại | Mô tả |
|---|---|---|
data | Thuộ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. |
shape | Thuộ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ức | Trả về tensor semantic mask trên bộ nhớ CPU. |
numpy() | Phương thức | Trả về tensor semantic mask dưới dạng mảng NumPy. |
cuda() | Phương thức | Trả về tensor semantic mask trên bộ nhớ GPU. |
to() | Phương thức | Trả 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 độ.
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 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ên | Loại | Mô tả |
|---|---|---|
cpu() | Phương thức | Trả về tensor keypoints trên bộ nhớ CPU. |
numpy() | Phương thức | Trả về tensor keypoints dưới dạng mảng NumPy. |
cuda() | Phương thức | Trả về tensor keypoints trên bộ nhớ GPU. |
to() | Phương thức | Trả về tensor keypoints với thiết bị và kiểu dữ liệu được chỉ định. |
xyn | Thuộ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. |
xy | Thuộc tính (torch.Tensor) | Một danh sách các keypoints theo tọa độ pixel dưới dạng các tensor. |
conf | Thuộ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 top1 và top5.
from ultralytics import YOLO
# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-cls.pt")
# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg") # results list
# View results
for r in results:
print(r.probs) # print the Probs object containing the detected class probabilitiesDưới đây là bảng tóm tắt các phương thức và thuộc tính 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]) | Các chỉ số của top 5 lớp. |
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 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.
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 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ê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 sang 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 các khung hình. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị lớp của các khung hình. |
id | Thuộc tính (torch.Tensor) | Trả về các ID theo dõi của các khung hình (nếu có). |
xyxy | Thuộc tính (torch.Tensor) | Trả về các hộp nằm ngang theo định dạng xyxy. |
xywhr | Thuộc tính (torch.Tensor) | Trả về các hộp xoay theo định dạng xywhr. |
xyxyxyxy | Thuộc tính (torch.Tensor) | Trả về các hộp xoay theo định dạng xyxyxyxy. |
xyxyxyxyn | Thuộ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.
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ại | Mô tả | Mặc định |
|---|---|---|---|
conf | bool | Bao gồm điểm tin cậy phát hiện. | True |
line_width | float | Độ 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_size | float | Kí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 |
font | str | Tên font cho 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 | torch.Tensor | Ảnh thay thế. Các Tensor phải là dạng HWC BGR uint8 liền kề. | None |
kpt_radius | int | Bán kính cho các keypoints được vẽ. | 5 |
kpt_line | bool | Nối các keypoints 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ủ các hộp bao lên ảnh. | True |
masks | bool | Phủ các mask lên ảnh. | True |
probs | bool | Bao gồm 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 hình ảnh đã được chú thích vào tệp được chỉ định bởi filename. | False |
filename | str | Đường dẫn và tên của tệp để lưu hình ảnh được 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 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:
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-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 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 estimation và classification 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=Truetrong 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ượngResultsthay 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,devicevà 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ềnembed=[layer_index]vàomodel.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 embeddingsSau khi chạy inference với YOLO, các đối tượng
Resultschứa các phương thức để hiển thị và lưu hình ảnh đã được 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ả. 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.


