Dự đoán bằng model với Ultralytics YOLO#
Giới thiệu#
Trong lĩnh vực machine learning và thị giác máy tính, quá trình phân tích dữ liệu hình ảnh thường được gọi là suy luận hoặc dự đoán. Ultralytics YOLO26 cung cấp tính năng mạnh mẽ mang tên chế độ predict, được thiết kế để suy luận hiệu suất cao theo thời gian thực trên nhiều nguồn dữ liệu.
Xem bản xem trước YOLO27 chưa phát hành để tham khảo các ví dụ suy luận dự kiến.
Xem: Cách trích xuất kết quả từ các tác vụ Ultralytics YOLO26 cho dự án tùy chỉnh 🚀
Ứ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 bị ngã |
Tại sao nên dùng Ultralytics YOLO để suy luận?#
Dưới đây là lý do bạn nên cân nhắc chế độ predict của YOLO26 cho các nhu cầu suy luận khác nhau:
- Tính linh hoạt: Có thể chạy suy luận trên hình ảnh, video và cả luồng trực tiếp.
- Hiệu năng: Được thiết kế để xử lý tốc độ cao theo thời gian thực mà không ảnh hưởng đến độ chính xác.
- Dễ sử dụng: Giao diện Python và CLI trực quan giúp triển khai và kiểm thử nhanh chóng.
- Khả năng tùy chỉnh cao: Có nhiều cài đặt và tham số để điều chỉnh cách model suy luận theo yêu cầu cụ thể của bạn.
- Sẵn sàng cho production: Triển khai model dưới dạng endpoint suy luận của Ultralytics Platform với khả năng tự động mở rộng quy mô và giám sát, hoặc chạy suy luận cục bộ.
Các tính năng chính của chế độ predict#
Chế độ predict của YOLO26 được thiết kế mạnh mẽ và linh hoạt, với các tính năng sau:
- Tương thích với nhiều nguồn dữ liệu: Dù dữ liệu của bạn là ảnh riêng lẻ, bộ sưu tập ảnh, tệp video hay luồng video thời gian thực, chế độ predict đều đáp ứng được.
- Chế độ streaming: Sử dụng tính năng streaming để tạo generator tiết kiệm bộ nhớ gồm 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 predictor. Khác với hành vi mặc định (stream=False), vốn trả về danh sách chứa tất cả kết quả,stream=Truetrả về từng kết quả một, đặc biệt hữu ích khi xử lý video dài và luồng trực tiếp. - Xử lý theo batch: Xử lý nhiều hình ảnh hoặc khung hình video trong một batch, giúp giảm thêm tổng thời gian suy luận.
- Dễ tích hợp: Dễ dàng tích hợp 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.
Model Ultralytics YOLO trả về danh sách Python gồm các đối tượng Results hoặc generator tiết kiệm bộ nhớ gồm các đối tượng Results khi truyền stream=True cho model trong quá trình suy luận:
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt") # model YOLO26n đã được huấn luyện trước
# Chạy suy luận theo batch trên danh sách hình ảnh
results = model(["image1.jpg", "image2.jpg"]) # trả về danh sách các đối tượng Results
# Xử lý danh sách kết quả
for result in results:
boxes = result.boxes # Đối tượng Boxes cho đầu ra bounding box
masks = result.masks # Đối tượng Masks cho đầu ra mask phân đoạn
keypoints = result.keypoints # Đối tượng Keypoints cho đầu ra tư thế
probs = result.probs # Đối tượng Probs cho đầu ra phân loại
obb = result.obb # Đối tượng Oriented boxes cho đầu ra OBB
result.show() # hiển thị trên màn hình
result.save(filename="result.jpg") # lưu vào ổ đĩaNguồn suy luận#
YOLO26 có thể xử lý nhiều loại nguồn đầu vào để suy luận, như minh họa trong bảng bên dưới. Các nguồn bao gồm hình ảnh tĩnh, luồng video và nhiều định dạng dữ liệu khác nhau. Bảng cũng cho biết mỗi nguồn có thể được dùng ở chế độ streaming với tham số stream=True ✅ hay không. Chế độ streaming hữu ích khi xử lý video hoặc luồng trực tiếp vì chế độ này tạo generator kết quả thay vì tải tất cả khung hình vào bộ nhớ.
Sử dụng stream=True để xử lý video dài hoặc bộ dữ liệu lớn nhằm quản lý bộ nhớ hiệu quả. Khi dùng stream=False, kết quả của tất cả khung hình hoặc điểm dữ liệu được lưu trong bộ nhớ, có thể nhanh chóng chiếm nhiều dung lượng và gây lỗi hết bộ nhớ với đầu vào lớn. Ngược lại, stream=True sử dụng 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ớ, nhờ đó giảm đáng kể mức tiêu thụ bộ nhớ và ngăn lỗi hết bộ nhớ.
| Nguồn | Ví dụ | Kiểu | Ghi chú |
|---|---|---|---|
| image | 'image.jpg' | str hoặc Path | Tệp hình ảnh đơn. |
| URL | 'https://ultralytics.com/images/bus.jpg' | str | URL dẫn đến 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 nhiều tệp. Dùng ký tự * làm ký tự đại diện. |
| YouTube ✅ | 'https://youtu.be/LNwODJXcvt4' | str | URL dẫn đến 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 chứa một URL luồng trên mỗi dòng; tức là 8 luồng sẽ chạy với batch-size bằng 8. |
| webcam ✅ | 0 | int | Chỉ mục của thiết bị camera được kết nối để chạy suy luận. |
Dưới đây là các ví dụ mã cho từng loại nguồn:
Chạy suy luận trên một tệp hình ảnh.
from ultralytics import YOLO
# Tải model YOLO26n đã được huấn luyện trước
model = YOLO("yolo26n.pt")
# Xác định đường dẫn đến tệp hình ảnh
source = "path/to/image.jpg"
# Chạy suy luận trên nguồn
results = model(source) # danh sách các đối tượng ResultsCác tham số inference#
model.predict() chấp nhận nhiều tham số có thể truyền vào thời điểm inference để ghi đè các giá trị mặc định:
Kích thước cố định so với hình chữ nhật tối thiểu (rect)#
Theo mặc định, predict sử dụng rect=True, cho phép đệm theo hình chữ nhật tối thiểu khi có thể. Hình ảnh được thu phóng để vừa với imgsz và chỉ được đệm đến bội số stride gần nhất, vì vậy tensor cuối cùng có thể nhỏ hơn imgsz. Chỉ sử dụng đệm theo hình chữ nhật tối thiểu khi tất cả hình ảnh trong batch có cùng kích thước và backend hỗ trợ (PyTorch .pt hoặc định dạng export có kích thước động như ONNX động). Nếu không, hình ảnh sẽ được đệm đến kích thước đích imgsz đầy đủ.
Dùng rect=False để luôn đệm đến kích thước đích imgsz đầy đủ. Cách này được khuyến nghị khi bạn cần kích thước đầu vào cố định để khớp với model đã export (ONNX, TensorRT, v.v.).
imgsz kiểu số nguyên so với tuple
imgsz=640là số nguyên sẽ trở thành kích thước đích(640, 640)hình vuông sau khi làm tròn theo stride.imgsz=(384, 672)là tuple thiết lập kích thước đích hình chữ nhật. Vớirect=True, tensor thực tế có thể nhỏ hơn kích thước đích này.
Training so với predict/export
Training chỉ chấp nhận imgsz là một số nguyên duy nhất (danh sách [h, w] được chuyển 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
# Tải model YOLO26n đã được huấn luyện trước
model = YOLO("yolo26n.pt")
# Chạy inference trên 'bus.jpg' với các tham số
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)Các đối số suy luận:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
source | str hoặc int hoặc None | None | Chỉ định nguồn dữ liệu dùng để suy luận. Có thể là đường dẫn hình ảnh, file video, thư mục, URL hoặc ID thiết bị dùng cho luồng trực tiếp. Nếu bỏ trống, hệ thống ghi log cảnh báo và model chuyển sang dùng tài nguyên demo tích hợp sẵn (ultralytics/assets hoặc URL demo dành cho OBB). Hỗ trợ nhiều định dạng và nguồn dữ liệu, cho phép ứng dụng linh hoạt với các loại đầu vào khác nhau. |
conf | float | 0.25 | Đặt ngưỡng confidence tối thiểu cho các detection. Những đối tượng được phát hiện với confidence thấp hơn ngưỡng này sẽ bị loại bỏ. Điều chỉnh giá trị này có thể giúp giảm false positive. |
iou | float | 0.7 | Ngưỡng giao trên hợp (IoU) cho ức chế phi cực đại (NMS). Giá trị thấp hơn dẫn đến ít detection hơn do loại bỏ các box chồng lấn, hữu ích để giảm dự đoán trùng lặp. |
imgsz | int hoặc tuple | 640 | Kích thước đích của letterbox. Một số nguyên xác định N×N hình vuông; một tuple xác định (height, width). Với rect=True, tensor thực tế có thể nhỏ hơn kích thước đích này do padding hình chữ nhật tối thiểu. Dùng rect=False để có kích thước cố định. Xem Kích thước cố định và hình chữ nhật tối thiểu. |
rect | bool | True | Nếu là True, sử dụng padding hình chữ nhật tối thiểu khi có thể (batch có cùng hình dạng và backend được hỗ trợ). Nếu là False, luôn padding đến imgsz đầy đủ. Xem Kích thước cố định và hình chữ nhật tối thiểu. |
quantize | int hoặc str | None | Độ chính xác suy luận: 16/"fp16" và 32/"fp32"/unset chọn phép tính FP16 hoặc FP32 cho model PyTorch và TorchScript (FP32 trên CPU); các định dạng khác sử dụng độ chính xác do artifact và runtime của chúng lựa chọn. Tại 16, OpenVINO vẫn làm tròn đầu vào trên client xuống FP16 rồi mở rộng lại thành FP32 mà không thay đổi độ chính xác runtime. Lượng tử hóa INT8/PTQ được cấu hình trong quá trình xuất, sau đó được sử dụng bằng cách tải model đã xuất. Thay thế flag half đã lỗi thời. |
device | str | None | Chỉ định thiết bị dùng để suy luận (ví dụ: cpu, cuda:0, 0, npu hoặc npu:0). Cho phép người dùng chọn CPU, một GPU cụ thể, Huawei Ascend NPU hoặc thiết bị tính toán khác để thực thi model. |
dnn | bool | False | Nếu True, sử dụng module DNN của OpenCV thay vì ONNX Runtime để suy luận model ONNX. |
data | str | None | Đường dẫn đến YAML của dataset (ví dụ: coco8.yaml), chỉ đọc trường names và chỉ khi model đã tải không có tên class riêng: model được export bởi bên thứ ba hoặc model Ultralytics được export tách khỏi metadata đi kèm. Nếu không, model như vậy sẽ báo cáo class0, class1 và các giá trị tiếp theo. |
batch | int | 1 | Chỉ định batch size cho suy luận (chỉ hoạt động khi nguồn là thư mục, tệp video hoặc tệp .txt). Batch size lớn hơn có thể tăng thông lượng, rút ngắn tổng thời gian cần thiết cho suy luận. |
max_det | int | 300 | Số lượng detection 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, ngăn đầu ra quá nhiều trong các cảnh dày đặc. |
vid_stride | int | 1 | Bước nhảy frame cho đầu vào video. Cho phép bỏ qua frame trong video để tăng tốc xử lý, đổi lại giảm độ phân giải theo thời gian. Giá trị 1 xử lý mọi frame; giá trị cao hơn sẽ bỏ qua frame. |
stream_buffer | bool | False | Xác định có đưa frame mới nhận vào hàng đợi cho luồng video hay không. Nếu False, các frame cũ sẽ bị loại bỏ để nhường chỗ cho frame mới (tối ưu cho ứng dụng thời gian thực). Nếu True, frame mới được đưa vào buffer để bảo đảm không bỏ qua frame nào, nhưng sẽ gây độ trễ nếu FPS suy luận thấp hơn FPS của luồng. |
visualize | bool | False | Lưu heatmap kích hoạt class bên cạnh mỗi dự đoán, cho biết pixel nào làm tăng điểm số của class được dự đoán. Tuân theo conf và classes, vì vậy classes=[0] chỉ ánh xạ class đó. Chỉ khả dụng với model PyTorch của Ultralytics. |
augment | bool | False | Bật tăng cường lúc kiểm thử (TTA) cho dự đoán, có thể cải thiện độ vững chắc của detection nhưng làm giảm tốc độ suy luận. Chỉ khả dụng với model PyTorch của Ultralytics. |
agnostic_nms | bool | False | Bật Non-Maximum Suppression (NMS) không phụ thuộc class, loại bỏ các box chồng lấp có điểm thấp hơn giữa các class khác nhau thay vì chỉ trong cùng một class. Hữu ích trong các tình huống detection đa class thường có hiện tượng chồng lấp class. Với suy luận không dùng NMS (nms=False trên YOLO26 hoặc YOLOv10), tùy chọn này chỉ ngăn cùng một detection xuất hiện với nhiều nhãn class (các bản trùng IoU=1.0), không thực hiện loại bỏ dựa trên ngưỡng IoU giữa các box riêng biệt. |
classes | list[int] | None | Lọc dự đoán theo một tập ID class. Chỉ trả về các detection thuộc những class được chỉ định. Hữu ích khi cần tập trung vào các đối tượng liên quan trong tác vụ detection đa class. |
retina_masks | bool | False | Trả về mask phân đoạn độ phân giải cao. Nếu bật, các mask được trả về (masks.data) sẽ khớp với kích thước ảnh gốc. Nếu tắt, mask có kích thước ảnh được dùng trong quá trình suy luận. |
embed | list[int] | None | Chỉ định các layer dùng để trích xuất vector đặc trưng hoặc embedding. Dùng model.embed(source) cho embedding của layer áp chót hoặc model.predict(source, embed=[layer]) để chọn các layer cụ thể. Hữu ích cho các tác vụ tiếp theo như phân cụm hoặc tìm kiếm độ tương đồng. Chỉ khả dụng với model PyTorch của Ultralytics. |
project | str | None | Tên thư mục dự án nơi lưu đầu ra dự đoán nếu bật save. |
name | str | None | Tên lượt chạy dự đoán. Dùng để tạo thư mục con trong thư mục dự án, nơi lưu đầu ra dự đoán nếu bật save. |
stream | bool | False | Cho phép xử lý tiết kiệm bộ nhớ đối với video dài hoặc nhiều ảnh bằng cách trả về một generator gồm các đối tượng Results thay vì tải toàn bộ frame vào bộ nhớ cùng lúc. |
verbose | bool | True | Điều khiển việc hiển thị nhật ký suy luận 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 | Bật biên dịch đồ thị torch.compile của PyTorch 2.x bằng backend='inductor'. Chấp nhận True → "default", False → tắt, hoặc chế độ dạng chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Nếu không được hỗ trợ, sẽ chuyển về chế độ eager kèm cảnh báo. |
channels_last | bool | None | Sử dụng định dạng bộ nhớ channels_last (NHWC) cho suy luận PyTorch gốc. None tự động bật định dạng này trên CPU x86 chạy Linux và Windows có oneDNN, với PyTorch 1.13 trở lên; False tắt định dạng này; còn True yêu cầu sử dụng định dạng này trên CPU x86 hoặc thiết bị CUDA được hỗ trợ. ARM64, MPS, các phiên bản PyTorch cũ hơn, CPU không có oneDNN và các định dạng đã export như TensorRT và ONNX không thay đổi. |
nms | bool, không bắt buộc | None | Mặc định chạy suy luận một-nhiều với NMS (None hoặc True). Đặt False để dùng head một-một không có NMS khi khả dụng. Xem hướng dẫn Detection đầu-cuối để biết thêm chi tiết. |
Các tham số trực quan hóa:
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
show | bool | False | Nếu True, hiển thị ả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 | Bật lưu ảnh hoặc video đã được chú thích thành tệp. Hữu ích cho tài liệu, phân tích thêm hoặc chia sẻ kết quả. Mặc định là True khi dùng CLI và False khi dùng trong Python. |
save_frames | bool | False | Khi xử lý video, lưu từng frame thành ảnh. Hữu ích để trích xuất frame cụ thể hoặc phân tích chi tiết từng frame. |
save_txt | bool | False | Lưu kết quả detection vào tệp văn bản theo định dạng [class] [x_center] [y_center] [width] [height] [confidence]. Hữu ích khi tích hợp với các công cụ phân tích khác. |
save_conf | bool | False | Đưa điểm confidence vào các tệp văn bản đã lưu. Tăng mức độ chi tiết dành cho hậu xử lý và phân tích. |
save_crop | bool | False | Lưu ảnh đã cắt của các detection. Hữu ích cho tăng cường dataset, phân tích hoặc tạo dataset tập trung vào các đối tượng cụ thể. |
show_labels | bool | True | Hiển thị nhãn cho mỗi detection trong đầu ra trực quan. Giúp nhận biết ngay các đối tượng được phát hiện. |
show_conf | bool | True | Hiển thị điểm confidence bên cạnh nhãn của mỗi detection. Cho biết mức độ chắc chắn của model đối với từng detection. |
show_boxes | bool | True | Vẽ bounding box quanh các đối tượng được phát hiện. Cần thiết để nhận diện trực quan và xác định vị trí đối tượng trong ảnh hoặc frame video. |
line_width | int or None | None | Chỉ định độ rộng đường viền của bounding box. Nếu None, độ rộng đường viền sẽ tự động điều chỉnh theo kích thước ảnh. Cho phép tùy chỉnh hiển thị để dễ quan sát. |
Định dạng hình ảnh và video#
YOLO26 hỗ trợ nhiều định dạng hình ảnh và video, như được chỉ định trong ultralytics/data/utils.py. Xem các bảng bên dưới để biết phần mở rộng hợp lệ và ví dụ lệnh predict.
Hình ảnh#
Bảng dưới đây liệt kê các định dạng hình ảnh Ultralytics hợp lệ.
Các định dạng HEIC/HEIF yêu cầu pi-heif, gói này sẽ được cài đặt tự động trong lần sử dụng đầu tiên. Pillow hỗ trợ AVIF nguyên bản.
| Phần mở rộng hình ảnh | Ví dụ lệnh Predict | Tài liệu tham khảo |
|---|---|---|
.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 | yolo predict source=image.heif | Định dạng hình ảnh hiệu suất cao |
.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 nhiều ảnh |
.png | yolo predict source=image.png | Đồ họa mạng di động |
.tif | yolo predict source=image.tif | Định dạng tệp ảnh có gắn thẻ |
.tiff | yolo predict source=image.tiff | Định dạng tệp ảnh có gắn thẻ |
.webp | yolo predict source=image.webp | WebP |
Video#
Bảng dưới đây liệt kê các định dạng video Ultralytics hợp lệ.
| Phần mở rộng video | Ví dụ lệnh Predict | Tài liệu tham khảo |
|---|---|---|
.asf | yolo predict source=video.asf | Định dạng hệ thống nâng cao |
.avi | yolo predict source=video.avi | Đan xen âm thanh và video |
.gif | yolo predict source=video.gif | Định dạng trao đổi đồ họa |
.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 truyền tải MPEG |
.wmv | yolo predict source=video.wmv | Video Windows Media |
.webm | yolo predict source=video.webm | Dự án WebM |
Làm việc với Results#
Tất cả lời gọi predict() của Ultralytics sẽ trả về danh sách các đối tượng Results:
from ultralytics import YOLO
# Tải model YOLO26n đã được huấn luyện trước
model = YOLO("yolo26n.pt")
# Chạy suy luận trên một ảnh
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
[
"https://ultralytics.com/images/bus.jpg",
"https://ultralytics.com/images/zidane.jpg",
]
) # inference theo batchCác đối tượng Results có những thuộc tính sau:
| Thuộc tính | Kiểu | Mô tả |
|---|---|---|
orig_img | np.ndarray | Hình ảnh gốc dưới dạng mảng NumPy. |
orig_shape | tuple | Kích thước hình ảnh gốc theo định dạng (height, width). |
boxes | Boxes, optional | Đối tượng Boxes chứa các bounding box phát hiện được. |
masks | Masks, optional | Đối tượng Masks chứa các mask phát hiện được. |
probs | Probs, optional | Đối tượng Probs chứa xác suất của từng lớp trong tác vụ phân loại. |
keypoints | Keypoints, optional | Đối tượng Keypoints chứa các keypoint được phát hiện cho từng đối tượng. |
obb | OBB, optional | Đối tượng OBB chứa các bounding box có định hướng. |
semantic_mask | SemanticMask, optional | Đối tượng SemanticMask chứa bản đồ lớp dày đặc theo từng pixel. |
depth | DepthMap, optional | Đối tượng DepthMap chứa bản đồ độ sâu dày đặc theo từng pixel. |
speed | dict | Từ điển chứa tốc độ tiền xử lý, inference và hậu xử lý tính bằng mili giây trên mỗi hình ảnh. |
names | dict | Từ điển ánh xạ chỉ mục 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 kết quả. |
Results theo tác vụ#
Các trường bên dưới được điền tùy theo tác vụ của model — hãy so sánh phát hiện, phân đoạn, phân đoạn ngữ nghĩa, ước tính độ sâu, phân loại, pose và OBB nếu bạn chưa chọn tác vụ. Mỗi lần dự đoán trả về một đối tượng Results cho mỗi hình ảnh hoặc frame. Các trường chung ở trên luôn có sẵn, còn dữ liệu dự đoán riêng cho từng tác vụ được lưu trong các trường bên dưới. Tensor tọa độ và độ tin cậy YOLO là torch.float32; tensor xác suất là torch.float32, trừ khi sử dụng inference FP16 (quantize=16), khi đó là torch.float16. Sau result.numpy(), tensor trở thành mảng NumPy với dtype NumPy tương ứng. Mask instance là tensor nhị phân torch.uint8, trong khi mask ngữ nghĩa sử dụng dtype số nguyên nhỏ nhất phù hợp cho ID lớp: torch.uint8, torch.int16 hoặc torch.int32, tùy theo số lớp.
| Thuộc tính | Kiểu | Hình dạng | Mô tả |
|---|---|---|---|
result.boxes | Boxes | (N) | Các bounding box phát hiện. |
result.boxes.data | torch.float32 | (N,6/7) | [x1,y1,x2,y2,conf,cls] thô, cùng ID track tùy chọn. |
result.boxes.xyxy | torch.float32 | (N,4) | Các bounding box pixel xyxy. |
result.boxes.conf | torch.float32 | (N,) | Điểm độ tin cậy. |
result.boxes.cls | torch.float32 | (N,) | ID lớp; chuyển 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 bằng dữ liệu mới như boxes, masks, probs, obb, keypoints, mask ngữ nghĩa hoặc độ sâu. |
cpu() | Results | Trả về bản sao của đối tượng Results với tất 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ả tensor được chuyển đổi thành mảng NumPy. |
cuda() | Results | Trả về bản sao của đối tượng Results với tất cả tensor được chuyển sang bộ nhớ GPU. |
to() | Results | Trả về bản sao của đối tượng Results với tensor được chuyển sang device và dtype được chỉ định. |
new() | Results | Tạo đối tượng Results mới có cùng thuộc tính image, path, names và speed. |
plot() | np.ndarray | Vẽ kết quả phát hiện lên ảnh BGR đầu vào và trả về ảnh đã chú thích. |
show() | None | Hiển thị ảnh cùng kết quả suy luận đã 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ề chuỗi log cho từng tác vụ, nêu 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 ả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 dictionary tóm tắt, có thể chuẩn hóa tùy chọn. |
to_df() | DataFrame | Chuyển đổi kết quả phát hiện thành DataFrame Polars. |
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 về lớp Results.
Boxes#
Có thể dùng đối tượng Boxes để lập chỉ mục, thao tác và chuyển đổi bounding box sang các định dạng khác nhau.
from ultralytics import YOLO
# Tải model YOLO26n đã được huấn luyện trước
model = YOLO("yolo26n.pt")
# Chạy suy luận trên một ảnh
results = model("https://ultralytics.com/images/bus.jpg") # danh sách kết quả
# Xem kết quả
for r in results:
print(r.boxes) # in đối tượng Boxes chứa các bounding box được phát hiệnDướ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 | Kiểu | Mô tả |
|---|---|---|
cpu() | Phương thức | Chuyển đối tượng sang bộ nhớ CPU. |
numpy() | Phương thức | Chuyển đối tượng thành mảng NumPy. |
cuda() | Phương thức | Chuyển đối tượng sang bộ nhớ CUDA. |
to() | Phương thức | Chuyển đối tượng sang device được chỉ định. |
xyxy | Thuộc tính (torch.Tensor) | Trả về các box ở định dạng xyxy. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị độ tin cậy của box. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị lớp của box. |
id | Thuộc tính (torch.Tensor) | Trả về track ID của box (nếu có). |
xywh | Thuộc tính (torch.Tensor) | Trả về các box ở định dạng xywh. |
xyxyn | Thuộc tính (torch.Tensor) | Trả về các box ở đị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 box ở đị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 về lớp Boxes.
Masks#
Có thể dùng đối tượng Masks để lập chỉ mục, thao tác và chuyển đổi masks thành segments.
from ultralytics import YOLO
# Tải model Segment YOLO26n-seg đã được huấn luyện trước
model = YOLO("yolo26n-seg.pt")
# Chạy suy luận trên một ảnh
results = model("https://ultralytics.com/images/bus.jpg") # danh sách kết quả
# Xem kết quả
for r in results:
print(r.masks) # in đối tượng Masks chứa các mask đối tượng đã phát hiệnDướ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 | Kiểu | Mô tả |
|---|---|---|
data | Thuộc tính (torch.Tensor) | Tensor mask nhị phân torch.uint8 có shape (N,H,W) và các giá trị 0 hoặc 1. |
cpu() | Phương thức | Trả về tensor masks trong 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 trong bộ nhớ GPU. |
to() | Phương thức | Trả về tensor masks với device và dtype được chỉ định. |
xyn | Thuộc tính (list[np.ndarray]) | Danh sách các polygon mask đã chuẩn hóa. |
xy | Thuộc tính (list[np.ndarray]) | Danh sách các polygon mask theo tọa độ pixel. |
Để biết thêm chi tiết, xem tài liệu về lớp Masks.
SemanticMask#
SemanticMask lưu một class map dày đặc cho kết quả phân đoạn ngữ nghĩa. Khác với Masks, đối tượng này không chứa một mask nhị phân cho mỗi đối tượng và không cung cấp các hàm hỗ trợ polygon.
from ultralytics import YOLO
# Tải model Semantic YOLO26n-sem đã được huấn luyện trước
model = YOLO("yolo26n-sem.pt")
# Chạy suy luận trên một ảnh
results = model("https://ultralytics.com/images/bus.jpg") # danh sách kết quả
# Xem kết quả
for r in results:
print(r.semantic_mask.data) # in class map H x W chứa ID lớp| Tên | Kiểu | Mô tả |
|---|---|---|
data | Thuộc tính (torch.Tensor) | Class map chứa ID lớp, có shape (H,W). Dtype là torch.uint8, torch.int16 hoặc torch.int32, tùy theo số lượng lớp. |
shape | Thuộc tính (tuple) | Shape của class map, thường khớp với result.orig_shape. |
cpu() | Phương thức | Trả về tensor mask ngữ nghĩa trong bộ nhớ CPU. |
numpy() | Phương thức | Trả về tensor mask ngữ nghĩa dưới dạng mảng NumPy. |
cuda() | Phương thức | Trả về tensor mask ngữ nghĩa trong bộ nhớ GPU. |
to() | Phương thức | Trả về tensor mask ngữ nghĩa với device và dtype được chỉ định. |
Keypoints#
Có thể dùng đối tượng Keypoints để lập chỉ mục, thao tác và chuẩn hóa tọa độ.
from ultralytics import YOLO
# Tải model Pose YOLO26n-pose đã được huấn luyện trước
model = YOLO("yolo26n-pose.pt")
# Chạy suy luận trên một ảnh
results = model("https://ultralytics.com/images/bus.jpg") # danh sách kết quả
# Xem kết quả
for r in results:
print(r.keypoints) # in đối tượng Keypoints chứa các keypoint đã phát hiệnDướ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 và mô tả:
| Tên | Kiểu | Mô tả |
|---|---|---|
cpu() | Phương thức | Trả về tensor keypoints trong 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 trong bộ nhớ GPU. |
to() | Phương thức | Trả về tensor keypoints với device và dtype được chỉ định. |
xyn | Thuộc tính (torch.Tensor) | Tọa độ keypoint đã chuẩn hóa có shape (N,K,2). |
xy | Thuộc tính (torch.Tensor) | Tọa độ keypoint theo pixel có shape (N,K,2). |
conf | Thuộc tính (torch.Tensor) | Trả về giá trị độ tin cậy của keypoint nếu có, nếu không thì trả về None. |
Để biết thêm chi tiết, xem tài liệu về lớp Keypoints.
Probs#
Có thể dùng đối tượng Probs để lấy các chỉ số và điểm số phân loại top1 và top5.
from ultralytics import YOLO
# Tải model Classify YOLO26n-cls đã được huấn luyện trước
model = YOLO("yolo26n-cls.pt")
# Chạy suy luận trên một ảnh
results = model("https://ultralytics.com/images/bus.jpg") # danh sách kết quả
# Xem kết quả
for r in results:
print(r.probs) # in đối tượng Probs chứa xác suất của các lớp đã phát hiệnDưới đây là bảng tóm tắt các phương thức và thuộc tính của lớp Probs:
| Tên | Kiểu | Mô tả |
|---|---|---|
cpu() | Phương thức | Trả về một bản sao của tensor probs trong 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 trong bộ nhớ GPU. |
to() | Phương thức | Trả về một bản sao của tensor probs với device và dtype được chỉ định. |
top1 | Thuộc tính (int) | Chỉ số của lớp đứng đầu. |
top5 | Thuộc tính (list[int]) | Chỉ số của 5 lớp đứng đầu. |
top1conf | Thuộc tính (torch.Tensor) | Độ tin cậy của lớp đứng đầu. |
top5conf | Thuộc tính (torch.Tensor) | Độ tin cậy của 5 lớp đứng đầu. |
Để biết thêm chi tiết, xem tài liệu về lớp Probs.
OBB#
Đối tượng OBB có thể được dùng để lập chỉ mục, thao tác và chuyển đổi bounding box định hướng sang các định dạng khác nhau.
from ultralytics import YOLO
# Tải model YOLO26n đã được huấn luyện trước
model = YOLO("yolo26n-obb.pt")
# Chạy suy luận trên một ảnh
results = model("https://ultralytics.com/images/boats.jpg") # danh sách kết quả
# Xem kết quả
for r in results:
print(r.obb) # # In đối tượng OBB chứa các bounding box phát hiện định hướngDướ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 và mô tả:
| Tên | Kiểu | Mô tả |
|---|---|---|
cpu() | Phương thức | Chuyển đối tượng sang bộ nhớ CPU. |
numpy() | Phương thức | Chuyển đối tượng thành mảng NumPy. |
cuda() | Phương thức | Chuyển đối tượng sang bộ nhớ CUDA. |
to() | Phương thức | Chuyển đối tượng sang device được chỉ định. |
conf | Thuộc tính (torch.Tensor) | Trả về các giá trị độ tin cậy của box. |
cls | Thuộc tính (torch.Tensor) | Trả về các giá trị lớp của box. |
id | Thuộc tính (torch.Tensor) | Trả về track ID của box (nếu có). |
xyxy | Thuộc tính (torch.Tensor) | Trả về các box nằm ngang ở định dạng xyxy. |
xywhr | Thuộc tính (torch.Tensor) | Trả về các box xoay ở định dạng xywhr. |
xyxyxyxy | Thuộc tính (torch.Tensor) | Trả về các box xoay ở định dạng xyxyxyxy. |
xyxyxyxyn | Thuộc tính (torch.Tensor) | Trả về các box xoay ở định dạng xyxyxyxy, được chuẩn hóa theo kích thước ảnh. |
Để biết thêm chi tiết, xem tài liệu về 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 dự đoán bằng cách phủ các đối tượng được phát hiện (chẳng hạn như bounding box, mask, keypoint và xác suất) lên ảnh gốc. Phương thức này trả về ảnh đã chú thích dưới dạng mảng NumPy, giúp dễ dàng hiển thị hoặc lưu ảnh.
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ố để tùy chỉnh đầu ra:
| Đối số | Kiểu | Mô tả | Mặc định |
|---|---|---|---|
conf | bool | Bao gồm điểm độ tin cậy của phát hiện. | True |
line_width | float | Độ rộng đường viền của bounding box. Tỷ lệ thay đổi theo kích thước ảnh nếu None. | None |
font_size | float | Cỡ chữ. Tỷ lệ thay đổi theo kích thước ảnh nếu None. | None |
font | str | Tên font dùng 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ế. Tensor phải liên tục, có định dạng HWC BGR uint8. | None |
kpt_radius | int | Bán kính của keypoint được vẽ. | 5 |
kpt_line | bool | Nối các keypoint bằng đường thẳng. | True |
labels | bool | Bao gồm nhãn lớp trong chú thích. | True |
boxes | bool | Phủ bounding box lên ảnh. | True |
masks | bool | Phủ mask lên ảnh. | True |
probs | bool | Bao gồm xác suất phân loại. | True |
show | bool | Hiển thị trực tiếp ảnh đã chú thích 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 dùng để 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 BGR cho nhãn phân loại. | (255, 255, 255) |
Suy luận an toàn luồng#
Đảm bảo an toàn luồng trong quá trình suy luận là yếu tố quan trọng khi chạy nhiều model YOLO song song trên các luồng khác nhau. Suy luận an toàn luồng đảm bảo dự đoán của từng luồng được cô lập và không ảnh hưởng lẫn nhau, tránh race condition và đảm bảo đầu ra nhất quán, đáng tin cậy.
Khi sử dụng model YOLO trong ứng dụng đa luồng, điều quan trọng là khởi tạo các đối tượng model riêng cho từng luồng hoặc sử dụng bộ nhớ lưu trữ cục bộ theo luồng để ngăn ngừa xung đột:
Khởi tạo một model 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)
# # Xử lý kết quả
# # Khởi chạy các luồng, mỗi luồng có một instance model riêng
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 chuyên sâu về suy luận an toàn luồng với model YOLO và xem hướng dẫn từng bước, vui lòng tham khảo Hướng dẫn suy luận YOLO an toàn luồng. Hướng dẫn này cung cấp mọi thông tin cần thiết để tránh các lỗi thường gặp và đảm bảo quy trình suy luận đa luồng hoạt động trơn tru.
Vòng lặp for cho nguồn stream#
Dưới đây là script Python sử dụng OpenCV (cv2) và YOLO để chạy suy luận trên các frame video. Script này giả định bạn đã cài đặt các package cần thiết (opencv-python và ultralytics).
import cv2
from ultralytics import YOLO
# Tải model YOLO
model = YOLO("yolo26n.pt")
# # Mở tệp video
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
# # Lặp qua các frame video
while cap.isOpened():
# # Đọc một frame từ video
success, frame = cap.read()
if success:
# # Chạy suy luận YOLO trên frame
results = model(frame)
# # Trực quan hóa kết quả trên frame
annotated_frame = results[0].plot()
# # Hiển thị frame đã chú thích
cv2.imshow("YOLO Inference", annotated_frame)
# # Thoát vòng lặp nếu nhấn 'q'
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
# # Thoát vòng lặp nếu đã đến cuối video
break
# # Giải phóng đối tượng capture video và đóng cửa sổ hiển thị
cap.release()
cv2.destroyAllWindows()Script này chạy dự đoán trên từng frame của video, trực quan hóa kết quả và hiển thị kết quả trong một cửa sổ. Có thể thoát vòng lặp bằng cách nhấn 'q'.
Tiếp theo là gì#
Bạn đã sẵn sàng vượt qua model pretrained? Xác nhận tác vụ phù hợp với bài toán của bạn, định dạng dữ liệu của riêng bạn theo hướng dẫn về dataset, rồi huấn luyện trên dữ liệu đó.
Câu hỏi thường gặp#
Ultralytics YOLO là model tiên tiến nhất dành cho phát hiện đối tượng, phân đoạn instance, phân đoạn ngữ nghĩa, ước lượng độ sâu, phân loại, ước lượng pose và phát hiện bounding box định hướng (OBB) theo thời gian thực. predict mode cho phép người dùng thực hiện suy luận tốc độ cao trên nhiều nguồn dữ liệu như ảnh, video và luồng trực tiếp. Được thiết kế để đạt hiệu suất và tính linh hoạt, model cũng hỗ trợ xử lý theo batch và các chế độ streaming. Để biết thêm chi tiết về các tính năng, hãy xem predict mode của Ultralytics YOLO.
Ultralytics YOLO có thể xử lý nhiều nguồn dữ liệu, bao gồm ảnh riêng lẻ, video, thư mục, URL và luồng. Bạn có thể chỉ định nguồn dữ liệu trong lệnh gọi
model.predict(). Ví dụ: dùng'image.jpg'cho ảnh cục bộ hoặc'https://ultralytics.com/images/bus.jpg'cho URL. Xem các ví dụ chi tiết về nhiều nguồn suy luận trong tài liệu.Để tối ưu tốc độ suy luận và quản lý bộ nhớ hiệu quả, bạn có thể dùng chế độ streaming bằng cách đặt
stream=Truetrong phương thức gọi của predictor. Chế độ streaming tạo generatorResultstiết kiệm bộ nhớ thay vì tải tất cả frame vào bộ nhớ. Chế độ streaming đặc biệt hữu ích khi xử lý video dài hoặc dataset lớn. Tìm hiểu thêm về chế độ streaming.Phương thức
model.predict()trong YOLO hỗ trợ nhiều đối số nhưconf,iou,imgsz,devicevà nhiều đối số khác. Các đối số này cho phép bạn tùy chỉnh quy trình suy luận, thiết lập các tham số như ngưỡng độ tin cậy, kích thước ảnh và thiết bị dùng để tính toán. Mô tả chi tiết về các đối số này có trong mục đối số suy luận.Dùng
model.embed(source)để trích xuất feature embedding từ lớp áp chót, 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) # # Các đối tượng Results embeddings = model.embed(source) # # danh sách embedding torch.TensorSau khi chạy suy luận với YOLO, các đối tượng
Resultschứa những phương thức để hiển thị và lưu ảnh đã chú thích. Bạn có thể 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 chưa tồn tại trong đường dẫn tệp đều được tự động tạo (ví dụ:result.save("path/to/result.jpg")). Để xem danh sách đầy đủ các phương thức này, hãy tham khảo mục làm việc với kết quả.