Предсказание моделей с помощью Ultralytics YOLO#
Введение#
В мире machine learning и computer vision процесс осмысления визуальных данных часто называют инференсом или предсказанием. Ultralytics YOLO26 предлагает мощную функцию, известную как predict mode, которая создана для высокопроизводительного инференса в реальном времени на самых разных источниках данных.
Watch: How to Extract Results from Ultralytics YOLO26 Tasks for Custom Projects 🚀
Применение в реальных условиях#
| Производство | Спорт | Безопасность |
|---|---|---|
![]() | ![]() | ![]() |
| Детекция запасных частей автомобиля | Детекция футболистов | Детекция падения людей |
Почему стоит использовать 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' | 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Аргументы вывода (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)Аргументы инференса:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
source | str, int или None | None | Задает источник данных для инференса. Может быть путем к изображению, видеофайлу, директорией, URL-адресом или ID устройства для прямых трансляций. Если опущено, записывается предупреждение, и модель переключается на встроенные демо-ресурсы (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" включает инференс FP16 на поддерживаемых GPU; 32/"fp32"/не задано — это FP32. Квантование INT8/PTQ настраивается при экспорте, а затем используется путем загрузки экспортированной модели. Заменяет устаревший флаг half. |
device | str | None | Задает устройство для инференса (например, cpu, cuda:0, 0, npu или npu:0). Позволяет пользователям выбирать между CPU, конкретным GPU, Huawei Ascend NPU или другими вычислительными устройствами для выполнения модели. |
dnn | bool | False | Если True, использует модуль OpenCV DNN вместо 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), подавляя перекрывающиеся боксы с более низким скором для разных классов, а не только в рамках одного класса. Полезно в сценариях многоклассового детектирования, где часто происходит перекрытие классов. Для моделей «end-to-end» (YOLO26, YOLOv10) это лишь предотвращает появление одного и того же детектирования с несколькими метками классов (дубликаты с IoU=1.0) и не выполняет подавление на основе порога IoU между различными боксами. |
classes | list[int] | None | Фильтрует предсказания по набору ID классов. Будут возвращены только обнаружения, принадлежащие указанным классам. Полезно для фокусировки на релевантных объектах в задачах многоклассового обнаружения. |
retina_masks | bool | False | Возвращает маски сегментации высокого разрешения. Возвращаемые маски (masks.data) будут соответствовать исходному размеру изображения, если эта функция включена. Если отключена, они будут иметь размер изображения, использовавшийся при инференсе. |
embed | list[int] | None | Указывает слои, из которых нужно извлекать векторы признаков или embeddings. Используй 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 | Включает компиляцию графа PyTorch 2.x torch.compile с помощью backend='inductor'. Принимает True → "default", False → отключает или строковый режим, такой как "default", "reduce-overhead", "max-autotune-no-cudagraphs". При неподдерживаемости возвращается к жадному режиму (eager) с предупреждением. |
channels_last | bool | False | Использует формат памяти channels_last (NHWC) для сверток во время инференса, ускоряя работу GPU с CUDA Tensor Core без изменения результатов. Применяется только к нативным моделям PyTorch; игнорируется для CPU, MPS и экспортированных форматов, таких как TensorRT и ONNX. |
end2end | bool | None | Переопределяет сквозной (end-to-end) режим в моделях YOLO, поддерживающих инференс без NMS (YOLO26, YOLOv10). Установка значения False позволяет запускать предсказание с использованием традиционного пайплайна NMS, а также дополнительно дает возможность использовать аргумент iou. Подробности см. в руководстве по сквозному обнаружению. |
Аргументы визуализации:
| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
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. См. таблицы ниже для ознакомления с допустимыми суффиксами и примерами команд прогнозирования.
Изображения#
В таблице ниже приведены допустимые форматы изображений Ultralytics.
Форматы HEIC/HEIF требуют pi-heif, который устанавливается автоматически при первом использовании. AVIF поддерживается Pillow нативно.
| Суффиксы изображений | Пример команды предсказания | Справочная информация |
|---|---|---|
.avif | yolo predict source=image.avif | AV1 Image File Format |
.bmp | yolo predict source=image.bmp | Microsoft BMP File Format |
.dng | yolo predict source=image.dng | Adobe DNG |
.heic | yolo predict source=image.heic | High Efficiency Image Format |
.heif | yolo predict source=image.heif | High Efficiency Image Format |
.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 | Multi Picture Object |
.png | yolo predict source=image.png | Portable Network Graphics |
.tif | yolo predict source=image.tif | Tag Image File Format |
.tiff | yolo predict source=image.tiff | Tag Image File Format |
.webp | yolo predict source=image.webp | WebP |
Видео#
В таблице ниже приведены допустимые форматы видео Ultralytics.
| Суффиксы видео | Пример команды предсказания | Справочная информация |
|---|---|---|
.asf | yolo predict source=video.asf | Advanced Systems Format |
.avi | yolo predict source=video.avi | Audio Video Interleave |
.gif | yolo predict source=video.gif | Graphics Interchange Format |
.m4v | yolo predict source=video.m4v | MPEG-4 Part 14 |
.mkv | yolo predict source=video.mkv | Matroska |
.mov | yolo predict source=video.mov | QuickTime File Format |
.mp4 | yolo predict source=video.mp4 | MPEG-4 Part 14 - Wikipedia |
.mpeg | yolo predict source=video.mpeg | MPEG-1 Part 2 |
.mpg | yolo predict source=video.mpg | MPEG-1 Part 2 |
.ts | yolo predict source=video.ts | MPEG Transport Stream |
.wmv | yolo predict source=video.wmv | Windows Media Video |
.webm | yolo predict source=video.webm | WebM 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_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 для каждого изображения или кадра. Общие поля выше доступны всегда, в то время как данные прогноза для конкретной задачи хранятся в полях ниже. Тензоры координат, уверенности и вероятностей имеют формат
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] плюс необязательный идентификатор трека (track ID). |
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 | Преобразует результаты детекции в 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, она не содержит по одной бинарной маске на объект и не предоставляет вспомогательные инструменты для работы с многоугольниками.
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.
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 можно использовать для индексации, манипулирования и конвертации ориентированных ограничивающих прямоугольников в различные форматы.
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() поддерживает различные аргументы для настройки вывода:
| Аргумент | Тип | Описание | По умолчанию |
|---|---|---|---|
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 параллельно в разных потоках. Потокобезопасный инференс гарантирует, что предсказания каждого потока изолированы и не мешают друг другу, избегая условий состязательности (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).
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")). Полный список этих методов см. в разделе работа с результатами.


