YOLO Vision 2026:

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

Ultralytics YOLO ecosystem and integrations

Введение#

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



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

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

ПроизводствоСпортБезопасность
Vehicle Spare Parts DetectionFootball Player DetectionPeople Fall Detection
Детекция запасных частей автомобиляДетекция футболистовДетекция падения людей

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

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

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

Основные особенности режима предсказания#

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

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

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

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

Фиксированная форма против минимального прямоугольника (rect)#

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

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

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

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

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

Обучение принимает только одно целое число imgsz (список [h, w] приводится к наибольшему значению). Predict и 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-адресом или 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. См. Фиксированная форма против минимального прямоугольника.
quantizeint или strNoneТочность инференса: 16/"fp16" включает инференс FP16 на поддерживаемых GPU; 32/"fp32"/не задано — это FP32. Квантование INT8/PTQ настраивается при экспорте, а затем используется путем загрузки экспортированной модели. Заменяет устаревший флаг half.
devicestrNoneЗадает устройство для инференса (например, cpu, cuda:0, 0, npu или npu:0). Позволяет пользователям выбирать между CPU, конкретным GPU, Huawei Ascend NPU или другими вычислительными устройствами для выполнения модели.
dnnboolFalseЕсли True, использует модуль OpenCV DNN вместо 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), подавляя перекрывающиеся боксы с более низким скором для разных классов, а не только в рамках одного класса. Полезно в сценариях многоклассового детектирования, где часто происходит перекрытие классов. Для моделей «end-to-end» (YOLO26, YOLOv10) это лишь предотвращает появление одного и того же детектирования с несколькими метками классов (дубликаты с IoU=1.0) и не выполняет подавление на основе порога IoU между различными боксами.
classeslist[int]NoneФильтрует предсказания по набору ID классов. Будут возвращены только обнаружения, принадлежащие указанным классам. Полезно для фокусировки на релевантных объектах в задачах многоклассового обнаружения.
retina_masksboolFalseВозвращает маски сегментации высокого разрешения. Возвращаемые маски (masks.data) будут соответствовать исходному размеру изображения, если эта функция включена. Если отключена, они будут иметь размер изображения, использовавшийся при инференсе.
embedlist[int]NoneУказывает слои, из которых нужно извлекать векторы признаков или embeddings. Используй model.embed(source) для эмбеддингов предпоследнего слоя или model.predict(source, embed=[layer]) для выбора определенных слоев. Полезно для последующих задач, таких как кластеризация или поиск сходства. Доступно только для моделей Ultralytics PyTorch.
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) с предупреждением.
channels_lastboolFalseИспользует формат памяти channels_last (NHWC) для сверток во время инференса, ускоряя работу GPU с CUDA Tensor Core без изменения результатов. Применяется только к нативным моделям PyTorch; игнорируется для CPU, MPS и экспортированных форматов, таких как TensorRT и ONNX.
end2endboolNoneПереопределяет сквозной (end-to-end) режим в моделях YOLO, поддерживающих инференс без NMS (YOLO26, YOLOv10). Установка значения False позволяет запускать предсказание с использованием традиционного пайплайна NMS, а также дополнительно дает возможность использовать аргумент iou. Подробности см. в руководстве по сквозному обнаружению.

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

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

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

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

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

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

Примечание

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

Суффиксы изображенийПример команды предсказанияСправочная информация
.avifyolo predict source=image.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

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

Все вызовы 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 для каждого изображения или кадра. Общие поля выше доступны всегда, в то время как данные прогноза для конкретной задачи хранятся в полях ниже. Тензоры координат, уверенности и вероятностей имеют формат 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] плюс необязательный идентификатор трека (track ID).
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Преобразует результаты детекции в Polars DataFrame.
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)Возвращает ID трекинга для рамок (если доступны).
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). Тип данных (dtype) выбирается в зависимости от количества классов: 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#

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

Probs
from ultralytics import YOLO

# Load a pretrained YOLO26n-cls Classify model
model = YOLO("yolo26n-cls.pt")

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

# View results
for r in results:
    print(r.probs)  # print the Probs object containing the detected class probabilities

Ниже приведена таблица, суммирующая методы и свойства класса Probs:

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

Для получения подробной информации см. документацию класса Probs.

OBB#

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

OBB
from ultralytics import YOLO

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

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

# View results
for r in results:
    print(r.obb)  # print the OBB object containing the oriented detection bounding boxes

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

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

Для получения подробной информации см. документацию класса OBB.

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

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

Визуализация
from PIL import Image

from ultralytics import YOLO

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

# Run inference on 'bus.jpg'
results = model(["https://ultralytics.com/images/bus.jpg", "https://ultralytics.com/images/zidane.jpg"])  # results list

# Visualize the results
for i, r in enumerate(results):
    # Plot results image
    im_bgr = r.plot()  # BGR-order numpy array
    im_rgb = Image.fromarray(im_bgr[..., ::-1])  # RGB-order PIL image

    # Show results to screen (in supported environments)
    r.show()

    # Save results to disk
    r.save(filename=f"results{i}.jpg")

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

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

АргументТипОписаниеПо умолчанию
confboolВключить оценки уверенности детекции.True
line_widthfloatТолщина линий ограничивающих прямоугольников. Масштабируется в зависимости от размера изображения, если указано None.None
font_sizefloatРазмер шрифта текста. Масштабируется в зависимости от размера изображения, если указано None.None
fontstrНазвание шрифта для текстовых аннотаций.'Arial.ttf'
pilboolВозвращает изображение как объект PIL Image.False
imgnp.ndarray | 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 параллельно в разных потоках. Потокобезопасный инференс гарантирует, что предсказания каждого потока изолированы и не мешают друг другу, избегая условий состязательности (race conditions) и обеспечивая согласованные и надежные результаты.

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

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

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

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 — это современная модель для object detection, instance segmentation, semantic segmentation, depth estimation и classification в реальном времени. Ее predict mode позволяет пользователям выполнять высокоскоростной инференс на различных источниках данных, таких как изображения, видео и прямые трансляции. Разработанная для обеспечения производительности и универсальности, она также предлагает пакетную обработку и режимы потоковой передачи. Для получения дополнительной информации о ее функциях ознакомьтесь с 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 и другие. Эти аргументы позволяют настраивать процесс инференса, задавая такие параметры, как пороги уверенности, размер изображения и устройство, используемое для вычислений. Подробные описания этих аргументов можно найти в разделе аргументы инференса.

Как извлечь эмбеддинги из модели YOLO?#

Используй 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?#

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

Комментарии