Ultralytics YOLO27:
Get Started

Предсказание модели с Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Введение#

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

Примеры инференса, которые планируется добавить, см. в предварительной версии ещё не выпущенной YOLO27.



Смотри: Как извлекать результаты задач Ultralytics YOLO26 для собственных проектов 🚀

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

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

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

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

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

Ключевые возможности режима predict#

Режим predict в YOLO26 разработан как надежное и универсальное решение. Его возможности:

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

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

Предсказание
from ultralytics import YOLO

# Загрузить модель
model = YOLO("yolo26n.pt")  # предобученная модель YOLO26n

# Выполнить пакетный инференс для списка изображений
results = model(["image1.jpg", "image2.jpg"])  # вернуть список объектов Results

# Обработать список результатов
for result in results:
    boxes = result.boxes  # Объект Boxes для выходных данных с ограничивающими рамками
    masks = result.masks  # Объект Masks для выходных данных с масками сегментации
    keypoints = result.keypoints  # Объект Keypoints для выходных данных с позами
    probs = result.probs  # Объект Probs для выходных данных классификации
    obb = result.obb  # Объект Oriented boxes для выходных данных OBB
    result.show()  # отобразить на экране
    result.save(filename="result.jpg")  # сохранить на диск

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

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 или PathФайл CSV со списком путей к изображениям, видео или каталогам.
видео ✅'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

# Загрузить предобученную модель YOLO26n
model = YOLO("yolo26n.pt")

# Задать путь к файлу изображения
source = "path/to/image.jpg"

# Выполнить инференс для источника
results = model(source)  # список объектов Results

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

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

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

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

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

Целочисленный размер или кортеж imgsz

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

Обучение и predict/export

Для обучения принимается только целочисленное значение imgsz (список [h, w] преобразуется в наибольшее значение). Для predict и export можно указать целое число или кортеж (height, width).

Пример
from ultralytics import YOLO

# Загрузить предобученную модель YOLO26n
model = YOLO("yolo26n.pt")

# Запусти инференс для 'bus.jpg' с аргументами
model.predict("https://ultralytics.com/images/bus.jpg", save=True, imgsz=320, conf=0.25)

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

АргументТипПо умолчаниюОписание
sourcestr, int или NoneNoneЗадаёт источник данных для инференса. Это может быть путь к изображению, видеофайл, каталог, URL-адрес или идентификатор устройства для видеопотока. Если значение не задано, в журнал записывается предупреждение, а модель использует встроенные демонстрационные данные (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. См. раздел Фиксированный размер или минимальный прямоугольник.
quantizeint или strNoneТочность инференса: 16/"fp16" и 32/"fp32"/unset задают вычисления в FP16 или FP32 для моделей PyTorch и TorchScript (FP32 на CPU); для других форматов точность определяется артефактом модели и средой выполнения. На 16 OpenVINO по-прежнему округляет входные данные до FP16 на клиенте, а затем расширяет их обратно до FP32, не меняя точность среды выполнения. Квантование INT8/PTQ настраивается при экспорте, а затем применяется при загрузке экспортированной модели. Заменяет устаревший флаг half.
devicestrNoneЗадаёт устройство для инференса (например, cpu, cuda:0, 0, npu или npu:0). Позволяет выбрать CPU, определённый GPU, NPU Huawei Ascend или другое вычислительное устройство для выполнения модели.
dnnboolFalseЕсли True, использует модуль DNN OpenCV вместо ONNX Runtime для инференса ONNX-модели.
datastrNoneПуть к YAML-файлу датасета (например, coco8.yaml), который читается только для получения names и только если у загруженной модели нет собственных названий классов: например, это сторонний экспорт или экспорт Ultralytics, отделённый от поставляемых с ним метаданных. В противном случае такая модель сообщает class0, class1 и так далее.
batchint1Задаёт размер пакета для инференса (работает, только если источник — каталог, видеофайл или файл .txt). Больший размер пакета может повысить пропускную способность и сократить общее время инференса.
max_detint300Максимальное число детекций на изображение. Ограничивает общее количество объектов, которые модель может обнаружить за один инференс, предотвращая чрезмерное количество результатов в насыщенных сценах.
vid_strideint1Шаг обработки кадров для видеоисточников. Позволяет пропускать кадры в видео, ускоряя обработку за счёт снижения временного разрешения. Значение 1 означает обработку каждого кадра, большие значения — пропуск кадров.
stream_bufferboolFalseОпределяет, нужно ли ставить входящие кадры видеопотоков в очередь. Если False, старые кадры отбрасываются, чтобы освободить место для новых (оптимально для приложений реального времени). Если True, новые кадры помещаются в буфер, что исключает пропуски кадров, но приводит к задержке, если FPS инференса ниже FPS потока.
visualizeboolFalseСохраняет тепловую карту активации класса рядом с каждым предсказанием и показывает, какие пиксели повысили оценки предсказанного класса. Учитывает conf и classes, поэтому classes=[0] отображает только этот класс. Доступно только для моделей Ultralytics на PyTorch.
augmentboolFalseВключает аугментацию во время тестирования (TTA) для предсказаний, что может повысить устойчивость детекции, но замедляет инференс. Доступно только для моделей Ultralytics на PyTorch.
agnostic_nmsboolFalseВключает зависящее от класса подавление немаксимумов (NMS): перекрывающиеся рамки с более низкими оценками подавляются между разными классами, а не только в рамках одного класса. Полезно для задач многоклассовой детекции, где классы часто перекрываются. При инференсе без NMS (nms=False на YOLO26 или YOLOv10) этот параметр только предотвращает появление одной и той же детекции с несколькими метками классов (дубликаты с IoU=1.0) и не подавляет разные рамки на основе порога IoU.
classeslist[int]NoneФильтрует предсказания по набору ID классов. Возвращаются только детекции, относящиеся к указанным классам. Полезно, чтобы сосредоточиться на нужных объектах в задачах многоклассовой детекции.
retina_masksboolFalseВозвращает маски сегментации высокого разрешения. Если параметр включён, возвращаемые маски (masks.data) будут соответствовать исходному размеру изображения. Если он выключен, маски будут иметь размер изображения, использованного при инференсе.
embedlist[int]NoneЗадаёт слои, из которых извлекаются векторы признаков или эмбеддинги. Используй model.embed(source) для эмбеддингов предпоследнего слоя или model.predict(source, embed=[layer]), чтобы выбрать конкретные слои. Полезно для последующих задач, например кластеризации или поиска сходства. Доступно только для моделей Ultralytics на PyTorch.
projectstrNoneИмя каталога проекта, в котором сохраняются результаты предсказания, если включён параметр save.
namestrNoneИмя запуска предсказания. Используется для создания подкаталога в папке проекта, куда сохраняются результаты предсказания, если включён параметр save.
streamboolFalseОбеспечивает экономную по памяти обработку длинных видео или большого количества изображений: вместо загрузки всех кадров в память сразу возвращает генератор объектов Results.
verboseboolTrueОпределяет, показывать ли в терминале подробные журналы инференса, обеспечивая обратную связь о ходе предсказания в реальном времени.
compilebool или strFalseВключает компиляцию графа torch.compile в PyTorch 2.x с помощью backend='inductor'. Принимает значения True → "default", False → отключение или строковый режим, например "default", "reduce-overhead", "max-autotune-no-cudagraphs". Если режим не поддерживается, выполняется откат к eager-режиму с предупреждением.
channels_lastboolNoneИспользует формат памяти channels_last (NHWC) для нативного инференса PyTorch. None автоматически включает его на процессорах x86 с oneDNN в Linux и Windows при PyTorch 1.13 или новее, False отключает его, а True запрашивает его на поддерживаемых процессорах x86 или устройствах CUDA. Для ARM64, MPS, более старых версий PyTorch, процессоров без oneDNN и экспортированных форматов, таких как TensorRT и ONNX, ничего не меняется.
nmsbool, необязательноNoneПо умолчанию выполняет инференс по схеме «один ко многим» с NMS (None или True). Укажи False, чтобы использовать голову «один к одному» без NMS, если она доступна. Подробности см. в руководстве по сквозной детекции.

Параметры визуализации:

АргументТипПо умолчаниюОписание
showboolFalseЕсли True, показывает аннотированные изображения или видео в окне. Полезно для мгновенной визуальной проверки во время разработки или тестирования.
saveboolFalse or TrueВключает сохранение аннотированных изображений или видео в файлы. Полезно для документации, дальнейшего анализа или обмена результатами. По умолчанию включено при использовании CLI и выключено при использовании 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. Допустимые расширения и примеры команд predict смотри в таблицах ниже.

Изображения#

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

Примечание

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

Расширения файлов изображенийПример команды predictСправочник
.avifyolo predict source=image.avifФормат файлов изображений AV1
.bmpyolo predict source=image.bmpФормат файлов BMP Microsoft
.dngyolo predict source=image.dngAdobe DNG
.heicyolo predict source=image.heicФормат изображений высокой эффективности
.heifyolo predict source=image.heifФормат изображений высокой эффективности
.jp2yolo predict source=image.jp2JPEG 2000
.jpegyolo predict source=image.jpegJPEG
.jpgyolo predict source=image.jpgJPEG
.mpoyolo predict source=image.mpoОбъект с несколькими изображениями
.pngyolo predict source=image.pngПереносимая сетевая графика
.tifyolo predict source=image.tifФормат файлов изображений с тегами
.tiffyolo predict source=image.tiffФормат файлов изображений с тегами
.webpyolo predict source=image.webpWebP

Видео#

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

Расширения видеофайловПример команды predictСправочник
.asfyolo predict source=video.asfФормат Advanced Systems
.aviyolo predict source=video.aviЧередование аудио и видео
.gifyolo predict source=video.gifФормат обмена графикой
.m4vyolo predict source=video.m4vЧасть 14 MPEG-4
.mkvyolo predict source=video.mkvMatroska
.movyolo predict source=video.movФормат файлов QuickTime
.mp4yolo predict source=video.mp4Часть 14 MPEG-4 — Википедия
.mpegyolo predict source=video.mpegЧасть 2 MPEG-1
.mpgyolo predict source=video.mpgЧасть 2 MPEG-1
.tsyolo predict source=video.tsТранспортный поток MPEG
.wmvyolo predict source=video.wmvВидео Windows Media
.webmyolo predict source=video.webmПроект WebM

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

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

Результаты
from ultralytics import YOLO

# Загрузить предобученную модель YOLO26n
model = YOLO("yolo26n.pt")

# Запустить инференс на изображении
results = model("https://ultralytics.com/images/bus.jpg")
results = model(
    [
        "https://ultralytics.com/images/bus.jpg",
        "https://ultralytics.com/images/zidane.jpg",
    ]
)  # пакетный инференс

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

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

Результаты по задачам#

Набор заполняемых ниже полей зависит от задачи модели — если ты еще не выбрал задачу, сравни обнаружение, сегментацию, семантическую сегментацию, оценку глубины, классификацию, позу и OBB. Для каждого изображения или кадра при предсказании возвращается один объект Results. Общие поля, перечисленные выше, доступны всегда, а данные предсказания для конкретной задачи хранятся в полях ниже. Тензоры координат и уверенности YOLO имеют тип torch.float32; тензоры вероятностей имеют тип torch.float32, если не используется инференс FP16 (quantize=16), — в этом случае они имеют тип torch.float16. После result.numpy() тензоры преобразуются в массивы NumPy с соответствующими типами данных NumPy. Маски экземпляров — это бинарные тензоры torch.uint8, а для семантических масок используется наименьший подходящий целочисленный тип данных для идентификаторов классов: torch.uint8, torch.int16 или torch.int32 — в зависимости от количества классов.

АтрибутТипФормаОписание
result.boxesBoxes(N)Рамки обнаруженных объектов.
result.boxes.datatorch.float32(N,6/7)Исходный [x1,y1,x2,y2,conf,cls] и, при наличии, идентификатор трека.
result.boxes.xyxytorch.float32(N,4)Рамки в пикселях xyxy.
result.boxes.conftorch.float32(N,)Оценки уверенности.
result.boxes.clstorch.float32(N,)Идентификаторы классов; преобразуй их в int, чтобы получить названия.

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

МетодТип возвращаемого значенияОписание
update()NoneОбновляет объект Results новыми данными, например боксами, масками, вероятностями, OBB, ключевыми точками, семантическими масками или глубиной.
cpu()ResultsВозвращает копию объекта Results, переместив все тензоры в память CPU.
numpy()ResultsВозвращает копию объекта Results, преобразовав все тензоры в массивы NumPy.
cuda()ResultsВозвращает копию объекта Results, переместив все тензоры в память GPU.
to()ResultsВозвращает копию объекта Results, переместив тензоры на указанное устройство и преобразовав их к указанному типу данных.
new()ResultsСоздаёт новый объект Results с теми же атрибутами изображения, пути, имён и скорости.
plot()np.ndarrayНаносит результаты детекции на входное изображение BGR и возвращает размеченное изображение.
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 позволяет индексировать и изменять ограничивающие боксы, а также преобразовывать их в разные форматы.

Боксы
from ultralytics import YOLO

# Загрузить предобученную модель YOLO26n
model = YOLO("yolo26n.pt")

# Запустить инференс на изображении
results = model("https://ultralytics.com/images/bus.jpg")  # список результатов

# Просмотр результатов
for r in results:
    print(r.boxes)  # вывести объект 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 позволяет индексировать и изменять маски, а также преобразовывать их в сегменты.

Маски
from ultralytics import YOLO

# Загрузить предварительно обученную сегментационную модель YOLO26n-seg
model = YOLO("yolo26n-seg.pt")

# Запустить инференс на изображении
results = model("https://ultralytics.com/images/bus.jpg")  # список результатов

# Просмотр результатов
for r in results:
    print(r.masks)  # вывести объект Masks, содержащий обнаруженные маски экземпляров

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

НазваниеТипОписание
dataСвойство (torch.Tensor)Двоичный тензор масок torch.uint8 с формой (N,H,W) и значениями 0 или 1.
cpu()МетодВозвращает тензор масок в памяти CPU.
numpy()МетодВозвращает тензор масок в виде массива NumPy.
cuda()МетодВозвращает тензор масок в памяти GPU.
to()МетодВозвращает тензор масок с указанными устройством и типом данных.
xynСвойство (list[np.ndarray])Список нормализованных полигонов масок.
xyСвойство (list[np.ndarray])Список полигонов масок в пиксельных координатах.

Подробнее см. в документации класса Masks.

SemanticMask#

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

SemanticMask
from ultralytics import YOLO

# Загрузить предварительно обученную семантическую модель YOLO26n-sem
model = YOLO("yolo26n-sem.pt")

# Запустить инференс на изображении
results = model("https://ultralytics.com/images/bus.jpg")  # список результатов

# Просмотр результатов
for r in results:
    print(r.semantic_mask.data)  # вывести карту ID классов размером H x W
НазваниеТипОписание
dataСвойство (torch.Tensor)Карта ID классов с формой (H,W). Тип данных — torch.uint8, torch.int16 или torch.int32, в зависимости от количества классов.
shapeСвойство (tuple)Форма карты классов, обычно совпадающая с формой result.orig_shape.
cpu()МетодВозвращает тензор семантической маски в памяти CPU.
numpy()МетодВозвращает тензор семантической маски в виде массива NumPy.
cuda()МетодВозвращает тензор семантической маски в памяти GPU.
to()МетодВозвращает тензор семантической маски с указанными устройством и типом данных.

Ключевые точки#

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

Ключевые точки
from ultralytics import YOLO

# Загрузить предварительно обученную модель определения поз YOLO26n-pose
model = YOLO("yolo26n-pose.pt")

# Запустить инференс на изображении
results = model("https://ultralytics.com/images/bus.jpg")  # список результатов

# Просмотр результатов
for r in results:
    print(r.keypoints)  # вывести объект Keypoints, содержащий обнаруженные ключевые точки

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

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

Подробнее см. в документации класса Keypoints.

Вероятности#

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

Вероятности
from ultralytics import YOLO

# Загрузить предварительно обученную классификационную модель YOLO26n-cls
model = YOLO("yolo26n-cls.pt")

# Запустить инференс на изображении
results = model("https://ultralytics.com/images/bus.jpg")  # список результатов

# Просмотр результатов
for r in results:
    print(r.probs)  # вывести объект Probs, содержащий обнаруженные вероятности классов

В этой таблице приведены методы и свойства класса Probs.

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

Подробнее см. в документации класса Probs.

OBB#

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

OBB
from ultralytics import YOLO

# Загрузить предобученную модель YOLO26n
model = YOLO("yolo26n-obb.pt")

# Запустить инференс на изображении
results = model("https://ultralytics.com/images/boats.jpg")  # список результатов

# Просмотр результатов
for r in results:
    print(r.obb)  # вывести объект OBB, содержащий ориентированные ограничивающие рамки обнаруженных объектов

Ниже приведена таблица методов и свойств класса 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 | torch.TensorАльтернативное изображение. Тензоры должны быть непрерывными, иметь формат HWC BGR и тип uint8.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]Цвет текста меток классификации в формате BGR.(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)
    # Обработать результаты

# Запуск потоков, каждый из которых использует собственный экземпляр модели
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

# Загрузить модель YOLO
model = YOLO("yolo26n.pt")

# Открыть видеофайл
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)

# Перебрать кадры видео
while cap.isOpened():
    # Считать кадр из видео
    success, frame = cap.read()

    if success:
        # Выполнить инференс YOLO на кадре
        results = model(frame)

        # Визуализировать результаты на кадре
        annotated_frame = results[0].plot()

        # Показать кадр с аннотациями
        cv2.imshow("YOLO Inference", annotated_frame)

        # Прервать цикл, если нажата клавиша 'q'
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Прервать цикл, если видео закончилось
        break

# Освободить объект видеозахвата и закрыть окно отображения
cap.release()
cv2.destroyAllWindows()

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

Что дальше#

Готов перейти от предобученной модели к следующему этапу? Убедись, что задача соответствует твоей проблеме, подготовь собственные данные с помощью руководства по наборам данных, а затем обучи на них модель.

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

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

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

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

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

  • Используй model.embed(source), чтобы извлечь эмбеддинги признаков из предпоследнего слоя, или передай embed=[layer_index] в model.predict(), чтобы выбрать конкретные слои.

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    source = "https://ultralytics.com/images/bus.jpg"
    
    results = model.predict(source)  # Объекты Results
    embeddings = model.embed(source)  # список эмбеддингов torch.Tensor
  • После выполнения инференса с YOLO объекты Results содержат методы для отображения и сохранения изображений с аннотациями. Для визуализации и сохранения результатов можно использовать такие методы, как result.show() и result.save(filename="result.jpg"). Все отсутствующие родительские каталоги в пути к файлу создаются автоматически (например, result.save("path/to/result.jpg")). Полный список этих методов смотри в разделе работа с результатами.

Комментарии