Предсказание модели с помощью Ultralytics YOLO

Ultralytics YOLO ecosystem and integrations

Введение

В мире machine learning и computer vision процесс анализа визуальных данных часто называют инференсом или предсказанием. Ultralytics YOLO26 предлагает мощную функцию, известную как режим предсказания (predict mode), специально разработанную для высокопроизводительного инференса в реальном времени на широком спектре источников данных.



Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀

Применение в реальных условиях

ПроизводствоСпортБезопасность
Обнаружение запасных частей автомобиляОбнаружение футболистовОбнаружение падений людей
Обнаружение запасных частей автомобиляОбнаружение футболистовОбнаружение падений людей

Почему стоит использовать Ultralytics YOLO для инференса?

Вот почему тебе стоит рассмотреть режим предсказания YOLO26 для своих разнообразных задач инференса:

  • Универсальность: возможность запуска инференса на изображениях, видео и даже прямых трансляциях.
  • Производительность: разработано для высокоскоростной обработки в реальном времени без ущерба для accuracy.
  • Простота использования: интуитивно понятные интерфейсы Python и CLI для быстрого развертывания и тестирования.
  • Высокая настраиваемость: множество настроек и параметров для адаптации поведения инференса модели под твои конкретные требования.
  • Готовность к производству: развертывай модели как API-эндпоинты на Ultralytics Platform с автоматическим масштабированием и мониторингом, либо запускай инференс локально.

Ключевые особенности режима предсказания

Режим предсказания YOLO26 спроектирован надежным и универсальным, обладая следующими характеристиками:

  • Совместимость с множеством источников данных: независимо от того, представлены ли твои данные в виде отдельных изображений, коллекции изображений, видеофайлов или потоковых видео в реальном времени, режим предсказания справится с этим.
  • Потоковый режим: используй функцию потоковой передачи для создания генератора объектов Results, экономящего память. Включи это, установив stream=True в методе вызова предсказателя.
  • Пакетная обработка: обрабатывай несколько изображений или кадров видео в одном пакете, что дополнительно сокращает общее время инференса.
  • Удобная интеграция: легко интегрируй с существующими конвейерами данных и другими программными компонентами благодаря гибкому API.

Модели Ultralytics YOLO возвращают либо Python-список объектов Results, либо экономный с точки зрения памяти генератор объектов Results, если во время инференса модели передан аргумент stream=True:

Предсказание (Predict)
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 disk

Источники для инференса

YOLO26 может обрабатывать различные типы источников ввода для инференса, как показано в таблице ниже. Источники включают статические изображения, видеопотоки и различные форматы данных. Таблица также указывает, может ли каждый источник использоваться в потоковом режиме с аргументом stream=True ✅. Потоковый режим полезен для обработки видео или прямых трансляций, так как он создает генератор результатов вместо загрузки всех кадров в память.

Совет

Используй stream=True для обработки длинных видео или больших наборов данных, чтобы эффективно управлять памятью. Когда stream=False, результаты для всех кадров или точек данных хранятся в памяти, что может быстро привести к нехватке памяти и ошибкам для больших входных данных. Напротив, stream=True использует генератор, который хранит в памяти только результаты текущего кадра или точки данных, значительно снижая потребление памяти и предотвращая проблемы с её нехваткой.

ИсточникПримерТипПримечания
изображение'image.jpg'str или PathОдиночный файл изображения.
URL'https://ultralytics.com/images/bus.jpg'strURL на изображение.
скриншот'screen'strЗахват скриншота экрана.
PILImage.open('image.jpg')PIL.ImageФормат HWC с каналами RGB.
OpenCVcv2.imread('image.jpg')np.ndarrayФормат HWC с каналами BGR uint8 (0-255).
NumPynp.zeros((640,1280,3))np.ndarrayФормат HWC с каналами BGR uint8 (0-255).
torchtorch.zeros(16,3,320,640)torch.TensorФормат BCHW с каналами RGB float32 (0.0-1.0).
CSV'sources.csv'str или PathCSV-файл, содержащий пути к изображениям, видео или директориям.
видео ✅'video.mp4'str или PathВидеофайл в форматах типа MP4, AVI и др.
директория ✅'path/'str или PathПуть к директории, содержащей изображения или видео.
glob ✅'path/*.jpg'strШаблон glob для сопоставления нескольких файлов. Используй символ * как подстановочный знак.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strURL на видео YouTube.
поток ✅'rtsp://example.com/media.mp4'strURL для потоковых протоколов, таких как RTSP, RTMP, TCP, или IP-адрес.
мультипоток ✅'list.streams'str или PathТекстовый файл *.streams с одним URL потока в строке, например, 8 потоков будут работать с размером пакета 8.
веб-камера ✅0intИндекс подключенного устройства камеры для запуска инференса.

Ниже приведены примеры кода для использования каждого типа источника:

Источники для предсказания

Запуск инференса на файле изображения.

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 objects

Аргументы инференса

model.predict() принимает множество аргументов, которые можно передать во время инференса, чтобы переопределить настройки по умолчанию:

Фиксированный размер против минимального прямоугольника (rect)

По умолчанию в predict используется rect=True, что активирует дополнение (padding) до минимального прямоугольника, когда это возможно. Изображение масштабируется так, чтобы вписаться в imgsz, и дополняется только до ближайшего кратного шагу (stride), поэтому итоговый тензор может быть меньше, чем imgsz. Дополнение до минимального прямоугольника используется только тогда, когда все изображения в пакете имеют одинаковый размер и бэкенд это поддерживает (PyTorch .pt или динамический ONNX / Triton). В противном случае изображения дополняются до полного целевого размера imgsz.

Используй rect=False, чтобы всегда дополнять до полного размера imgsz. Это рекомендуется, когда тебе нужен фиксированный входной размер для соответствия экспортированным моделям (ONNX, TensorRT и т. д.).

Целое число против кортежа imgsz

  • Целое число imgsz=640 превращается в квадратную цель (640, 640) после округления по шагу.
  • Кортеж imgsz=(384, 672) задает прямоугольную цель. С rect=True и auto=True фактический тензор может быть меньше этой цели.

Обучение против предсказания/экспорта

Обучение принимает только одно целое число imgsz (список [h, w] приводится к большему значению). Predict и экспорт принимают либо целое число, либо кортеж (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)

Аргументы инференса:

АргументТипПо умолчаниюОписание
sourcestr или int или NoneNoneУказывает источник данных для инференса. Это может быть путь к изображению, видеофайл, директория, URL или ID устройства для живых потоков. Если пропущено, записывается предупреждение, и модель переключается на встроенные демо-ресурсы (ultralytics/assets или демо-URL для OBB). Поддерживает широкий спектр форматов и источников, обеспечивая гибкое применение для различных типов входных данных.
conffloat0.25Устанавливает минимальный порог уверенности для обнаружений. Объекты, обнаруженные с уверенностью ниже этого порога, будут игнорироваться. Настройка этого значения помогает уменьшить количество ложноположительных срабатываний.
ioufloat0.7Порог Intersection Over Union (IoU) для Non-Maximum Suppression (NMS). Более низкие значения приводят к меньшему числу обнаружений за счет удаления перекрывающихся рамок, что полезно для уменьшения дубликатов.
imgszint или tuple640Цель для Letterbox. Целое число дает квадрат N×N; кортеж дает (height, width). При rect=True фактический тензор может быть меньше этой цели из-за дополнения до минимального прямоугольника. Используй rect=False для фиксированного размера. См. Фиксированный размер против минимального прямоугольника.
rectboolTrueЕсли True, используется дополнение до минимального прямоугольника, когда это возможно (пакет одинаковой формы и поддерживаемый бэкенд). Если False, всегда дополняется до полного imgsz. См. Фиксированный размер против минимального прямоугольника.
halfboolFalseВключает инференс в полу-точности (FP16), что может ускорить работу модели на поддерживаемых GPU с минимальным влиянием на точность.
devicestrNoneУказывает устройство для инференса (например, cpu, cuda:0, 0, npu или npu:0). Позволяет выбирать между CPU, конкретным GPU, Huawei Ascend NPU или другими вычислительными устройствами для выполнения модели.
batchint1Указывает размер пакета для инференса (работает только если источник — директория, видеофайл или .txt файл). Больший размер пакета может обеспечить более высокую пропускную способность, сокращая общее время, необходимое для инференса.
max_detint300Максимальное количество разрешенных обнаружений на изображение. Ограничивает общее число объектов, которые модель может найти за один инференс, предотвращая избыточный вывод в сценах с высокой плотностью объектов.
vid_strideint1Шаг кадров для видеоисточников. Позволяет пропускать кадры в видео для ускорения обработки ценой временного разрешения. Значение 1 обрабатывает каждый кадр, большие значения пропускают кадры.
stream_bufferboolFalseОпределяет, нужно ли ставить входящие кадры в очередь для видеопотоков. Если False, старые кадры отбрасываются, чтобы освободить место для новых (оптимизировано для приложений реального времени). Если True, новые кадры ставятся в буфер, что гарантирует отсутствие пропусков кадров, но может вызвать задержку, если FPS инференса ниже FPS потока.
visualizeboolFalseАктивирует визуализацию признаков модели во время инференса, предоставляя понимание того, что "видит" модель. Полезно для отладки и интерпретации работы модели.
augmentboolFalseВключает аугментацию во время тестирования (TTA) для предсказаний, что может повысить надежность обнаружения ценой снижения скорости инференса.
agnostic_nmsboolFalseВключает класс-агностическое Non-Maximum Suppression (NMS), которое объединяет перекрывающиеся рамки разных классов. Полезно в задачах многоклассового обнаружения, где часто встречается пересечение классов. Для end-to-end моделей (YOLO26, YOLOv10) это лишь предотвращает появление одного и того же обнаружения с несколькими метками классов (дубликаты с IoU=1.0) и не выполняет подавление на основе порога IoU между различными рамками.
classeslist[int]NoneФильтрует предсказания по набору ID классов. Будут возвращены только обнаружения, принадлежащие указанным классам. Полезно для фокусировки на релевантных объектах в задачах многоклассового обнаружения.
retina_masksboolFalseВозвращает высококачественные маски сегментации. Возвращаемые маски (masks.data) будут соответствовать исходному размеру изображения, если включено. Если отключено, они имеют размер изображения, использовавшийся при инференсе.
embedlist[int]NoneУказывает слои, из которых нужно извлекать векторы признаков или эмбеддинги. Полезно для последующих задач, таких как кластеризация или поиск сходства.
projectstrNoneИмя директории проекта, куда сохраняются результаты предсказания, если включено save.
namestrNoneИмя запуска предсказания. Используется для создания поддиректории внутри папки проекта, где хранятся результаты предсказания, если включено save.
streamboolFalseВключает эффективную с точки зрения памяти обработку для длинных видео или множества изображений, возвращая генератор объектов Results вместо загрузки всех кадров в память сразу.
verboseboolTrueУправляет отображением подробных логов инференса в терминале, предоставляя обратную связь о процессе предсказания в реальном времени.
compilebool or strFalseВключает компиляцию графа PyTorch 2.x torch.compile с backend='inductor'. Принимает True"default", False → отключает, или строковый режим, такой как "default", "reduce-overhead", "max-autotune-no-cudagraphs". При поддержке возвращается к режиму eager с предупреждением.
end2endboolNoneПереопределяет режим end-to-end в моделях YOLO, поддерживающих инференс без NMS (YOLO26, YOLOv10). Установка значения False позволяет выполнять предсказание с использованием традиционного конвейера NMS, дополнительно позволяя использовать аргумент iou. См. Руководство по End-to-End обнаружению для подробностей.

Аргументы визуализации:

АргументТипПо умолчаниюОписание
showboolFalseЕсли True, отображает аннотированные изображения или видео в окне. Полезно для немедленной визуальной обратной связи во время разработки или тестирования.
saveboolFalse or TrueВключает сохранение аннотированных изображений или видео в файлы. Полезно для документации, дальнейшего анализа или обмена результатами. По умолчанию True при использовании CLI и False при использовании в Python.
save_framesboolFalseПри обработке видео сохраняет отдельные кадры как изображения. Полезно для извлечения конкретных кадров или для подробного покадрового анализа.
save_txtboolFalseСохраняет результаты обнаружения в текстовом файле, следуя формату [class] [x_center] [y_center] [width] [height] [confidence]. Полезно для интеграции с другими инструментами анализа.
save_confboolFalseВключает показатели уверенности в сохраненные текстовые файлы. Улучшает детализацию, доступную для последующей обработки и анализа.
save_cropboolFalseСохраняет обрезанные изображения детектированных объектов. Полезно для аугментации набора данных, анализа или создания специализированных датасетов для конкретных объектов.
show_labelsboolTrueОтображает метки для каждой детекции на визуальном выводе. Обеспечивает быстрое понимание обнаруженных объектов.
show_confboolTrueОтображает показатель уверенности для каждой детекции рядом с меткой. Дает представление об уверенности модели в каждой детекции.
show_boxesboolTrueРисует ограничивающие рамки вокруг обнаруженных объектов. Необходимая функция для визуальной идентификации и определения расположения объектов на изображениях или кадрах видео.
line_widthint or NoneNoneУказывает толщину линий ограничивающих рамок. Если установлено None, толщина линии автоматически настраивается в зависимости от размера изображения. Позволяет визуально настроить четкость.

Форматы изображений и видео

YOLO26 поддерживает различные форматы изображений и видео, как указано в ultralytics/data/utils.py. См. таблицы ниже для ознакомления с допустимыми суффиксами и примерами команд предсказания.

Изображения

В таблице ниже перечислены допустимые форматы изображений Ultralytics.

Примечание

Для форматов HEIC/HEIF требуется библиотека pi-heif, которая устанавливается автоматически при первом использовании. Формат AVIF поддерживается библиотекой Pillow по умолчанию.

Суффиксы изображенийПример команды предсказанияСправочная информация
.avifyolo predict source=image.avifФормат AV1 Image File Format
.bmpyolo predict source=image.bmpФормат Microsoft BMP File Format
.dngyolo predict source=image.dngAdobe DNG
.heicyolo predict source=image.heicHigh Efficiency Image Format
.heifyolo predict source=image.heifHigh Efficiency Image Format
.jp2yolo predict source=image.jp2JPEG 2000
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoMulti Picture Object
.pngyolo predict source=image.pngPortable Network Graphics
.tifyolo predict source=image.tifTag Image File Format
.tiffyolo predict source=image.tiffTag Image File Format
.webpyolo predict source=image.webpWebP

Видео

В таблице ниже перечислены допустимые форматы видео Ultralytics.

Суффиксы видеоПример команды предсказанияСправочная информация
.asfyolo predict source=video.asfAdvanced Systems Format
.aviyolo predict source=video.aviAudio Video Interleave
.gifyolo predict source=video.gifGraphics Interchange Format
.m4vyolo predict source=video.m4vMPEG-4 Part 14
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movQuickTime File Format
.mp4yolo predict source=video.mp4MPEG-4 Part 14 - Wikipedia
.mpegyolo predict source=video.mpegMPEG-1 Part 2
.mpgyolo predict source=video.mpgMPEG-1 Part 2
.tsyolo predict source=video.tsMPEG Transport Stream
.wmvyolo predict source=video.wmvWindows Media Video
.webmyolo predict source=video.webmWebM Project

Работа с результатами

Все вызовы predict() в Ultralytics возвращают список объектов Results:

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 inference

Объекты Results имеют следующие атрибуты:

АтрибутТипОписание
orig_imgnp.ndarrayОригинальное изображение в виде массива NumPy.
orig_shapetupleИсходный размер изображения в формате (высота, ширина).
boxesBoxes, optionalОбъект Boxes, содержащий ограничивающие рамки (bounding boxes) обнаруженных объектов.
masksMasks, optionalОбъект Masks, содержащий маски обнаруженных объектов.
probsProbs, optionalОбъект Probs, содержащий вероятности для каждого класса при выполнении задачи классификации.
keypointsKeypoints, optionalОбъект Keypoints, содержащий ключевые точки, обнаруженные для каждого объекта.
obbOBB, optionalОбъект OBB, содержащий ориентированные ограничивающие рамки (oriented bounding boxes).
speeddictСловарь со скоростью предобработки, инференса и постобработки в миллисекундах на изображение.
namesdictСловарь, сопоставляющий индексы классов с названиями классов.
pathstrПуть к файлу изображения.
save_dirstr, optionalДиректория для сохранения результатов.

Объекты Results имеют следующие методы:

МетодТип возвращаемого значенияОписание
update()NoneОбновляет объект Results новыми данными обнаружения (boxes, masks, probs, obb, keypoints).
cpu()ResultsВозвращает копию объекта Results со всеми тензорами, перенесенными в память CPU.
numpy()ResultsВозвращает копию объекта Results со всеми тензорами, преобразованными в массивы NumPy.
cuda()ResultsВозвращает копию объекта Results со всеми тензорами, перенесенными в память GPU.
to()ResultsВозвращает копию объекта Results с тензорами, перенесенными на указанное устройство и с указанным типом данных.
new()ResultsСоздает новый объект Results с теми же атрибутами изображения, пути, названий и скорости.
plot()np.ndarrayОтрисовывает результаты обнаружения на исходном RGB-изображении и возвращает аннотированное изображение.
show()NoneОтображает изображение с аннотированными результатами инференса.
save()strСохраняет изображение с аннотированными результатами инференса в файл и возвращает имя файла.
verbose()strВозвращает строку лога для каждой задачи с подробным описанием результатов обнаружения и классификации.
save_txt()strСохраняет результаты обнаружения в текстовый файл и возвращает путь к сохраненному файлу.
save_crop()NoneСохраняет обрезанные изображения обнаруженных объектов в указанную директорию.
summary()List[Dict[str, Any]]Преобразует результаты инференса в обобщенный словарь с опциональной нормализацией.
to_df()DataFrameПреобразует результаты обнаружения в DataFrame Polars.
to_csv()strПреобразует результаты обнаружения в формат CSV.
to_json()strПреобразует результаты обнаружения в формат JSON.

Более подробную информацию см. в документации к классу Results.

Boxes

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

Boxes
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 boxes

Ниже приведена таблица методов и свойств класса Boxes, включая их название, тип и описание:

НазваниеТипОписание
cpu()МетодПеремещает объект в память CPU.
numpy()МетодПреобразует объект в массив NumPy.
cuda()МетодПеремещает объект в память CUDA.
to()МетодПеремещает объект на указанное устройство.
xyxyСвойство (torch.Tensor)Возвращает рамки в формате xyxy.
confСвойство (torch.Tensor)Возвращает значения уверенности рамок.
clsСвойство (torch.Tensor)Возвращает значения классов рамок.
idСвойство (torch.Tensor)Возвращает ID трекинга рамок (если доступны).
xywhСвойство (torch.Tensor)Возвращает рамки в формате xywh.
xyxynСвойство (torch.Tensor)Возвращает рамки в формате xyxy, нормализованные по размеру исходного изображения.
xywhnСвойство (torch.Tensor)Возвращает рамки в формате xywh, нормализованные по размеру исходного изображения.

Более подробную информацию см. в документации к классу Boxes.

Masks

Объект Masks можно использовать для индексации, обработки и преобразования масок в сегменты.

Masks
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 masks

Ниже приведена таблица методов и свойств класса Masks, включая их название, тип и описание:

НазваниеТипОписание
cpu()МетодВозвращает тензор масок в памяти CPU.
numpy()МетодВозвращает тензор масок в виде массива NumPy.
cuda()МетодВозвращает тензор масок в памяти GPU.
to()МетодВозвращает тензор масок для указанного устройства и типа данных.
xynСвойство (torch.Tensor)Список нормализованных сегментов, представленных в виде тензоров.
xyСвойство (torch.Tensor)Список сегментов в пиксельных координатах, представленных в виде тензоров.

Более подробную информацию см. в документации класса Masks.

Keypoints

Объект Keypoints можно использовать для индексации, обработки и нормализации координат.

Keypoints
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 keypoints

Ниже приведена таблица методов и свойств класса Keypoints, включая их название, тип и описание:

НазваниеТипОписание
cpu()МетодВозвращает тензор ключевых точек в памяти CPU.
numpy()МетодВозвращает тензор ключевых точек как массив NumPy.
cuda()МетодВозвращает тензор ключевых точек в памяти GPU.
to()МетодВозвращает тензор ключевых точек для указанного устройства и типа данных.
xynСвойство (torch.Tensor)Список нормализованных ключевых точек, представленных в виде тензоров.
xyСвойство (torch.Tensor)Список ключевых точек в координатах пикселей, представленных в виде тензоров.
confСвойство (torch.Tensor)Возвращает значения уверенности для ключевых точек, если они доступны, в противном случае None.

Более подробную информацию см. в документации класса Keypoints.

Probs

Объект Probs можно использовать для индексации, получения индексов top1 и top5, а также оценок классификации.

Probs
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 probabilities

Ниже приведена таблица с описанием методов и свойств класса Probs:

НазваниеТипОписание
cpu()МетодВозвращает копию тензора probs в памяти CPU.
numpy()МетодВозвращает копию тензора probs как массив NumPy.
cuda()МетодВозвращает копию тензора probs в памяти GPU.
to()МетодВозвращает копию тензора probs для указанного устройства и типа данных.
top1Свойство (int)Индекс класса top 1.
top5Свойство (list[int])Индексы 5 лучших классов.
top1confСвойство (torch.Tensor)Уверенность для класса top 1.
top5confСвойство (torch.Tensor)Уверенности для 5 лучших классов.

Более подробную информацию см. в документации класса Probs.

OBB

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

OBB
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 boxes

Ниже приведена таблица методов и свойств класса OBB, включая их название, тип и описание:

НазваниеТипОписание
cpu()МетодПеремещает объект в память CPU.
numpy()МетодПреобразует объект в массив NumPy.
cuda()МетодПеремещает объект в память CUDA.
to()МетодПеремещает объект на указанное устройство.
confСвойство (torch.Tensor)Возвращает значения уверенности рамок.
clsСвойство (torch.Tensor)Возвращает значения классов рамок.
idСвойство (torch.Tensor)Возвращает ID трекинга рамок (если доступны).
xyxyСвойство (torch.Tensor)Возвращает горизонтальные рамки в формате xyxy.
xywhrСвойство (torch.Tensor)Возвращает повернутые рамки в формате xywhr.
xyxyxyxyСвойство (torch.Tensor)Возвращает повернутые рамки в формате xyxyxyxy.
xyxyxyxynСвойство (torch.Tensor)Возвращает повернутые рамки в формате xyxyxyxy, нормализованные по размеру изображения.

Более подробную информацию см. в документации класса OBB.

Визуализация результатов

Метод plot() в объектах Results облегчает визуализацию предсказаний путем наложения обнаруженных объектов (таких как ограничивающие рамки, маски, ключевые точки и вероятности) на исходное изображение. Этот метод возвращает аннотированное изображение в виде массива NumPy, что позволяет легко отобразить или сохранить его.

Визуализация
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")

Параметры метода plot()

Метод plot() поддерживает различные аргументы для настройки вывода:

АргументТипОписаниеПо умолчанию
confboolВключить оценки уверенности обнаружения.True
line_widthfloatТолщина линий ограничивающих рамок. Масштабируется в соответствии с размером изображения, если установлено значение None.None
font_sizefloatРазмер шрифта текста. Масштабируется в соответствии с размером изображения, если установлено значение None.None
fontstrНазвание шрифта для текстовых аннотаций.'Arial.ttf'
pilboolВозвращает изображение как объект PIL Image.False
imgnp.ndarrayАльтернативное изображение для визуализации. Если None, используется исходное изображение.None
im_gputorch.TensorУскоренное на GPU изображение для более быстрой отрисовки масок. Размер: (1, 3, 640, 640).None
kpt_radiusintРадиус для отрисованных ключевых точек.5
kpt_lineboolСоединить ключевые точки линиями.True
labelsboolВключить метки классов в аннотации.True
boxesboolНаложить ограничивающие рамки на изображение.True
masksboolНаложить маски на изображение.True
probsboolВключить вероятности классификации.True
showboolОтобразить аннотированное изображение напрямую с помощью средства просмотра изображений по умолчанию.False
saveboolСохранить аннотированное изображение в файл, указанный параметром filename.False
filenamestrПуть и имя файла для сохранения аннотированного изображения, если save равно True.None
color_modestrУкажи режим цвета, например 'instance' или 'class'.'class'
txt_colortuple[int, int, int]Цвет текста в формате RGB для ограничивающей рамки и метки классификации изображения.(255, 255, 255)

Потокобезопасный инференс

Обеспечение потокобезопасности во время инференса критически важно, когда ты запускаешь несколько моделей YOLO параллельно в разных потоках. Потокобезопасный инференс гарантирует, что предсказания каждого потока изолированы и не мешают друг другу, избегая условий гонки и обеспечивая согласованные и надежные результаты.

При использовании моделей YOLO в многопоточном приложении важно создавать отдельные объекты модели для каждого потока или использовать хранилище потока для предотвращения конфликтов:

Потокобезопасный инференс

Создавай одну модель внутри каждого потока для потокобезопасного инференса:

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()

Для более глубокого изучения потокобезопасного инференса с моделями YOLO и пошаговых инструкций, пожалуйста, обратись к нашему Руководству по потокобезопасному инференсу YOLO. Это руководство предоставит тебе всю необходимую информацию, чтобы избежать распространенных ошибок и гарантировать бесперебойную работу твоего многопоточного инференса.

Потоковый for-цикл источника

Вот Python-скрипт с использованием OpenCV (cv2) и YOLO для запуска инференса на кадрах видео. Этот скрипт предполагает, что ты уже установил необходимые пакеты (opencv-python и ultralytics).

Потоковый for-цикл
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()

Этот скрипт будет выполнять предсказания на каждом кадре видео, визуализировать результаты и отображать их в окне. Из цикла можно выйти, нажав 'q'.

Часто задаваемые вопросы (FAQ)

Что такое Ultralytics YOLO и его режим predict для инференса в реальном времени?

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

Как запустить инференс с помощью Ultralytics YOLO на разных источниках данных?

Ultralytics YOLO может обрабатывать широкий спектр источников данных, включая отдельные изображения, видео, директории, URL-адреса и потоки. Ты можешь указать источник данных в вызове model.predict(). Например, используй 'image.jpg' для локального изображения или 'https://ultralytics.com/images/bus.jpg' для URL. Ознакомься с подробными примерами для различных источников инференса в документации.

Как оптимизировать скорость инференса и использование памяти YOLO?

Чтобы оптимизировать скорость инференса и эффективно управлять памятью, ты можешь использовать потоковый режим, установив stream=True в методе вызова предиктора. Потоковый режим создает генератор объектов Results, экономящий память, вместо загрузки всех кадров в оперативную память. Для обработки длинных видео или больших наборов данных потоковый режим особенно полезен. Узнай больше о потоковом режиме.

Какие аргументы инференса поддерживает Ultralytics YOLO?

Метод model.predict() в YOLO поддерживает различные аргументы, такие как conf, iou, imgsz, device и другие. Эти аргументы позволяют тебе настроить процесс инференса, устанавливая параметры, такие как пороги уверенности, размер изображения и устройство, используемое для вычислений. Подробные описания этих аргументов можно найти в разделе аргументы инференса.

Как визуализировать и сохранить результаты предсказаний YOLO?

После запуска инференса с YOLO объекты Results содержат методы для отображения и сохранения аннотированных изображений. Ты можешь использовать такие методы, как result.show() и result.save(filename="result.jpg"), чтобы визуализировать и сохранить результаты. Любые отсутствующие родительские директории в пути к файлу создаются автоматически (например, result.save("path/to/result.jpg")). Полный список этих методов см. в разделе работа с результатами.

Комментарии