YOLO Vision 2026:

Phát hiện đối tượng Object Detection bằng Hộp bao có định hướng (Oriented Bounding Boxes)#

Phát hiện đối tượng định hướng tiến xa hơn một bước so với phát hiện đối tượng tiêu chuẩn bằng cách đưa thêm một góc bổ sung để định vị đối tượng trong ảnh chính xác hơn.

Đầu ra của bộ phát hiện đối tượng định hướng là tập hợp các hộp bao xoay được bao quanh chính xác các đối tượng trong ảnh, cùng với nhãn lớp và điểm tin cậy cho mỗi hộp. Các hộp bao định hướng đặc biệt hữu ích khi đối tượng xuất hiện ở nhiều góc độ khác nhau, chẳng hạn như trong ảnh chụp từ trên không, nơi các hộp bao thẳng hàng với trục truyền thống có thể chứa nhiều phần nền không cần thiết.

Mẹo

Các model YOLO26 OBB sử dụng hậu tố -obb, tức là yolo26n-obb.pt, và đã được huấn luyện trước trên DOTAv1.



Watch: How to Detect & Track Objects with Ultralytics YOLO26 Oriented Bounding Boxes (OBB) | Ship Tracking 🚢

Mẫu hình ảnh trực quan#

Phát hiện tàu thuyền sử dụng OBBPhát hiện phương tiện sử dụng OBB
Phát hiện tàu thuyền sử dụng OBBPhát hiện phương tiện sử dụng OBB

Models#

Các model OBB được huấn luyện trước của YOLO26 được hiển thị ở đây, đã được huấn luyện trước trên tập dữ liệu DOTAv1.

Models được tải xuống tự động từ bản release Ultralytics mới nhất trong lần sử dụng đầu tiên.

Mô hìnhkích thước
(pixel)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Tốc độ
CPU ONNX
(ms)
Tốc độ
T4 TensorRT10
(ms)
params
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.514.0
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.855.1
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2183.3
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6230.0
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6516.5
  • Giá trị mAPtest dành cho đa tỉ lệ model đơn trên tập dữ liệu DOTAv1.
    Tái tạo bằng yolo val obb data=DOTAv1.yaml device=0 split=test và gửi kết quả đã hợp nhất tới Đánh giá DOTA.
  • Tốc độ được tính trung bình trên các ảnh tập val của DOTAv1 sử dụng instance Amazon EC2 P4d.
    Tái tạo bằng yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu
  • Giá trị ParamsFLOPs dành cho model đã hợp nhất sau model.fuse(), thao tác này gộp các lớp Conv và BatchNorm lại và, đối với các model end2end, loại bỏ phần đầu phát hiện một-sang-nhiều phụ trợ. Các checkpoint đã huấn luyện trước giữ nguyên kiến trúc huấn luyện đầy đủ và có thể hiển thị số lượng cao hơn.

Huấn luyện (Train)#

Huấn luyện YOLO26n-obb trên tập dữ liệu DOTA8 trong 100 epochs ở kích thước ảnh 640. Để xem danh sách đầy đủ các tham số khả dụng, hãy xem trang Cấu hình.

Lưu ý

Một OBB và góc xoay 180° của nó là giống hệt nhau, do đó góc xoay được xác định theo modulo 180° và hộp không có hướng cụ thể. Các nhãn huấn luyện được chuẩn hóa về định dạng cạnh dài: chiều rộng hộp w là cạnh dài hơn, góc được đo theo chiều kim đồng hồ từ trục x dương đến hướng của cạnh w, và được lưu trữ bằng đơn vị radian trong [-π/4, 3π/4) ([-45°, 135°)). Các dự đoán không được chuẩn hóa, do đó hộp được dự đoán có thể báo cáo cạnh ngắn là w; hãy xem Kết quả Đầu ra. Định dạng [0°, 90°) là quy ước theo phong cách DOTA được điều chỉnh và không được áp dụng trong quá trình huấn luyện hoặc suy luận.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.yaml")  # build a new model from YAML
model = YOLO("yolo26n-obb.pt")  # load a pretrained model (recommended for training)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt")  # build from YAML and transfer weights

# Train the model
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)


Watch: How to Train Ultralytics YOLO-OBB (Oriented Bounding Boxes) Models on DOTA Dataset using Ultralytics Platform

Định dạng tập dữ liệu#

Chi tiết về định dạng tập dữ liệu OBB có thể tìm thấy trong Hướng dẫn Tập dữ liệu. Định dạng YOLO OBB chỉ định các hộp bao bằng bốn điểm góc với tọa độ được chuẩn hóa giữa 0 và 1, tuân theo cấu trúc này. Tính năng gán nhãn của Ultralytics Platform hỗ trợ các nhãn OBB với một công cụ vẽ hộp bao có định hướng chuyên dụng:

class_index x1 y1 x2 y2 x3 y3 x4 y4

Về mặt nội bộ, YOLO xử lý các hàm mất mát (losses) và đầu ra ở định dạng xywhr, đại diện cho điểm trung tâm của hộp bao (xy), chiều rộng, chiều cao và góc xoay.

Val#

Xác thực độ chính xác của model YOLO26n-obb đã huấn luyện trên tập dữ liệu DOTA8. Không cần tham số nào vì model giữ nguyên data và các tham số huấn luyện của nó dưới dạng các thuộc tính của model.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val(data="dota8.yaml")  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95(B)
metrics.box.map50  # map50(B)
metrics.box.map75  # map75(B)
metrics.box.maps  # a list containing mAP50-95(B) for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Dự đoán (Predict)#

Sử dụng model YOLO26n-obb đã huấn luyện để chạy dự đoán trên hình ảnh.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Predict with the model
results = model("https://ultralytics.com/images/boats.jpg")  # predict on an image

# Access the results
for result in results:
    xywhr = result.obb.xywhr  # center-x, center-y, width, height, angle (radians)
    xyxyxyxy = result.obb.xyxyxyxy  # polygon format with 4-points
    names = [result.names[cls.item()] for cls in result.obb.cls.int()]  # class name of each box
    confs = result.obb.conf  # confidence score of each box


Watch: How to Detect and Track Storage Tanks using Ultralytics YOLO-OBB | Oriented Bounding Boxes | DOTA

Xem chi tiết đầy đủ về chế độ predict tại trang Predict.

Đầu ra kết quả#

Phát hiện hộp bao có định hướng trả về một đối tượng Results cho mỗi ảnh. Trường dự đoán chính là result.obb, chứa các hộp đã xoay, ID lớp và điểm độ tin cậy cho mỗi đối tượng được phát hiện.

Thuộc tínhLoạiKích thướcMô tả
result.obbOBB(N)Các khung hình định hướng (Oriented boxes).
result.obb.datatorch.float32(N,7/8)Dữ liệu thô của các khung hình xoay kèm độ tin cậy/lớp.
result.obb.xywhrtorch.float32(N,5)Các hộp đã xoay xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Bốn điểm góc.
result.obb.conftorch.float32(N,)Điểm độ tin cậy.

Các nhãn được chuẩn hóa theo quy ước cạnh dài nhưng các dự đoán thì không, do đó result.obb.xywhr có thể báo cáo w nhỏ hơn h với góc xoay được đo từ cạnh ngắn. Cả hai hình thức đều mô tả cùng một hình chữ nhật, vì vậy result.obb.xyxyxyxy là chính xác trong cả hai trường hợp. Chuyển đổi ngược lại các điểm góc khi mã nguồn phía sau cần định dạng cạnh dài, lưu ý rằng việc ghi lại các tham số hộp có thể làm dịch chuyển thứ tự các góc theo chu kỳ:

from ultralytics.utils.ops import xyxyxyxy2xywhr

xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy)  # w >= h, rotation in [-pi/4, 3pi/4)

Đối với các trường Results dành riêng cho từng tác vụ trên mọi tác vụ, hãy xem phần Predict Results by Task.

Xuất (Export)#

Xuất model YOLO26n-obb sang một định dạng khác như ONNX, CoreML, v.v.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom-trained model

# Export the model
model.export(format="onnx")

Các định dạng xuất YOLO26-obb khả dụng được liệt kê trong bảng dưới đây. Bạn có thể xuất sang bất kỳ định dạng nào bằng cách sử dụng tham số format, ví dụ: format='onnx' hoặc format='engine'. Bạn có thể dự đoán hoặc xác thực trực tiếp trên các model đã xuất, ví dụ: yolo predict model=yolo26n-obb.onnx. Các ví dụ sử dụng được hiển thị cho model của bạn sau khi quá trình xuất hoàn tất.

Định dạngĐối số formatMô hìnhMetadataTham số
PyTorch-yolo26n-obb.pt-
TorchScripttorchscriptyolo26n-obb.torchscriptimgsz, quantize, dynamic, nms, batch, device
ONNXonnxyolo26n-obb.onnximgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device
OpenVINOopenvinoyolo26n-obb_openvino_model/imgsz, quantize, dynamic, nms, batch, data, fraction, device
TensorRTengineyolo26n-obb.engineimgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device
CoreMLcoremlyolo26n-obb.mlpackageimgsz, dynamic, quantize, nms, batch, device
TF SavedModelsaved_modelyolo26n-obb_saved_model/imgsz, keras, quantize, opset, nms, batch, data, fraction, device
TF GraphDefpbyolo26n-obb.pbimgsz, opset, batch, device
TF Edge TPUedgetpuyolo26n-obb_edgetpu.tfliteimgsz, quantize, opset, data, fraction, device
PaddlePaddlepaddleyolo26n-obb_paddle_model/imgsz, batch, device
MNNmnnyolo26n-obb.mnnimgsz, batch, dynamic, quantize, simplify, opset, nms, device
NCNNncnnyolo26n-obb_ncnn_model/imgsz, quantize, batch, device
IMX500imxyolo26n-obb_imx_model/imgsz, quantize, data, fraction, nms, device
RKNNrknnyolo26n-obb_rknn_model/imgsz, batch, name, quantize, simplify, opset, data, fraction, device
ExecuTorchexecutorchyolo26n-obb_executorch_model/imgsz, batch, device
Axeleraaxelerayolo26n-obb_axelera_model/imgsz, batch, quantize, data, fraction, device
DEEPXdeepxyolo26n-obb_deepx_model/imgsz, quantize, simplify, opset, data, optimize, device
Qualcomm QNNqnnyolo26n-obb_qnn.onnximgsz, batch, name, quantize, simplify, opset, data, fraction, device
LiteRTlitertyolo26n-obb.tfliteimgsz, quantize, batch, data, fraction, device
Hailohailoyolo26n-obb_hailo_model/imgsz, name, quantize, data, fraction, simplify, conf, iou
Huawei Ascendascendyolo26n-obb_ascend_model/imgsz, batch, name, quantize, opset, simplify, nms

Xem chi tiết đầy đủ về export tại trang Export.

Ứng dụng trong thực tế#

Phát hiện OBB với YOLO26 có nhiều ứng dụng thực tiễn trong nhiều ngành công nghiệp khác nhau:

  • Quản lý Hàng hải và Cảng biển: Phát hiện tàu thuyền và phương tiện thủy ở các góc độ khác nhau để quản lý đội tàu và giám sát.
  • Quy hoạch Đô thị: Phân tích các tòa nhà và cơ sở hạ tầng từ ảnh chụp trên không.
  • Nông nghiệp: Giám sát cây trồng và thiết bị nông nghiệp từ dữ liệu quay từ drone.
  • Ngành Năng lượng: Kiểm tra các tấm pin năng lượng mặt trời và tuabin gió ở các hướng khác nhau.
  • Giao thông vận tải: Theo dõi phương tiện trên đường và trong bãi đỗ xe từ nhiều góc nhìn khác nhau.

Những ứng dụng này được hưởng lợi từ khả năng của OBB trong việc bao khớp chính xác các đối tượng ở bất kỳ góc độ nào, cung cấp khả năng phát hiện chính xác hơn so với các hộp bao truyền thống.

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

Hộp bao định hướng (OBB) là gì và chúng khác biệt như thế nào so với hộp bao thông thường?#

Hộp bao có định hướng (OBB) bao gồm một góc bổ sung để nâng cao độ chính xác trong việc định vị đối tượng trong ảnh. Không giống như các hộp bao thông thường là hình chữ nhật căn theo trục, OBB có thể xoay để khớp tốt hơn với định hướng của đối tượng. Điều này đặc biệt hữu ích cho các ứng dụng đòi hỏi vị trí đối tượng chính xác, chẳng hạn như ảnh hàng không hoặc ảnh vệ tinh (Hướng dẫn Tập dữ liệu).

Làm thế nào để huấn luyện model YOLO26n-obb bằng tập dữ liệu tùy chỉnh?#

Để huấn luyện model YOLO26n-obb với tập dữ liệu tùy chỉnh, hãy làm theo ví dụ bên dưới sử dụng Python hoặc CLI:

Ví dụ
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n-obb.pt")

# Train the model
results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)

Để biết thêm các tham số huấn luyện, hãy xem phần Cấu hình.

Tôi có thể sử dụng những tập dữ liệu nào để huấn luyện các model YOLO26-OBB?#

Các model YOLO26-OBB được huấn luyện trước trên các tập dữ liệu như DOTAv1, nhưng bạn có thể sử dụng bất kỳ tập dữ liệu nào được định dạng cho OBB. Thông tin chi tiết về các định dạng tập dữ liệu OBB có thể được tìm thấy trong Hướng dẫn Tập dữ liệu.

Làm thế nào tôi có thể xuất model YOLO26-OBB sang định dạng ONNX?#

Việc xuất model YOLO26-OBB sang định dạng ONNX rất đơn giản bằng cách sử dụng Python hoặc CLI:

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")

# Export the model
model.export(format="onnx")

Để biết thêm các định dạng xuất và chi tiết khác, vui lòng tham khảo trang Xuất.

Làm thế nào để xác thực độ chính xác của model YOLO26n-obb?#

Để xác thực model YOLO26n-obb, bạn có thể sử dụng các lệnh Python hoặc CLI như hiển thị dưới đây:

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-obb.pt")

# Validate the model
metrics = model.val(data="dota8.yaml")

Xem chi tiết xác thực đầy đủ trong phần Val.

Bình luận