Предсказание модели с Ultralytics YOLO#
Введение#
В машинном обучении и компьютерном зрении процесс интерпретации визуальных данных часто называют инференсом или предсказанием. 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' | str | URL-адрес изображения. |
| снимок экрана | 'screen' | str | Сделать снимок экрана. |
| PIL | Image.open('image.jpg') | PIL.Image | Формат HWC с каналами RGB. |
| OpenCV | cv2.imread('image.jpg') | np.ndarray | Формат HWC с каналами BGR uint8 (0-255). |
| NumPy | np.zeros((640,1280,3)) | np.ndarray | Формат HWC с каналами BGR uint8 (0-255). |
| torch | torch.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' | str | URL-адрес видео на YouTube. |
| поток ✅ | 'rtsp://example.com/media.mp4' | str | URL-адрес для протоколов потоковой передачи, например RTSP, RTMP, TCP, или IP-адрес. |
| несколько потоков ✅ | 'list.streams' | str или Path | Текстовый файл *.streams, в котором в каждой строке указан URL-адрес потока. Например, при 8 потоках размер пакета будет равен 8. |
| веб-камера ✅ | 0 | int | Индекс подключенной камеры, для которой нужно выполнить инференс. |
Ниже приведены примеры кода для каждого типа источника:
Выполнить инференс для файла изображения.
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)Аргументы инференса:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
source | str, int или None | None | Задаёт источник данных для инференса. Это может быть путь к изображению, видеофайл, каталог, URL-адрес или идентификатор устройства для видеопотока. Если значение не задано, в журнал записывается предупреждение, а модель использует встроенные демонстрационные данные (ultralytics/assets или демонстрационный URL для OBB). Поддерживается широкий спектр форматов и источников, что позволяет гибко работать с разными типами входных данных. |
conf | float | 0.25 | Задаёт минимальный порог уверенности для обнаружений. Объекты с уверенностью ниже этого порога отбрасываются. Изменение значения помогает сократить количество ложноположительных результатов. |
iou | float | 0.7 | Порог пересечения по объединению (IoU) для подавления немаксимумов (NMS). При низких значениях остаётся меньше обнаружений, поскольку перекрывающиеся рамки удаляются. Это помогает сократить число дубликатов. |
imgsz | int или tuple | 640 | Целевой размер Letterbox. Целое число задаёт квадрат N×N; кортеж — (height, width). При rect=True фактический тензор может быть меньше целевого из-за дополнения до минимального прямоугольника. Для фиксированного размера используй rect=False. См. раздел Фиксированный размер или минимальный прямоугольник. |
rect | bool | True | Если задано True, по возможности используется дополнение до минимального прямоугольника (пакет с одинаковой формой и поддерживаемый бэкенд). Если задано False, дополнение всегда выполняется до полного размера imgsz. См. раздел Фиксированный размер или минимальный прямоугольник. |
quantize | int или str | None | Точность инференса: 16/"fp16" и 32/"fp32"/unset задают вычисления в FP16 или FP32 для моделей PyTorch и TorchScript (FP32 на CPU); для других форматов точность определяется артефактом модели и средой выполнения. На 16 OpenVINO по-прежнему округляет входные данные до FP16 на клиенте, а затем расширяет их обратно до FP32, не меняя точность среды выполнения. Квантование INT8/PTQ настраивается при экспорте, а затем применяется при загрузке экспортированной модели. Заменяет устаревший флаг half. |
device | str | None | Задаёт устройство для инференса (например, cpu, cuda:0, 0, npu или npu:0). Позволяет выбрать CPU, определённый GPU, NPU Huawei Ascend или другое вычислительное устройство для выполнения модели. |
dnn | bool | False | Если True, использует модуль DNN OpenCV вместо ONNX Runtime для инференса ONNX-модели. |
data | str | None | Путь к YAML-файлу датасета (например, coco8.yaml), который читается только для получения names и только если у загруженной модели нет собственных названий классов: например, это сторонний экспорт или экспорт Ultralytics, отделённый от поставляемых с ним метаданных. В противном случае такая модель сообщает class0, class1 и так далее. |
batch | int | 1 | Задаёт размер пакета для инференса (работает, только если источник — каталог, видеофайл или файл .txt). Больший размер пакета может повысить пропускную способность и сократить общее время инференса. |
max_det | int | 300 | Максимальное число детекций на изображение. Ограничивает общее количество объектов, которые модель может обнаружить за один инференс, предотвращая чрезмерное количество результатов в насыщенных сценах. |
vid_stride | int | 1 | Шаг обработки кадров для видеоисточников. Позволяет пропускать кадры в видео, ускоряя обработку за счёт снижения временного разрешения. Значение 1 означает обработку каждого кадра, большие значения — пропуск кадров. |
stream_buffer | bool | False | Определяет, нужно ли ставить входящие кадры видеопотоков в очередь. Если False, старые кадры отбрасываются, чтобы освободить место для новых (оптимально для приложений реального времени). Если True, новые кадры помещаются в буфер, что исключает пропуски кадров, но приводит к задержке, если FPS инференса ниже FPS потока. |
visualize | bool | False | Сохраняет тепловую карту активации класса рядом с каждым предсказанием и показывает, какие пиксели повысили оценки предсказанного класса. Учитывает conf и classes, поэтому classes=[0] отображает только этот класс. Доступно только для моделей Ultralytics на PyTorch. |
augment | bool | False | Включает аугментацию во время тестирования (TTA) для предсказаний, что может повысить устойчивость детекции, но замедляет инференс. Доступно только для моделей Ultralytics на PyTorch. |
agnostic_nms | bool | False | Включает зависящее от класса подавление немаксимумов (NMS): перекрывающиеся рамки с более низкими оценками подавляются между разными классами, а не только в рамках одного класса. Полезно для задач многоклассовой детекции, где классы часто перекрываются. При инференсе без NMS (nms=False на YOLO26 или YOLOv10) этот параметр только предотвращает появление одной и той же детекции с несколькими метками классов (дубликаты с IoU=1.0) и не подавляет разные рамки на основе порога IoU. |
classes | list[int] | None | Фильтрует предсказания по набору ID классов. Возвращаются только детекции, относящиеся к указанным классам. Полезно, чтобы сосредоточиться на нужных объектах в задачах многоклассовой детекции. |
retina_masks | bool | False | Возвращает маски сегментации высокого разрешения. Если параметр включён, возвращаемые маски (masks.data) будут соответствовать исходному размеру изображения. Если он выключен, маски будут иметь размер изображения, использованного при инференсе. |
embed | list[int] | None | Задаёт слои, из которых извлекаются векторы признаков или эмбеддинги. Используй model.embed(source) для эмбеддингов предпоследнего слоя или model.predict(source, embed=[layer]), чтобы выбрать конкретные слои. Полезно для последующих задач, например кластеризации или поиска сходства. Доступно только для моделей Ultralytics на PyTorch. |
project | str | None | Имя каталога проекта, в котором сохраняются результаты предсказания, если включён параметр save. |
name | str | None | Имя запуска предсказания. Используется для создания подкаталога в папке проекта, куда сохраняются результаты предсказания, если включён параметр save. |
stream | bool | False | Обеспечивает экономную по памяти обработку длинных видео или большого количества изображений: вместо загрузки всех кадров в память сразу возвращает генератор объектов Results. |
verbose | bool | True | Определяет, показывать ли в терминале подробные журналы инференса, обеспечивая обратную связь о ходе предсказания в реальном времени. |
compile | bool или str | False | Включает компиляцию графа torch.compile в PyTorch 2.x с помощью backend='inductor'. Принимает значения True → "default", False → отключение или строковый режим, например "default", "reduce-overhead", "max-autotune-no-cudagraphs". Если режим не поддерживается, выполняется откат к eager-режиму с предупреждением. |
channels_last | bool | None | Использует формат памяти channels_last (NHWC) для нативного инференса PyTorch. None автоматически включает его на процессорах x86 с oneDNN в Linux и Windows при PyTorch 1.13 или новее, False отключает его, а True запрашивает его на поддерживаемых процессорах x86 или устройствах CUDA. Для ARM64, MPS, более старых версий PyTorch, процессоров без oneDNN и экспортированных форматов, таких как TensorRT и ONNX, ничего не меняется. |
nms | bool, необязательно | None | По умолчанию выполняет инференс по схеме «один ко многим» с NMS (None или True). Укажи False, чтобы использовать голову «один к одному» без NMS, если она доступна. Подробности см. в руководстве по сквозной детекции. |
Параметры визуализации:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
show | bool | False | Если True, показывает аннотированные изображения или видео в окне. Полезно для мгновенной визуальной проверки во время разработки или тестирования. |
save | bool | False or True | Включает сохранение аннотированных изображений или видео в файлы. Полезно для документации, дальнейшего анализа или обмена результатами. По умолчанию включено при использовании CLI и выключено при использовании Python. |
save_frames | bool | False | При обработке видео сохраняет отдельные кадры как изображения. Полезно для извлечения конкретных кадров или подробного анализа каждого кадра. |
save_txt | bool | False | Сохраняет результаты детекции в текстовый файл в формате [class] [x_center] [y_center] [width] [height] [confidence]. Полезно для интеграции с другими инструментами анализа. |
save_conf | bool | False | Добавляет оценки уверенности в сохраняемые текстовые файлы. Это делает данные для постобработки и анализа более подробными. |
save_crop | bool | False | Сохраняет обрезанные изображения детекций. Полезно для аугментации датасета, анализа или создания специализированных датасетов для определённых объектов. |
show_labels | bool | True | Показывает метки каждой детекции на визуализации. Помогает сразу понять, какие объекты обнаружены. |
show_conf | bool | True | Показывает оценку уверенности каждой детекции рядом с меткой. Позволяет оценить уверенность модели в каждой детекции. |
show_boxes | bool | True | Рисует ограничивающие рамки вокруг обнаруженных объектов. Необходимо для визуального определения объектов и их местоположения на изображениях или видеокадрах. |
line_width | int or None | None | Задаёт толщину линий ограничивающих рамок. Если None, толщина автоматически подстраивается под размер изображения. Позволяет настроить визуализацию для большей наглядности. |
Форматы изображений и видео#
YOLO26 поддерживает различные форматы изображений и видео, указанные в ultralytics/data/utils.py. Допустимые расширения и примеры команд predict смотри в таблицах ниже.
Изображения#
В таблице ниже перечислены допустимые форматы изображений Ultralytics.
Для форматов HEIC/HEIF требуется pi-heif, который автоматически устанавливается при первом использовании. Формат AVIF изначально поддерживается Pillow.
| Расширения файлов изображений | Пример команды predict | Справочник |
|---|---|---|
.avif | yolo predict source=image.avif | Формат файлов изображений AV1 |
.bmp | yolo predict source=image.bmp | Формат файлов BMP Microsoft |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | Формат изображений высокой эффективности |
.heif | yolo predict source=image.heif | Формат изображений высокой эффективности |
.jp2 | yolo predict source=image.jp2 | JPEG 2000 |
.jpeg | yolo predict source=image.jpeg | JPEG |
.jpg | yolo predict source=image.jpg | JPEG |
.mpo | yolo predict source=image.mpo | Объект с несколькими изображениями |
.png | yolo predict source=image.png | Переносимая сетевая графика |
.tif | yolo predict source=image.tif | Формат файлов изображений с тегами |
.tiff | yolo predict source=image.tiff | Формат файлов изображений с тегами |
.webp | yolo predict source=image.webp | WebP |
Видео#
В таблице ниже перечислены допустимые видеоформаты Ultralytics.
| Расширения видеофайлов | Пример команды predict | Справочник |
|---|---|---|
.asf | yolo predict source=video.asf | Формат Advanced Systems |
.avi | yolo predict source=video.avi | Чередование аудио и видео |
.gif | yolo predict source=video.gif | Формат обмена графикой |
.m4v | yolo predict source=video.m4v | Часть 14 MPEG-4 |
.mkv | yolo predict source=video.mkv | Matroska |
.mov | yolo predict source=video.mov | Формат файлов QuickTime |
.mp4 | yolo predict source=video.mp4 | Часть 14 MPEG-4 — Википедия |
.mpeg | yolo predict source=video.mpeg | Часть 2 MPEG-1 |
.mpg | yolo predict source=video.mpg | Часть 2 MPEG-1 |
.ts | yolo predict source=video.ts | Транспортный поток MPEG |
.wmv | yolo predict source=video.wmv | Видео Windows Media |
.webm | yolo 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_img | np.ndarray | Исходное изображение в виде массива NumPy. |
orig_shape | tuple | Форма исходного изображения в формате (высота, ширина). |
boxes | Boxes, optional | Объект Boxes с ограничивающими рамками обнаруженных объектов. |
masks | Masks, optional | Объект Masks с масками обнаруженных объектов. |
probs | Probs, optional | Объект Probs с вероятностями принадлежности к каждому классу для задачи классификации. |
keypoints | Keypoints, optional | Объект Keypoints с обнаруженными ключевыми точками каждого объекта. |
obb | OBB, optional | Объект OBB с ориентированными ограничивающими рамками. |
semantic_mask | SemanticMask, optional | Объект SemanticMask с плотной картой классов для каждого пикселя. |
depth | DepthMap, optional | Объект DepthMap с плотной картой глубины для каждого пикселя. |
speed | dict | Словарь со скоростями предварительной обработки, инференса и постобработки в миллисекундах на изображение. |
names | dict | Словарь, связывающий индексы классов с названиями классов. |
path | str | Путь к файлу изображения. |
save_dir | str, 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.boxes | Boxes | (N) | Рамки обнаруженных объектов. |
result.boxes.data | torch.float32 | (N,6/7) | Исходный [x1,y1,x2,y2,conf,cls] и, при наличии, идентификатор трека. |
result.boxes.xyxy | torch.float32 | (N,4) | Рамки в пикселях xyxy. |
result.boxes.conf | torch.float32 | (N,) | Оценки уверенности. |
result.boxes.cls | torch.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, этот объект не содержит отдельную двоичную маску для каждого объекта и не предоставляет вспомогательных методов для работы с полигонами.
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 можно использовать для индексации, обработки и преобразования ориентированных ограничивающих рамок в разные форматы.
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() поддерживает различные аргументы для настройки выходных данных:
| Аргумент | Тип | Описание | По умолчанию |
|---|---|---|---|
conf | bool | Добавляет оценки уверенности обнаружений. | True |
line_width | float | Толщина линий ограничивающих рамок. Масштабируется относительно размера изображения, если None. | None |
font_size | float | Размер шрифта текста. Масштабируется относительно размера изображения, если None. | None |
font | str | Название шрифта для текстовых аннотаций. | 'Arial.ttf' |
pil | bool | Возвращает изображение как объект PIL Image. | False |
img | np.ndarray | torch.Tensor | Альтернативное изображение. Тензоры должны быть непрерывными, иметь формат HWC BGR и тип uint8. | None |
kpt_radius | int | Радиус нарисованных ключевых точек. | 5 |
kpt_line | bool | Соединяет ключевые точки линиями. | True |
labels | bool | Добавляет в аннотации метки классов. | True |
boxes | bool | Накладывает на изображение ограничивающие рамки. | True |
masks | bool | Накладывает на изображение маски. | True |
probs | bool | Добавляет вероятности классификации. | True |
show | bool | Показывает изображение с аннотациями в программе просмотра изображений по умолчанию. | False |
save | bool | Сохраняет изображение с аннотациями в файл, указанный в filename. | False |
filename | str | Путь и имя файла для сохранения изображения с аннотациями, если save имеет значение True. | None |
color_mode | str | Задаёт режим окрашивания, например 'instance' или 'class'. | 'class' |
txt_color | tuple[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) уже установлены.
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")). Полный список этих методов смотри в разделе работа с результатами.