Ultralytics YOLO27:

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

Ultralytics YOLO ecosystem and integrations

Введение#

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

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



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

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

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

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

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

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

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

Режим predict YOLO26 разработан как надёжный и универсальный и включает:

  • Поддержка множества источников данных: независимо от того, представлены ли твои данные отдельными изображениями, набором изображений, видеофайлами или видеопотоками в реальном времени, режим predict справится с задачей.
  • Режим потоковой обработки: используй потоковую функцию для создания генератора объектов Results с эффективным использованием памяти. Включи её, указав stream=True в методе вызова предиктора. В отличие от поведения по умолчанию (stream=False), при котором возвращается список со всеми результатами, 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, включая по возможности дополнение до минимального прямоугольника. Изображение масштабируется так, чтобы поместиться в imgsz, и дополняется только до ближайшего кратного stride, поэтому итоговый тензор может быть меньше, чем imgsz. Дополнение до минимального прямоугольника используется только тогда, когда все изображения в пакете имеют одинаковый размер и бэкенд поддерживает эту возможность (PyTorch .pt или динамические ONNX / Triton). В противном случае изображения дополняются до полной целевой формы imgsz.

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

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

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

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

Обучение принимает только одно целое число imgsz (список [h, w] преобразуется в наибольшее значение). Predict и export принимают либо целое число, либо кортеж (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 или идентификатор устройства для потоковой передачи в реальном времени. Если источник не указан, в журнал записывается предупреждение, а модель использует встроенные демонстрационные ресурсы (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"/не задано выбирают вычисления FP16 или FP32 для моделей PyTorch и TorchScript; остальные форматы выполняют вычисления с точностью, выбранной их артефактом и средой выполнения. При 16 OpenVINO по-прежнему выполняет FP16-округление входных данных на клиенте и расширяет их обратно до FP32, не меняя то, с какой точностью выполняет вычисления среда выполнения. Квантование INT8/PTQ настраивается во время экспорта, а затем используется путем загрузки экспортированной модели. Заменяет устаревший флаг half.
devicestrNoneОпределяет устройство для инференса (например, cpu, cuda:0, 0, npu или npu:0). Позволяет выбрать CPU, конкретный GPU, NPU Huawei Ascend или другое вычислительное устройство для выполнения модели.
dnnboolFalseЕсли True, для инференса ONNX-модели используется модуль OpenCV DNN вместо ONNX Runtime.
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Фильтрует предсказания по набору идентификаторов классов. Возвращаются только обнаружения, принадлежащие указанным классам. Это полезно для фокусировки на релевантных объектах в задачах мультиклассового обнаружения.
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 автоматически включает его в Linux и Windows на CPU x86 с oneDNN и PyTorch версии 1.13 или новее, False отключает его, а True запрашивает его на поддерживаемых CPU x86 или устройствах CUDA. ARM64, MPS, старые версии PyTorch, CPU без oneDNN и экспортированные форматы, такие как TensorRT и ONNX, остаются без изменений.
nmsbool, необязательноNoneЗапускает вывод «один ко многим» с NMS по умолчанию (None или True). Установи False, чтобы использовать голову «один к одному» без NMS, если она доступна. Подробнее см. в руководстве по сквозному детектированию.

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

АргументТипПо умолчаниюОписание
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. Допустимые суффиксы и примеры команд predict приведены в таблицах ниже.

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

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

Примечание

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

Суффиксы изображенийПример команды PredictСсылка
.avifyolo predict source=image.avifФормат файла изображения AV1
.bmpyolo predict source=image.bmpФормат файла Microsoft BMP
.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Расширенный системный формат
.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.wmvWindows Media Video
.webmyolo predict source=video.webmПроект WebM

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

Все вызовы Ultralytics predict() возвращают список объектов 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, содержащий ограничивающие рамки обнаруженных объектов.
masksMasks, optionalОбъект Masks, содержащий маски обнаруженных объектов.
probsProbs, optionalОбъект Probs, содержащий вероятности каждого класса для задачи классификации.
keypointsKeypoints, optionalОбъект Keypoints, содержащий обнаруженные ключевые точки каждого объекта.
obbOBB, optionalОбъект OBB, содержащий ориентированные ограничивающие рамки.
semantic_maskSemanticMask, optionalОбъект SemanticMask, содержащий плотную карту классов для каждого пикселя.
speeddictСловарь со скоростями предварительной обработки, вывода и постобработки в миллисекундах на изображение.
namesdictСловарь, сопоставляющий индексы классов с именами классов.
pathstrПуть к файлу изображения.
save_dirstr, optionalКаталог для сохранения результатов.

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

Поля, заполняемые ниже, зависят от задачи твоей модели — сравнивай детекцию, сегментацию, семантическую сегментацию, оценку глубины, классификацию, позу и OBB, если ты еще не выбрал задачу. Каждое предсказание возвращает один объект Results на изображение или кадр. Общие поля выше доступны всегда, в то время как данные предсказания для конкретной задачи хранятся в полях ниже. Тензоры координат и уверенности YOLO имеют тип torch.float32; тензоры вероятностей имеют тип torch.float32, если не используется половинная точность, иначе 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 новыми данными, такими как 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Наносит результаты обнаружения на входное изображение 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

# 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)Вернуть идентификаторы отслеживания рамок (если доступны).
xywhСвойство (torch.Tensor)Вернуть рамки в формате xywh.
xyxynСвойство (torch.Tensor)Вернуть рамки в формате xyxy, нормализованные по размеру исходного изображения.
xywhnСвойство (torch.Tensor)Вернуть рамки в формате xywh, нормализованные по размеру исходного изображения.

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

Маски#

Объект 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, включая их имя, тип и описание:

НазваниеТипОписание
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

# Load a pretrained YOLO26n-sem Semantic model
model = YOLO("yolo26n-sem.pt")

# Run inference on an image
results = model("https://ultralytics.com/images/bus.jpg")  # results list

# View results
for r in results:
    print(r.semantic_mask.data)  # print the H x W class-ID map
НазваниеТипОписание
dataСвойство (torch.Tensor)Карта идентификаторов классов с формой (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

# 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 можно использовать для получения индексов и оценок классов top1 и top5.

Вероятности
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()МетодВозвращает копию тензора вероятностей с указанными устройством и типом данных.
top1Свойство (int)Индекс класса, занимающего первое место.
top5Свойство (list[int])Индексы пяти классов, занимающих первые места.
top1confСвойство (torch.Tensor)Уверенность класса, занимающего первое место.
top5confСвойство (torch.Tensor)Уверенность пяти классов, занимающих первые места.

Подробнее см. в документации класса 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)Вернуть идентификаторы отслеживания рамок (если доступны).
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)
    # 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'.

Что дальше#

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

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

  • Ultralytics YOLO — это современная модель для обнаружения объектов, сегментации экземпляров, семантической сегментации, оценки глубины и классификации в реальном времени. Его режим 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 objects
    embeddings = model.embed(source)  # list of torch.Tensor embeddings
  • После выполнения инференса с YOLO объекты Results содержат методы для отображения и сохранения аннотированных изображений. Для визуализации и сохранения результатов можно использовать такие методы, как result.show() и result.save(filename="result.jpg"). Все отсутствующие родительские каталоги в пути к имени файла создаются автоматически, например result.save("path/to/result.jpg"). Полный список этих методов см. в разделе работа с результатами.

Комментарии