Ir para o conteúdo

Predição de Modelo com Ultralytics YOLO

Ecossistema e integrações do Ultralytics YOLO

Introdução

No mundo do aprendizado de máquina e visão computacional, o processo de fazer sentido a partir de dados visuais é chamado de 'inferência' ou 'predição'. O Ultralytics YOLOv8 oferece um recurso poderoso conhecido como modo predict que é personalizado para inferência em tempo real de alto desempenho em uma ampla gama de fontes de dados.



Assista: Como Extrair as Saídas do Modelo Ultralytics YOLOv8 para Projetos Personalizados.

Aplicações no Mundo Real

Manufatura Esportes Segurança
Detecção de Peças de Reposição de Veículo Detecção de Jogador de Futebol Detecção de Queda de Pessoas
Detecção de Peças de Reposição de Veículo Detecção de Jogador de Futebol Detecção de Queda de Pessoas

Por Que Usar o Ultralytics YOLO para Inferência?

Aqui está o porquê de você considerar o modo predict do YOLOv8 para suas diversas necessidades de inferência:

  • Versatilidade: Capaz de fazer inferências em imagens, vídeos e até transmissões ao vivo.
  • Desempenho: Projetado para processamento em tempo real e de alta velocidade sem sacrificar a precisão.
  • Facilidade de Uso: Interfaces Python e CLI intuitivas para implantação e testes rápidos.
  • Altamente Customizável: Várias configurações e parâmetros para ajustar o comportamento de inferência do modelo de acordo com suas necessidades específicas.

Recursos Chave do Modo Predict

O modo predict do YOLOv8 é projetado para ser robusto e versátil, apresentando:

  • Compatibilidade com Múltiplas Fontes de Dados: Se seus dados estão na forma de imagens individuais, uma coleção de imagens, arquivos de vídeo ou transmissões de vídeo em tempo real, o modo predict atende a todas as necessidades.
  • Modo de Streaming: Use o recurso de streaming para gerar um gerador eficiente de memória de objetos Results. Ative isso definindo stream=True no método de chamada do preditor.
  • Processamento em Lote: A capacidade de processar várias imagens ou quadros de vídeo em um único lote, acelerando ainda mais o tempo de inferência.
  • Integração Amigável: Integração fácil com pipelines de dados existentes e outros componentes de software, graças à sua API flexível.

Os modelos Ultralytics YOLO retornam ou uma lista de objetos Results em Python, ou um gerador em Python eficiente de memória de objetos Results quando stream=True é passado para o modelo durante a inferência:

Predict

from ultralytics import YOLO

# Carrega um modelo
model = YOLO('yolov8n.pt')  # modelo YOLOv8n pré-treinado

# Executa a inferência em lote em uma lista de imagens
results = model(['im1.jpg', 'im2.jpg'])  # retorna uma lista de objetos Results

# Processa a lista de resultados
for result in results:
    boxes = result.boxes  # Objeto Boxes para saídas de bbox
    masks = result.masks  # Objeto Masks para saídas de máscaras de segmentação
    keypoints = result.keypoints  # Objeto Keypoints para saídas de pose
    probs = result.probs  # Objeto Probs para saídas de classificação
from ultralytics import YOLO

# Carrega um modelo
model = YOLO('yolov8n.pt')  # modelo YOLOv8n pré-treinado

# Executa a inferência em lote em uma lista de imagens
results = model(['im1.jpg', 'im2.jpg'], stream=True)  # retorna um gerador de objetos Results

# Processa o gerador de resultados
for result in results:
    boxes = result.boxes  # Objeto Boxes para saídas de bbox
    masks = result.masks  # Objeto Masks para saídas de máscaras de segmentação
    keypoints = result.keypoints  # Objeto Keypoints para saídas de pose
    probs = result.probs  # Objeto Probs para saídas de classificação

Fontes de Inferência

O YOLOv8 pode processar diferentes tipos de fontes de entrada para inferência, conforme mostrado na tabela abaixo. As fontes incluem imagens estáticas, transmissões de vídeo e vários formatos de dados. A tabela também indica se cada fonte pode ser usada no modo de streaming com o argumento stream=True ✅. O modo de streaming é benéfico para processar vídeos ou transmissões ao vivo, pois cria um gerador de resultados em vez de carregar todos os quadros na memória.

Dica

Use stream=True para processar vídeos longos ou grandes conjuntos de dados para gerenciar a memória de forma eficiente. Quando stream=False, os resultados de todos os quadros ou pontos de dados são armazenados na memória, o que pode aumentar rapidamente e causar erros de falta de memória para grandes entradas. Em contraste, stream=True utiliza um gerador, que mantém apenas os resultados do quadro atual ou ponto de dados na memória, reduzindo significativamente o consumo de memória e prevenindo problemas de falta dela.

Fonte Argumento Tipo Notas
imagem 'image.jpg' str ou Path Arquivo de imagem único.
URL 'https://ultralytics.com/images/bus.jpg' str URL para uma imagem.
captura de tela 'screen' str Captura uma captura de tela.
PIL Image.open('im.jpg') PIL.Image Formato HWC com canais RGB.
OpenCV cv2.imread('im.jpg') np.ndarray Formato HWC com canais BGR uint8 (0-255).
numpy np.zeros((640,1280,3)) np.ndarray Formato HWC com canais BGR uint8 (0-255).
torch torch.zeros(16,3,320,640) torch.Tensor Formato BCHW com canais RGB float32 (0.0-1.0).
CSV 'sources.csv' str ou Path Arquivo CSV contendo caminhos para imagens, vídeos ou diretórios.
vídeo ✅ 'video.mp4' str ou Path Arquivo de vídeo em formatos como MP4, AVI, etc.
diretório ✅ 'path/' str ou Path Caminho para um diretório contendo imagens ou vídeos.
glob ✅ 'path/*.jpg' str Padrão glob para combinar vários arquivos. Use o caractere * como curinga.
YouTube ✅ 'https://youtu.be/LNwODJXcvt4' str URL para um vídeo do YouTube.
stream ✅ 'rtsp://example.com/media.mp4' str URL para protocolos de streaming como RTSP, RTMP, TCP ou um endereço IP.
multi-stream ✅ 'list.streams' str ou Path Arquivo de texto *.streams com uma URL de stream por linha, ou seja, 8 streams serão executados em lote de tamanho 8.

Abaixo estão exemplos de código para usar cada tipo de fonte:

Fontes de previsão

Executa a inferência em um arquivo de imagem.

from ultralytics import YOLO

# Carrega um modelo YOLOv8n pré-treinado
model = YOLO('yolov8n.pt')

# Define o caminho para o arquivo de imagem
source = 'caminho/para/imagem.jpg'

# Executa a inferência na fonte
results = model(source)  # lista de objetos Results

Executa a inferência no conteúdo atual da tela como uma captura de tela.

from ultralytics import YOLO

# Carrega um modelo YOLOv8n pré-treinado
model = YOLO('yolov8n.pt')

# Define a captura de tela atual como fonte
source = 'screen'

# Executa a inferência na fonte
results = model(source)  # lista de objetos Results

Executa a inferência em uma imagem ou vídeo hospedado remotamente via URL.

from ultralytics import YOLO

# Carrega um modelo YOLOv8n pré-treinado
model = YOLO('yolov8n.pt')

# Define a URL remota da imagem ou vídeo
source = 'https://ultralytics.com/images/bus.jpg'

# Executa a inferência na fonte
results = model(source)  # lista de objetos Results

Executa a inferência em uma imagem aberta com a Biblioteca de Imagens do Python (PIL).

from PIL import Image
from ultralytics import YOLO

# Carrega um modelo YOLOv8n pré-treinado
model = YOLO('yolov8n.pt')

# Abre uma imagem usando PIL
source = Image.open('caminho/para/imagem.jpg')

# Executa a inferência na fonte
results = model(source)  # lista de objetos Results

Executa a inferência em uma imagem lida com OpenCV.

import cv2
from ultralytics import YOLO

# Carrega um modelo YOLOv8n pré-treinado
model = YOLO('yolov8n.pt')

# Lê uma imagem usando OpenCV
source = cv2.imread('caminho/para/imagem.jpg')

# Executa a inferência na fonte
results = model(source)  # lista de objetos Results

Executa a inferência em uma imagem representada como um array numpy.

import numpy as np
from ultralytics import YOLO

# Carrega um modelo YOLOv8n pré-treinado
model = YOLO('yolov8n.pt')

# Cria um array random de numpy com forma HWC (640, 640, 3) com valores no intervalo [0, 255] e tipo uint8
source = np.random.randint(low=0, high=255, size=(640, 640, 3), dtype='uint8')

# Executa a inferência na fonte
results = model(source)  # lista de objetos Results

Executa a inferência em uma imagem representada como um tensor PyTorch. ```python import torch from ultralytics import YOLO

Carrega um modelo YOLOv8n pré-treinado

model = YOLO('yolov8n.pt')

Cria um tensor random de torch com forma BCHW (1, 3, 640, 640) com valores no intervalo [0, 1] e tipo float32

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

Executa a inferência na fonte

results = model(source) # lista de objetos Results


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

Comentários