Обнаружение объектов с ориентированными рамками с помощью Ultralytics YOLO#
Обнаружение объектов с ориентированными рамками расширяет возможности стандартного обнаружения объектов: дополнительный угол позволяет точнее определять расположение объектов на изображении.
Результат работы детектора объектов с ориентированными рамками — набор повёрнутых ограничивающих рамок, точно охватывающих объекты на изображении, с метками классов и оценками достоверности для каждой рамки. Такие рамки особенно полезны, когда объекты расположены под разными углами, например на аэрофотоснимках, где традиционные ограничивающие рамки, выровненные по осям, могут захватывать лишний фон. Типичные области применения: обнаружение кораблей и транспортных средств на снимках со спутников и дронов, анализ зданий и инфраструктуры для городского планирования, мониторинг сельскохозяйственных культур, проверка солнечных панелей и ветряных турбин.
Смотри: Как обнаруживать и отслеживать объекты с помощью ориентированных ограничивающих рамок Ultralytics YOLO26 (OBB) | Трекинг судов 🚢
В моделях YOLO26 OBB используется суффикс -obb, например yolo26n-obb.pt; они предобучены на DOTAv1.
| Обнаружение кораблей с помощью OBB | Обнаружение транспортных средств с помощью OBB |
|---|---|
![]() | ![]() |
Модели#
Ниже представлены модели YOLO26 OBB, предобученные на наборе данных DOTAv1.
Модели автоматически загружаются из последнего релиза Ultralytics при первом использовании.
| Модель | размер (пиксели) | mAPтест 50-95(e2e) | mAPтест 50(e2e) | Скорость CPU ONNX (мс) | Скорость T4 TensorRT10 (мс) | параметры (M) | FLOPs (B) |
|---|---|---|---|---|---|---|---|
| YOLO26n-obb | 1024 | 52.4 | 78.9 | 97.7 ± 0.9 | 2.8 ± 0.0 | 2.4 | 14.8 |
| YOLO26s-obb | 1024 | 54.8 | 80.9 | 218.0 ± 1.4 | 4.9 ± 0.1 | 9.8 | 56.7 |
| YOLO26m-obb | 1024 | 55.3 | 81.0 | 579.2 ± 3.8 | 10.2 ± 0.3 | 21.2 | 184.9 |
| YOLO26l-obb | 1024 | 56.2 | 81.6 | 735.6 ± 3.1 | 13.0 ± 0.2 | 25.6 | 232.4 |
| YOLO26x-obb | 1024 | 56.7 | 81.7 | 1485.7 ± 11.5 | 30.5 ± 0.9 | 57.6 | 520.1 |
- Значения mAPtest получены для одной модели при нескольких масштабах на наборе данных DOTAv1.
Воспроизведи результаты с помощьюyolo obb val data=DOTAv1.yaml device=0 split=test nms=Falseи отправь объединённые результаты на оценку DOTA. - Скорость усреднена по изображениям валидационной выборки DOTAv1: ONNX на CPU и TensorRT10 на GPU NVIDIA T4.
Воспроизведи результаты с помощьюyolo obb val data=DOTAv1.yaml batch=1 device=0|cpu nms=False - Значения Params и FLOPs указаны для объединённых моделей после свёртки Conv/BatchNorm и удаления неиспользуемой ветви обнаружения. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения, поэтому их показатели могут быть выше.
Предварительные результаты на DOTAv1 см. в предварительной версии YOLO27, ещё не выпущенной.
Обучение#
Обучай YOLO26n-obb на наборе данных DOTA8 в течение 100 эпох с размером изображения 640. Полный список доступных аргументов см. на странице Конфигурация.
OBB и его поворот на 180° идентичны, поэтому угол поворота задаётся по модулю 180°, а у рамки нет направления. Метки обучения приводятся к каноническому виду по длинной стороне: ширина рамки w соответствует её длинной стороне, угол измеряется по часовой стрелке от положительного направления оси x до ориентации ребра w, а значение хранится в радианах в [-π/4, 3π/4) ([-45°, 135°)). Предсказания не приводятся к каноническому виду, поэтому предсказанная рамка может обозначать короткое ребро как w; см. Вывод результатов. Форма [0°, 90°) — это стандартная регуляризованная конвенция в стиле DOTA, которая не применяется ни при обучении, ни при инференсе.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-obb.yaml") # создать новую модель из YAML
model = YOLO("yolo26n-obb.pt") # загрузить предварительно обученную модель (рекомендуется для обучения)
model = YOLO("yolo26n-obb.yaml").load("yolo26n-obb.pt") # создать модель из YAML и перенести веса
# Обучить модель
results = model.train(data="dota8.yaml", epochs=100, imgsz=640)Смотри: Как обучать модели Ultralytics YOLO-OBB (ориентированные ограничивающие рамки) на датасете DOTA с помощью платформы Ultralytics
Полное описание режима train см. на странице Обучение. Модели OBB также можно обучать с помощью облачного обучения на платформе Ultralytics.
Формат датасета#
Подробное описание формата наборов данных OBB см. в руководстве по наборам данных. В формате YOLO OBB ограничивающие рамки задаются координатами четырёх углов, нормализованными в диапазоне от 0 до 1, в следующем формате. Инструмент аннотирования платформы Ultralytics поддерживает метки OBB и специальный инструмент для рисования ориентированных ограничивающих рамок:
class_index x1 y1 x2 y2 x3 y3 x4 y4Внутри YOLO обрабатывает функции потерь и выходные данные в формате xywhr, который содержит координаты центра ограничивающей рамки (xy), ширину, высоту и угол поворота.
Валидация#
Проверь точность обученной модели YOLO26n-obb на наборе данных DOTA8. Явно укажи data, чтобы валидация использовала нужный YAML-файл набора данных.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-obb.pt") # загрузить официальную модель
model = YOLO("path/to/best.pt") # загрузить пользовательскую модель
# Валидировать модель
metrics = model.val(data="dota8.yaml") # проведи валидацию на наборе данных DOTA8
metrics.box.map # map50-95(B)
metrics.box.map50 # map50(B)
metrics.box.map75 # map75(B)
metrics.box.maps # список значений mAP50-95(B) для каждой категории
metrics.box.image_metrics # словарь метрик для каждого изображения: precision, recall, F1, TP, FP и FNПредсказание#
Используй обученную модель YOLO26n-obb, чтобы запускать предсказания для изображений.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-obb.pt") # загрузить официальную модель
model = YOLO("path/to/best.pt") # загрузить пользовательскую модель
# Получи предсказания с помощью модели
results = model("https://ultralytics.com/images/boats.jpg") # получи предсказание для изображения
# Обратись к результатам
for result in results:
xywhr = result.obb.xywhr # центр-x, центр-y, ширина, высота, угол (радианы)
xyxyxyxy = result.obb.xyxyxyxy # формат полигона с 4 точками
names = [result.names[cls.item()] for cls in result.obb.cls.int()] # название класса каждой рамки
confs = result.obb.conf # оценка уверенности каждой рамкиПолное описание режима predict см. на странице Предсказание.
Укажи save_crop=True, чтобы сохранять выровненную по углу поворота обрезанную область каждого OBB в размере его рамки, как это также делает ObjectCropper.
Результаты работы#
Обнаружение объектов с ориентированными ограничивающими рамками возвращает по одному объекту Results на изображение. Основное поле предсказания — result.obb, которое содержит повёрнутые рамки, идентификаторы классов и оценки достоверности для каждого обнаруженного объекта.
| Атрибут | Тип | Форма | Описание |
|---|---|---|---|
result.obb | OBB | (N) | Ориентированные боксы. |
result.obb.data | torch.float32 | (N,7/8) | Исходные повёрнутые боксы с оценкой уверенности/классом. |
result.obb.xywhr | torch.float32 | (N,5) | Повёрнутые боксы xywhr. |
result.obb.xyxyxyxy | torch.float32 | (N,4,2) | Четыре угловые точки. |
result.obb.conf | torch.float32 | (N,) | Оценки уверенности. |
Метки приводятся к конвенции длинной стороны, а предсказания — нет, поэтому result.obb.xywhr может указывать, что w меньше, чем h, а угол поворота измерен от короткой стороны. Оба варианта описывают один и тот же прямоугольник, поэтому result.obb.xyxyxyxy в любом случае будет правильным. Если последующему коду требуется форма с длинной стороной, преобразуй координаты углов обратно; учитывай, что при изменении параметров рамки порядок углов может циклически сдвинуться:
from ultralytics.utils.ops import xyxyxyxy2xywhr
xywhr = xyxyxyxy2xywhr(result.obb.xyxyxyxy) # w >= h, rotation in [-pi/4, 3pi/4)Описание полей Results, специфичных для каждой задачи, см. в разделе Результаты предсказаний по задачам.
Экспорт#
Экспортируй модель YOLO26n-obb в другой формат, например ONNX, CoreML и т. д.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n-obb.pt") # загрузить официальную модель
model = YOLO("path/to/best.pt") # загрузить пользовательскую модель
# Экспортировать модель
model.export(format="onnx")Доступные форматы экспорта YOLO26-obb перечислены в таблице ниже. Экспортировать модель в любой формат можно с помощью аргумента format, например format='onnx' или format='engine'. Можно выполнять предсказание или валидацию непосредственно на экспортированных моделях, например yolo predict model=yolo26n-obb.onnx. После завершения экспорта для твоей модели будут показаны примеры использования.
| Формат | Аргумент format | Модель | Метаданные | Аргументы |
|---|---|---|---|---|
| PyTorch | - | yolo26n-obb.pt | ✅ | - |
| TorchScript | torchscript | yolo26n-obb.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n-obb.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n-obb_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n-obb.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n-obb.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n-obb.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n-obb_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n-obb.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n-obb_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n-obb.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n-obb_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n-obb.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n-obb_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n-obb_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n-obb_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n-obb_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n-obb_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n-obb_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n-obb_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n-obb_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n-obb_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n-obb_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
nms=None по умолчанию возвращает исходные выходные данные для внешней NMS. Укажи nms=False, чтобы выбрать доступную голову без NMS; неподдерживаемые форматы используют собственный путь вывода. Элементы nms выше обозначают форматы, в которые можно встроить NMS с помощью nms=True.
Полное описание export смотри на странице экспорта.
Часто задаваемые вопросы#
Ориентированные ограничивающие рамки (OBB) включают дополнительный угол, чтобы повысить точность локализации объектов на изображениях. В отличие от обычных ограничивающих рамок, представляющих собой прямоугольники, выровненные по осям, OBB могут поворачиваться, чтобы точнее соответствовать ориентации объекта. Это особенно полезно в задачах, требующих точного размещения объектов, например при обработке аэрофотоснимков или спутниковых изображений (руководство по датасетам).
Чтобы обучить модель YOLO26n-obb на пользовательском датасете, воспользуйся примером ниже для Python или CLI:
Примерfrom ultralytics import YOLO # Загрузи предварительно обученную модель model = YOLO("yolo26n-obb.pt") # Обучить модель results = model.train(data="path/to/custom_dataset.yaml", epochs=100, imgsz=640)Дополнительные аргументы обучения смотри в разделе «Конфигурация».
Модели YOLO26-OBB предварительно обучены на таких датасетах, как DOTAv1, но можно использовать любой датасет в формате OBB. Подробную информацию о форматах датасетов OBB смотри в руководстве по датасетам.
Чтобы проверить модель YOLO26n-obb, воспользуйся командами Python или CLI, приведёнными ниже:
Примерfrom ultralytics import YOLO # Загрузить модель model = YOLO("yolo26n-obb.pt") # Валидировать модель metrics = model.val(data="dota8.yaml")Полную информацию о валидации смотри в разделе Val.
Экспортировать модель YOLO26-OBB в формат ONNX можно с помощью Python или CLI:
Примерfrom ultralytics import YOLO # Загрузить модель model = YOLO("yolo26n-obb.pt") # Экспортировать модель model.export(format="onnx")Дополнительные форматы экспорта и сведения о них смотри на странице Export.

