Перейти к содержимому

Модель предсказания с Ultralytics YOLO

Ultralytics YOLO Экосистема и интеграции

Введение

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



Смотри: Как извлечь выходные данные из Ultralytics YOLOv8 Model для пользовательских проектов.

Применение в реальном мире

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

Зачем использовать Ultralytics YOLO для выводов?

Вот почему тебе стоит обратить внимание на режим предсказаний YOLOv8 для решения различных задач, связанных с умозаключениями:

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

Ключевые особенности режима Predict Mode

Режим предсказаний YOLOv8 отличается надежностью и универсальностью:

  • Совместимость с несколькими источниками данных: Неважно, в какой форме представлены твои данные - в виде отдельных изображений, коллекции изображений, видеофайлов или видеопотоков в реальном времени, - режим предсказаний обеспечит тебя всем необходимым.
  • Режим потокового вещания: Используй функцию потоковой передачи данных, чтобы сгенерировать экономящий память генератор Results предметы. Включи эту функцию, установив stream=True в методе вызова предиктора.
  • Пакетная обработка: Возможность обрабатывать несколько изображений или видеокадров в одном пакете, что еще больше ускоряет время вывода.
  • Integration Friendly: Легко интегрируйся с существующими конвейерами данных и другими программными компонентами благодаря гибкому API.

Модели Ultralytics YOLO возвращают либо список Python Results объекты, или экономящий память Python-генератор Results предметы, когда stream=True передается модели во время вычисления:

Предсказывай

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(["im1.jpg", "im2.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
from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.pt")  # pretrained YOLOv8n model

# Run batched inference on a list of images
results = model(["im1.jpg", "im2.jpg"], stream=True)  # return a generator of Results objects

# Process results generator
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

Источники для выводов

YOLOv8 может обрабатывать различные типы входных источников для выводов, как показано в таблице ниже. Среди источников - статичные изображения, видеопотоки и различные форматы данных. В таблице также указано, можно ли использовать каждый источник в потоковом режиме с помощью аргумента 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('im.jpg') PIL.Image Формат HWC с каналами RGB.
OpenCV cv2.imread('im.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 Глобальный шаблон для сопоставления нескольких файлов. Используй * символ в качестве подстановочного знака.
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 потоков будут запущены при batch-size 8.

Ниже приведены примеры кода для использования каждого типа источников:

Источники предсказаний

Выполни умозаключение на файле с изображением.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to the image file
source = "path/to/image.jpg"

# Run inference on the source
results = model(source)  # list of Results objects

Выполни умозаключение по содержимому текущего экрана в виде скриншота.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define current screenshot as source
source = "screen"

# Run inference on the source
results = model(source)  # list of Results objects

Выполни умозаключение на изображении или видео, размещенном удаленно по URL.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define remote image or video URL
source = "https://ultralytics.com/images/bus.jpg"

# Run inference on the source
results = model(source)  # list of Results objects

Запусти вывод на изображении, открытом с помощью Python Imaging Library (PIL).

from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Open an image using PIL
source = Image.open("path/to/image.jpg")

# Run inference on the source
results = model(source)  # list of Results objects

Выполни вывод на изображении, считанном с помощью OpenCV.

import cv2

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Read an image using OpenCV
source = cv2.imread("path/to/image.jpg")

# Run inference on the source
results = model(source)  # list of Results objects

Выполни вывод на изображении, представленном в виде массива numpy.

import numpy as np

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Create a random numpy array of HWC shape (640, 640, 3) with values in range [0, 255] and type uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype="uint8")

# Run inference on the source
results = model(source)  # list of Results objects

Выполни умозаключение на изображении, представленном в виде тензора PyTorch.

import torch

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Create a random torch tensor of BCHW shape (1, 3, 640, 640) with values in range [0, 1] and type float32
source = torch.rand(1, 3, 640, 640, dtype=torch.float32)

# Run inference on the source
results = model(source)  # list of Results objects

Выполни умозаключение на коллекции изображений, URL, видео и каталогов, перечисленных в CSV-файле.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define a path to a CSV file with images, URLs, videos and directories
source = "path/to/file.csv"

# Run inference on the source
results = model(source)  # list of Results objects

Выполни умозаключение на видеофайле. Используя stream=TrueТы можешь создать генератор объектов Results, чтобы уменьшить потребление памяти.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to video file
source = "path/to/video.mp4"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Выполни вывод для всех изображений и видео в директории. Чтобы также перехватить изображения и видео в подкаталогах, используй шаблон glob, то есть path/to/dir/**/*.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define path to directory containing images and videos for inference
source = "path/to/dir"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Выполни вывод по всем изображениям и видео, которые соответствуют глобальному выражению с * персонажи.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define a glob search for all JPG files in a directory
source = "path/to/dir/*.jpg"

# OR define a recursive glob search for all JPG files including subdirectories
source = "path/to/dir/**/*.jpg"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Выполни умозаключение на видео с YouTube. Используя stream=TrueТы можешь создать генератор объектов Results, чтобы уменьшить потребление памяти для длинных видео.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Define source as YouTube video URL
source = "https://youtu.be/LNwODJXcvt4"

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Выполняй выводы на удаленных источниках потокового вещания, используя протоколы RTSP, RTMP, TCP и IP-адреса. Если несколько потоков предоставляются в *.streams текстовый файл, то будет запущено пакетное вычисление, то есть 8 потоков при размере партии 8, в противном случае одиночные потоки будут запущены при размере партии 1.

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Single stream with batch-size 1 inference
source = "rtsp://example.com/media.mp4"  # RTSP, RTMP, TCP or IP streaming address

# Multiple streams with batched inference (i.e. batch-size 8 for 8 streams)
source = "path/to/list.streams"  # *.streams text file with one streaming address per row

# Run inference on the source
results = model(source, stream=True)  # generator of Results objects

Аргументы для умозаключений

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

Пример

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on 'bus.jpg' with arguments
model.predict("bus.jpg", save=True, imgsz=320, conf=0.5)

Аргументы для умозаключений:

Аргумент Тип По умолчанию Описание
source str 'ultralytics/assets' Указывает источник данных для выводов. Это может быть путь к изображению, видеофайлу, директории, URL или идентификатор устройства для прямых трансляций. Поддерживает широкий спектр форматов и источников, что позволяет гибко использовать различные типы входных данных.
conf float 0.25 Устанавливает минимальный порог уверенности для обнаружения. Объекты, обнаруженные с уверенностью ниже этого порога, будут проигнорированы. Настройка этого значения может помочь уменьшить количество ложных срабатываний.
iou float 0.7 Порог Intersection Over Union (IoU) для немаксимального подавления (NMS). Более низкие значения приводят к уменьшению количества обнаружений за счет устранения перекрывающихся боксов, что полезно для уменьшения количества дубликатов.
imgsz int or tuple 640 Определяет размер изображения для вывода. Может быть одним целым числом 640 для изменения размера квадрата или кортеж (высота, ширина). Правильное изменение размера может повысить точность обнаружения и скорость обработки.
half bool False Включает вывод с половинной точностью (FP16), что позволяет ускорить вывод модели на поддерживаемых графических процессорах с минимальным влиянием на точность.
device str None Указывает устройство для умозаключений (например, cpu, cuda:0 или 0). Позволяет пользователям выбирать между CPU, конкретным GPU или другими вычислительными устройствами для выполнения модели.
max_det int 300 Максимальное количество обнаружений, допустимое для одного изображения. Ограничивает общее количество объектов, которые модель может обнаружить за один вывод, предотвращая чрезмерный вывод в плотных сценах.
vid_stride int 1 Пропуск кадров для видеовходов. Позволяет пропускать кадры в видео, чтобы ускорить обработку за счет снижения временного разрешения. При значении 1 обрабатывается каждый кадр, при больших значениях кадры пропускаются.
stream_buffer bool False Определяет, нужно ли буферизовать все кадры при обработке видеопотока (True), или если модель должна возвращать самый последний кадр (False). Полезно для приложений, работающих в режиме реального времени.
visualize bool False Активирует визуализацию особенностей модели во время вывода, давая представление о том, что "видит" модель. Полезно для отладки и интерпретации модели.
augment bool False Включает увеличение времени тестирования (TTA) для предсказаний, потенциально улучшая устойчивость обнаружения ценой снижения скорости вывода.
agnostic_nms bool False Включает диагностируемое классом немаксимальное подавление (NMS), которое объединяет перекрывающиеся боксы разных классов. Полезно в сценариях многоклассового обнаружения, где часто происходит перекрытие классов.
classes list[int] None Фильтрует предсказания по набору идентификаторов классов. Будут возвращены только те обнаружения, которые относятся к указанным классам. Полезно для того, чтобы сфокусироваться на соответствующих объектах в многоклассовых задачах обнаружения.
retina_masks bool False Используй маски сегментации высокого разрешения, если они есть в модели. Это может повысить качество масок для задач сегментации, обеспечивая более тонкую детализацию.
embed list[int] None Определяет слои, из которых нужно извлечь векторы признаков или вкрапления. Полезно для последующих задач, таких как кластеризация или поиск сходства.

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

Аргумент Тип По умолчанию Описание
show bool False Если TrueОтображает аннотированные изображения или видео в окне. Полезно для мгновенной визуальной обратной связи во время разработки или тестирования.
save bool False Позволяет сохранить аннотированные изображения или видео в файл. Полезно для документации, дальнейшего анализа или обмена результатами.
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 None or int None Определяет ширину линии ограничительных рамок. Если NoneШирина линии автоматически регулируется в зависимости от размера изображения. Обеспечивает визуальную настройку для наглядности.

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

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

Изображения

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

Суффиксы изображений Пример команды Predict Ссылка
.bmp yolo predict source=image.bmp Формат файлов Microsoft BMP
.dng yolo predict source=image.dng Adobe DNG
.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
.pfm yolo predict source=image.pfm Портативная карта поплавков

Видео

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

Суффиксы для видео Пример команды Predict Ссылка
.asf yolo predict source=video.asf Формат продвинутых систем
.avi yolo predict source=video.avi Audio Video Interleave
.gif yolo predict source=video.gif Формат обмена графикой
.m4v yolo predict source=video.m4v MPEG-4 Part 14
.mkv yolo predict source=video.mkv Матроска
.mov yolo predict source=video.mov Формат файлов QuickTime
.mp4 yolo predict source=video.mp4 MPEG-4 Part 14 - Википедия
.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
.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 YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on an image
results = model("bus.jpg")  # list of 1 Results object
results = model(["bus.jpg", "zidane.jpg"])  # list of 2 Results objects

Results Объекты имеют следующие атрибуты:

Атрибут Тип Описание
orig_img numpy.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, содержащий ориентированные ограничительные рамки.
speed dict Словарь скоростей препроцесса, вывода и постпроцесса в миллисекундах на изображение.
names dict Словарь имен классов.
path str Путь к файлу с изображением.

Results У объектов есть следующие методы:

Метод Тип возврата Описание
update() None Обнови атрибуты box, masks и probs объекта Results.
cpu() Results Верни копию объекта Results со всеми тензорами в памяти процессора.
numpy() Results Возвращай копию объекта Results со всеми тензорами в виде массивов numpy.
cuda() Results Верни копию объекта Results со всеми тензорами в памяти GPU.
to() Results Верни копию объекта Results с тензорами на указанном устройстве и dtype.
new() Results Возвращай новый объект Results с тем же изображением, путем и именами.
plot() numpy.ndarray Построил график результатов обнаружения. Возвращает массив numpy с аннотированным изображением.
show() None Покажи аннотированные результаты на экране.
save() None Сохрани аннотированные результаты в файл.
verbose() str Возвращай строку журнала для каждого задания.
save_txt() None Сохрани предсказания в txt-файл.
save_crop() None Сохрани обрезанные предсказания в save_dir/cls/file_name.jpg.
tojson() str Преобразуй объект в формат JSON.

Более подробную информацию можно найти в Results документация по классам.

Коробки

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

Коробки

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

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

Вот таблица для Boxes Методы и свойства класса, включая их название, тип и описание:

Имя Тип Описание
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 YOLOv8n-seg Segment model
model = YOLO("yolov8n-seg.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

# View results
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks

Вот таблица для Masks Методы и свойства класса, включая их название, тип и описание:

Имя Тип Описание
cpu() Метод Возвращает маски tensor в памяти процессора.
numpy() Метод Возвращает маски tensor в виде массива numpy.
cuda() Метод Возвращает маски tensor в памяти GPU.
to() Метод Возвращает маски tensor с указанным устройством и dtype.
xyn Собственность (torch.Tensor) Список нормализованных сегментов, представленных в виде тензоров.
xy Собственность (torch.Tensor) Список сегментов в пиксельных координатах, представленных в виде тензоров.

Более подробную информацию можно найти в Masks документация по классам.

Ключевые моменты

Keypoints Объект можно использовать для индексации, манипулирования и нормализации координат.

Ключевые моменты

from ultralytics import YOLO

# Load a pretrained YOLOv8n-pose Pose model
model = YOLO("yolov8n-pose.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

# View results
for r in results:
    print(r.keypoints)  # print the Keypoints object containing the detected keypoints

Вот таблица для Keypoints Методы и свойства класса, включая их название, тип и описание:

Имя Тип Описание
cpu() Метод Возвращает ключевые точки tensor в памяти процессора.
numpy() Метод Возвращает ключевые точки tensor в виде массива numpy.
cuda() Метод Возвращает ключевые точки tensor в памяти GPU.
to() Метод Возвращает ключевые точки tensor с указанным устройством и dtype.
xyn Собственность (torch.Tensor) Список нормализованных ключевых точек, представленных в виде тензоров.
xy Собственность (torch.Tensor) Список ключевых точек в пиксельных координатах, представленных в виде тензоров.
conf Собственность (torch.Tensor) Возвращает доверительные значения ключевых точек, если они доступны, иначе - нет.

Более подробную информацию можно найти в Keypoints документация по классам.

Probs

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

Probs

from ultralytics import YOLO

# Load a pretrained YOLOv8n-cls Classify model
model = YOLO("yolov8n-cls.pt")

# Run inference on an image
results = model("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 tensor в памяти процессора.
numpy() Метод Возвращает копию probs tensor в виде массива numpy.
cuda() Метод Возвращает копию probs tensor в памяти GPU.
to() Метод Возвращает копию probs tensor с указанным устройством и dtype.
top1 Собственность (int) Индекс высшего 1 класса.
top5 Собственность (list[int]) Индексы 5 лучших классов.
top1conf Собственность (torch.Tensor) Уверенность в том, что это топ-1 класс.
top5conf Собственность (torch.Tensor) Кондиции 5 лучших классов.

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

OBB

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

OBB

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n-obb.pt")

# Run inference on an image
results = model("bus.jpg")  # results list

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

Вот таблица для OBB Методы и свойства класса, включая их название, тип и описание:

Имя Тип Описание
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 документация по классам.

Построение результатов

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

Черчение

from PIL import Image

from ultralytics import YOLO

# Load a pretrained YOLOv8n model
model = YOLO("yolov8n.pt")

# Run inference on 'bus.jpg'
results = model(["bus.jpg", "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() Параметры метода

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

Аргумент Тип Описание По умолчанию
conf bool Включи показатели достоверности обнаружения. True
line_width float Ширина линии ограничительных рамок. Масштабируется с размером изображения, если None. None
font_size float Размер шрифта текста. Масштабируется с размером изображения, если None. None
font str Название шрифта для текстовых аннотаций. 'Arial.ttf'
pil bool Возвращай изображение в виде объекта PIL Image. False
img numpy.ndarray Альтернативное изображение для черчения. Используй оригинальное изображение, если None. None
im_gpu torch.Tensor Изображение с GPU-ускорением для более быстрого прорисовывания маски. Форма: (1, 3, 640, 640). 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

Безопасное для потоков умозаключение

Обеспечение потокобезопасности во время вывода очень важно, когда ты параллельно запускаешь несколько моделей YOLO в разных потоках. Потокобезопасный вывод гарантирует, что предсказания каждого потока изолированы и не влияют друг на друга, что позволяет избежать условий гонки и обеспечить последовательные и надежные результаты.

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

Безопасное для потоков умозаключение

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

from threading import Thread

from ultralytics import YOLO


def thread_safe_predict(image_path):
    """Performs thread-safe prediction on an image using a locally instantiated YOLO model."""
    local_model = YOLO("yolov8n.pt")
    results = local_model.predict(image_path)
    # Process results


# Starting threads that each have their own model instance
Thread(target=thread_safe_predict, args=("image1.jpg",)).start()
Thread(target=thread_safe_predict, args=("image2.jpg",)).start()

Чтобы получить подробное представление о потокобезопасном умозаключении с помощью моделей YOLO и пошаговые инструкции, обратись к нашему руководству YOLO Thread-Safe Inference Guide. В этом руководстве ты найдешь всю необходимую информацию, чтобы избежать распространенных подводных камней и обеспечить бесперебойную работу твоих многопоточных выводов.

Источник потокового вещания for-петля

Вот скрипт Python , использующий OpenCV (cv2) и YOLOv8 , чтобы запустить процесс инференции на видеокадрах. Этот скрипт предполагает, что ты уже установил необходимые пакеты (opencv-python и ultralytics).

Потоковый фор-луп

import cv2

from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("yolov8n.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 YOLOv8 inference on the frame
        results = model(frame)

        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Display the annotated frame
        cv2.imshow("YOLOv8 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'.



Created 2023-11-12, Updated 2024-06-18
Authors: glenn-jocher (23), IvorZhu331 (1), RizwanMunawar (1), UltralyticsAssistant (1), Burhan-Q (1), plashchynski (1), tensorturtle (1), AyushExel (1), Laughing-q (1)

Комментарии