Перейти к содержанию

Прогнозирование моделью Ultralytics YOLO

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

Введение

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



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

Прикладные области

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

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

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

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

Ключевые особенности режима предсказаний

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

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

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

Предсказание

from ultralytics import YOLO

# Загрузка модели
model = YOLO('yolov8n.pt')  # предварительно обученная модель YOLOv8n

# Пакетный вывод на список изображений
results = model(['im1.jpg', 'im2.jpg'])  # вернуть список объектов Results

# Обработка списка результатов
for result in results:
    boxes = result.boxes  # Объект Boxes для вывода bbox
    masks = result.masks  # Объект Masks для вывода масок сегментации
    keypoints = result.keypoints  # Объект Keypoints для вывода поз
    probs = result.probs  # Объект Probs для вывода вероятностей классификации
from ultralytics import YOLO

# Загрузка модели
model = YOLO('yolov8n.pt')  # предварительно обученная модель YOLOv8n

# Пакетный вывод на список изображений
results = model(['im1.jpg', 'im2.jpg'], stream=True)  # вернуть генератор объектов Results

# Обработка генератора результатов
for result in results:
    boxes = result.boxes  # Объект Boxes для вывода bbox
    masks = result.masks  # Объект Masks для вывода масок сегментации
    keypoints = result.keypoints  # Объект Keypoints для вывода поз
    probs = result.probs  # Объект Probs для вывода вероятностей классификации

Источники вывода

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 Путь к каталогу, содержащему изображения или видео.
глоб ✅ '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 потоков запустятся с пакетом размером 8.

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

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

Выполнить вывод на файл изображения.

from ultralytics import YOLO

# Загрузка предварительно обученной модели YOLOv8n
model = YOLO('yolov8n.pt')

# Определите путь к файлу изображения
source = 'path/to/image.jpg'

# Выполнить вывод на источник
results = model(source)  # список объектов Results

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

from ultralytics import YOLO

# Загрузка предварительно обученной модели YOLOv8n
model = YOLO('yolov8n.pt')

# Определение текущего скриншота как источника
source = 'screen'

# Выполнить вывод на источник
results = model(source)  # список объектов Results

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

from ultralytics import YOLO

# Загрузка предварительно обученной модели YOLOv8n
model = YOLO('yolov8n.pt')

# Определение URL удаленного изображения или видео
source = 'https://ultralytics.com/images/bus.jpg'

# Выполнить вывод на источник
results = model(source)  # список объектов Results

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

from PIL import Image
from ultralytics import YOLO

# Загрузка предварительно обученной модели YOLOv8n
model = YOLO('yolov8n.pt')

# Открытие изображения с помощью PIL
source = Image.open('path/to/image.jpg')

# Выполнение вывода на источник
results = model(source)  # список объектов Results

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

import cv2
from ultralytics import YOLO

# Загрузка предварительно обученной модели YOLOv8n
model = YOLO('yolov8n.pt')

# Чтение изображения с помощью OpenCV
source = cv2.imread('path/to/image.jpg')

# Выполнение вывода на источник
results = model(source)  # список объектов Results

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

import numpy as np
from ultralytics import YOLO

# Загрузка предварительно обученной модели YOLOv8n
model = YOLO('yolov8n.pt')

# Создание случайного массива numpy с формой HWC (640, 640, 3) со значениями в диапазоне [0, 255] и типом uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')

# Выполнение вывода на источник
results = model(source)  # список объектов Results

Выполнение вывода на изображение, представленное в виде тензора PyTorch. ```python import torch from ultralytics import YOLO

Загрузка предварительно обученной модели YOLOv8n

model = YOLO('yolov8n.pt')

Создание случайного тензора torch с формой BCHW (1, 3, 640, 640) со значениями в диапазоне [0, 1] и типом float32

source = torch.rand(1, 3, 640, 640, dtype=torch.float32)

Выполнение вывода на источник

results = model(source) # список объектов Results


Created 2023-11-13, Updated 2023-11-18
Authors: glenn-jocher (2)

Комментарии