Предсказание модели с Ultralytics YOLO#
Введение#
В мире машинного обучения и компьютерного зрения процесс интерпретации визуальных данных часто называют инференсом или предсказанием. 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:
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' | 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
# 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)Аргументы инференса:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
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"/не задано выбирают вычисления FP16 или FP32 для моделей PyTorch и TorchScript; остальные форматы выполняют вычисления с точностью, выбранной их артефактом и средой выполнения. При 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, для инференса ONNX-модели используется модуль OpenCV DNN вместо ONNX Runtime. |
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 | Фильтрует предсказания по набору идентификаторов классов. Возвращаются только обнаружения, принадлежащие указанным классам. Это полезно для фокусировки на релевантных объектах в задачах мультиклассового обнаружения. |
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 автоматически включает его в Linux и Windows на CPU x86 с oneDNN и PyTorch версии 1.13 или новее, False отключает его, а True запрашивает его на поддерживаемых CPU x86 или устройствах CUDA. ARM64, MPS, старые версии PyTorch, CPU без oneDNN и экспортированные форматы, такие как TensorRT и ONNX, остаются без изменений. |
nms | bool, необязательно | None | Запускает вывод «один ко многим» с NMS по умолчанию (None или True). Установи False, чтобы использовать голову «один к одному» без NMS, если она доступна. Подробнее см. в руководстве по сквозному детектированию. |
Аргументы визуализации:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
show | bool | False | Если True, аннотированные изображения или видео отображаются в окне. Это полезно для получения визуальной обратной связи в процессе разработки или тестирования. |
save | bool | False or True | Включает сохранение размеченных изображений или видео в файлы. Это полезно для документирования, дальнейшего анализа или обмена результатами. По умолчанию имеет значение True при использовании CLI и False при использовании в 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 | Формат файла Microsoft BMP |
.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 | Расширенный системный формат |
.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 Video |
.webm | yolo 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_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, содержащий плотную карту классов для каждого пикселя. |
speed | dict | Словарь со скоростями предварительной обработки, вывода и постобработки в миллисекундах на изображение. |
names | dict | Словарь, сопоставляющий индексы классов с именами классов. |
path | str | Путь к файлу изображения. |
save_dir | str, optional | Каталог для сохранения результатов. |
Результаты по задачам#
Поля, заполняемые ниже, зависят от задачи твоей модели — сравнивай детекцию, сегментацию, семантическую сегментацию, оценку глубины, классификацию, позу и OBB, если ты еще не выбрал задачу. Каждое предсказание возвращает один объект Results на изображение или кадр. Общие поля выше доступны всегда, в то время как данные предсказания для конкретной задачи хранятся в полях ниже. Тензоры координат и уверенности YOLO имеют тип torch.float32; тензоры вероятностей имеют тип torch.float32, если не используется половинная точность, иначе 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 новыми данными, такими как 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, он не содержит отдельную двоичную маску для каждого объекта и не предоставляет вспомогательные методы для работы с многоугольниками.
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 можно использовать для индексирования, обработки и преобразования ориентированных ограничивающих рамок в различные форматы.
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() поддерживает различные аргументы для настройки выходных данных:
| Аргумент | Тип | Описание | По умолчанию |
|---|---|---|---|
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)
# 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) уже установлены.
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"). Полный список этих методов см. в разделе работа с результатами.