Ultralytics YOLO27:

Детекция ориентированных ограничивающих прямоугольников с помощью Ultralytics YOLO#

Ultralytics YOLO oriented bounding box detection of boats in aerial imagery

Ориентированное обнаружение объектов — это следующий этап развития стандартного обнаружения объектов: дополнительный угол позволяет точнее определять положение объектов на изображении.

Результатом работы детектора ориентированных объектов является набор повернутых ограничивающих рамок, которые точно охватывают объекты на изображении, а также метки классов и оценки уверенности для каждой рамки. Ориентированные ограничивающие рамки особенно полезны, когда объекты расположены под разными углами, например на аэрофотоснимках, где традиционные ограничивающие рамки, выровненные по осям, могут включать ненужный фон.

Совет

Модели YOLO26 OBB используют суффикс -obb, то есть yolo26n-obb.pt, и предварительно обучены на DOTAv1.



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

Визуальные примеры#

Обнаружение кораблей с использованием OBBОбнаружение транспортных средств с использованием OBB
Обнаружение кораблей с использованием OBBОбнаружение транспортных средств с использованием OBB

Модели#

Здесь представлены предварительно обученные модели YOLO26 OBB, предварительно обученные на наборе данных DOTAv1.

Модели автоматически скачиваются из последнего релиза Ultralytics при первом использовании.

Модельразмер
(пиксели)
mAPtest
50-95(e2e)
mAPtest
50(e2e)
Скорость
CPU ONNX
(мс)
Скорость
T4 TensorRT10
(мс)
параметры
(M)
FLOPs
(B)
YOLO26n-obb102452.478.997.7 ± 0.92.8 ± 0.02.414.8
YOLO26s-obb102454.880.9218.0 ± 1.44.9 ± 0.19.856.7
YOLO26m-obb102455.381.0579.2 ± 3.810.2 ± 0.321.2184.9
YOLO26l-obb102456.281.6735.6 ± 3.113.0 ± 0.225.6232.4
YOLO26x-obb102456.781.71485.7 ± 11.530.5 ± 0.957.6520.1
  • Значения mAPtest рассчитаны для многомасштабного режима с одной моделью на наборе данных DOTAv1.
    Воспроизведи результаты с помощью yolo val obb data=DOTAv1.yaml device=0 split=test nms=False и отправь объединённые результаты в оценку DOTA.
  • Скорость усреднена по изображениям валидационной выборки DOTAv1 с использованием экземпляра Amazon EC2 P4d.
    Воспроизведи результаты с помощью yolo val obb data=DOTAv1.yaml batch=1 device=0|cpu nms=False
  • Значения Params и FLOPs приводятся для слитных моделей после свертки/пакетной нормализации (Conv/BatchNorm folding) и удаления неиспользуемой ветки детекции. Предварительно обученные контрольные точки сохраняют полную архитектуру обучения и могут показывать большие значения.

Смотри предварительный просмотр невыпущенного YOLO27 для предварительных результатов DOTAv1.

Обучение#

Обучи YOLO26n-obb на наборе данных DOTA8 в течение 100 эпох с размером изображения 640. Полный список доступных аргументов смотри на странице Конфигурация.

Примечание

OBB и его поворот на 180° идентичны, поэтому поворот определяется по модулю 180°, а рамка не имеет направления. Метки для обучения приводятся к канонической форме с длинной стороной: ширина рамки w является длинной стороной, угол измеряется по часовой стрелке от положительной оси x до направления ребра w, а хранится в радианах в [-π/4, 3π/4) ([-45°, 135°)). Предсказания не приводятся к канонической форме, поэтому предсказанная рамка может указывать короткую сторону как w; см. раздел Вывод результатов. Форма [0°, 90°) — это регуляризованное соглашение в стиле DOTA, которое не применяется во время обучения или инференса.

Пример
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

Формат датасета#

Подробное описание формата набора данных OBB приведено в руководстве по наборам данных. Формат YOLO OBB задаёт ограничивающие рамки четырьмя угловыми точками с координатами, нормализованными в диапазоне от 0 до 1, в следующей структуре. Аннотация на платформе Ultralytics поддерживает метки OBB со специальным инструментом рисования ориентированных ограничивающих рамок:

class_index x1 y1 x2 y2 x3 y3 x4 y4

Внутри YOLO обрабатывает функции потерь и выходные данные в формате xywhr, который представляет центральную точку ограничивающей рамки (xy), ширину, высоту и поворот.

Val#

Проверь точность обученной модели YOLO26n-obb на наборе данных DOTA8. Аргументы не требуются, поскольку model сохраняет параметры обучения data и аргументы в качестве атрибутов модели.

Пример
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")  # validate on the DOTA8 dataset
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

Predict#

Используй обученную модель YOLO26n-obb для выполнения предсказаний на изображениях.

Пример
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

Полное описание режима predict см. на странице Predict.

Выходные данные результатов#

Обнаружение ориентированных ограничивающих рамок возвращает один объект Results для каждого изображения. Основное поле предсказаний — result.obb, которое содержит повернутые рамки, идентификаторы классов и оценки уверенности для каждого обнаруженного объекта.

АтрибутТипФормаОписание
result.obbOBB(N)Ориентированные рамки.
result.obb.datatorch.float32(N,7/8)Исходные повернутые рамки с оценкой уверенности и классом.
result.obb.xywhrtorch.float32(N,5)Повернутые рамки xywhr.
result.obb.xyxyxyxytorch.float32(N,4,2)Четыре угловые точки.
result.obb.conftorch.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

# 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")

Доступные форматы экспорта YOLO26-obb приведены в таблице ниже. Ты можешь экспортировать модель в любой формат с помощью аргумента format, то есть format='onnx' или format='engine'. Ты можешь напрямую выполнять предсказания или валидацию экспортированных моделей, то есть yolo predict model=yolo26n-obb.onnx. Примеры использования для твоей модели отображаются после завершения экспорта.

ФорматАргумент formatМодельМетаданныеАргументы
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
Apple Core AIcoreaiyolo26n-obb.aimodelimgsz, batch, quantize

nms=None по умолчанию выдает сырые результаты для внешнего NMS. Установи nms=False, чтобы выбрать доступный головной модуль без NMS; неподдерживаемые форматы возвращаются к своему родному пути вывода. Записи nms выше определяют форматы, которые могут встраивать NMS с помощью nms=True.

Полное описание export см. на странице Экспорт.

Практические применения#

Обнаружение OBB с помощью YOLO26 имеет множество практических применений в различных отраслях:

  • Морской транспорт и управление портами: обнаружение кораблей и судов под разными углами для управления флотом и мониторинга.
  • Городское планирование: анализ зданий и инфраструктуры по аэрофотоснимкам.
  • Сельское хозяйство: мониторинг посевов и сельскохозяйственного оборудования по видеозаписям с дронов.
  • Энергетический сектор: проверка солнечных панелей и ветряных турбин, расположенных под разными углами.
  • Транспорт: отслеживание транспортных средств на дорогах и парковках с разных ракурсов.

Эти применения используют способность OBB точно подстраиваться под объекты под любым углом, обеспечивая более точное обнаружение по сравнению с традиционными ограничивающими рамками.

Часто задаваемые вопросы#

  • Ориентированные ограничивающие рамки (OBB) включают дополнительный угол для повышения точности локализации объектов на изображениях. В отличие от обычных ограничивающих рамок, представляющих собой прямоугольники, выровненные по осям, OBB могут поворачиваться, чтобы точнее соответствовать ориентации объекта. Это особенно полезно в приложениях, требующих точного определения положения объектов, например при работе с аэрофотоснимками или спутниковыми изображениями (Руководство по датасетам).

  • Чтобы обучить модель YOLO26n-obb на пользовательском датасете, следуй приведённому ниже примеру с использованием Python или CLI:

    Пример
    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)

    Дополнительные аргументы обучения смотри в разделе Конфигурация.

  • Модели YOLO26-OBB предварительно обучены на таких датасетах, как DOTAv1, но ты можешь использовать любой датасет, отформатированный для OBB. Подробную информацию о форматах датасетов OBB смотри в Руководстве по датасетам.

  • Экспортировать модель YOLO26-OBB в формат ONNX можно с помощью Python или CLI:

    Пример
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Export the model
    model.export(format="onnx")

    Дополнительные форматы и сведения об экспорте смотри на странице Экспорт.

  • Чтобы проверить модель YOLO26n-obb, используй команды Python или CLI, как показано ниже:

    Пример
    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n-obb.pt")
    
    # Validate the model
    metrics = model.val(data="dota8.yaml")

    Полные сведения о валидации смотри в разделе Val.

Комментарии