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

Ultralytics YOLO ecosystem and integrations

Введение

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



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

Реальные применения

ПроизводствоСпортБезопасность
Детекция запчастей автомобиляДетекция футболистовДетекция падения людей
Детекция запчастей автомобиляДетекция футболистовДетекция падения людей

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

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

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

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

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

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

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

Прогнозирование
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'image.jpg'str или PathОдиночный файл изображения.
URL'https://ultralytics.com/images/bus.jpg'strURL на изображение.
screenshot'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 ✅'video.mp4'str или PathВидеофайл в форматах типа MP4, AVI и др.
directory ✅'path/'str или PathПуть к директории, содержащей изображения или видео.
glob ✅'path/*.jpg'strШаблон glob для соответствия нескольким файлам. Используй символ * как подстановочный знак.
YouTube ✅'https://youtu.be/LNwODJXcvt4'strURL на видео YouTube.
stream ✅'rtsp://example.com/media.mp4'strURL для потоковых протоколов, таких как RTSP, RTMP, TCP, или IP-адрес.
multi-stream ✅'list.streams'str или PathТекстовый файл *.streams с одним URL потока на строку, т.е. 8 потоков будут запущены с batch-size 8.
webcam ✅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)

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

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

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

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

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

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

Аргументы вывода (Inference):

АргументТипПо умолчаниюОписание
sourcestr или int или NoneNoneУказывает источник данных для вывода. Может быть путем к изображению, видеофайлом, директорией, URL или ID устройства для прямых трансляций. Если опущено, записывается предупреждение, и модель переключается на встроенные демо-активы (ultralytics/assets или демо URL для OBB). Поддерживает широкий спектр форматов и источников, обеспечивая гибкое применение для различных типов ввода.
conffloat0.25Устанавливает минимальный порог уверенности для обнаружений. Объекты, обнаруженные с уверенностью ниже этого порога, будут проигнорированы. Настройка этого значения может помочь уменьшить количество ложных срабатываний.
ioufloat0.7Порог пересечения над объединением (IoU) для немаксимального подавления (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, старые кадры отбрасываются ради новых (оптимально для real-time задач). Если True, новые кадры буферизуются, что гарантирует отсутствие пропусков, но вызывает задержку, если FPS инференса ниже FPS потока.
visualizeboolFalseАктивирует визуализацию признаков модели во время инференса, помогая понять, что «видит» модель. Полезно для отладки и интерпретации работы модели.
augmentboolFalseВключает TTA (Test-Time Augmentation) для предсказаний, что может повысить надежность обнаружения ценой скорости инференса.
agnostic_nmsboolFalseВключает классово-независимый 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 или 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 Detection.

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

АргументТипПо умолчаниюОписание
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Рисует ограничивающие рамки (bounding boxes) вокруг обнаруженных объектов. Необходимо для визуальной идентификации и локализации объектов на изображениях или видео.
line_widthint or NoneNoneЗадает толщину линий ограничивающих рамок. Если None, толщина подбирается автоматически в зависимости от размера изображения. Обеспечивает визуальную настройку для ясности.

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

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

Изображения

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

Примечание

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

Суффиксы изображенийПример команды предсказанияСправочная информация
.avifyolo predict source=image.avifAV1 Image File Format
.bmpyolo predict source=image.bmpMicrosoft 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Преобразует результаты детекции в Polars DataFrame.
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()МетодВозвращает тензор масок с указанными устройством (device) и типом данных (dtype).
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()МетодВозвращает тензор ключевых точек с указанными устройством (device) и типом данных (dtype).
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()МетодВозвращает копию тензора вероятностей в памяти CPU.
numpy()МетодВозвращает копию тензора вероятностей в виде массива NumPy.
cuda()МетодВозвращает копию тензора вероятностей в памяти GPU.
to()МетодВозвращает копию тензора вероятностей с указанными устройством (device) и типом данных (dtype).
top1Свойство (int)Индекс класса с наивысшей вероятностью (top 1).
top5Свойство (list[int])Индексы пяти классов с наивысшими вероятностями (top 5).
top1confСвойство (torch.Tensor)Уверенность для класса top 1.
top5confСвойство (torch.Tensor)Уверенности для классов top 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, что позволяет легко его отобразить или сохранить.

Построение графиков (Plotting)
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)

Потокобезопасный вывод (Inference)

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

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

Потокобезопасный вывод (Inference)

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

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 mode) позволяет пользователям выполнять высокоскоростной вывод на различных источниках данных, таких как изображения, видео и прямые трансляции. Разработанный для производительности и универсальности, он также предлагает пакетную обработку и потоковые режимы. Для получения подробной информации о функциях ознакомься с режимом предсказания 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 и другие. Эти аргументы позволяют настраивать процесс вывода, задавая параметры, например пороги уверенности, размер изображения и устройство, используемое для вычислений. Подробные описания этих аргументов можно найти в разделе inference arguments.

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

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

Комментарии