Salta para o conteúdo

Ultralytics Docs: Usando YOLOv8 com SAHI para inferência fatiada

Bem-vindo à documentação Ultralytics sobre como utilizar YOLOv8 com SAHI (Slicing Aided Hyper Inference). Este guia abrangente tem como objetivo fornecer-te todos os conhecimentos essenciais de que necessitarás para implementar SAHI juntamente com YOLOv8. Iremos aprofundar o que é a SAHI, porque é que a inferência fatiada é fundamental para aplicações de grande escala e como integrar estas funcionalidades com YOLOv8 para melhorar o desempenho da deteção de objectos.

SAHI Sliced Inference Overview (Visão geral da inferência fatiada SAHI)

Introdução à SAHI

SAHI (Slicing Aided Hyper Inference) é uma biblioteca inovadora concebida para otimizar os algoritmos de deteção de objectos para imagens de grande escala e de alta resolução. A sua principal funcionalidade consiste em dividir as imagens em fatias geríveis, executar a deteção de objectos em cada fatia e depois juntar os resultados. O SAHI é compatível com uma série de modelos de deteção de objectos, incluindo a série YOLO , oferecendo assim flexibilidade e assegurando uma utilização optimizada dos recursos computacionais.

Principais características do SAHI

  • Integração perfeita: O SAHI integra-se sem esforço nos modelos YOLO , o que significa que podes começar a cortar e a detetar sem muitas modificações no código.
  • Eficiência de recursos: Ao dividir imagens grandes em partes mais pequenas, o SAHI optimiza a utilização da memória, permitindo-te executar uma deteção de alta qualidade em hardware com recursos limitados.
  • Elevada precisão: O SAHI mantém a precisão da deteção através da utilização de algoritmos inteligentes para fundir caixas de deteção sobrepostas durante o processo de costura.

O que é a Inferência em Fragmentos?

A inferência em fatias refere-se à prática de subdividir uma imagem grande ou de alta resolução em segmentos mais pequenos (fatias), efetuar a deteção de objectos nestas fatias e, em seguida, recompilar as fatias para reconstruir as localizações dos objectos na imagem original. Esta técnica é inestimável em cenários em que os recursos computacionais são limitados ou quando se trabalha com imagens de resolução extremamente elevada que, de outra forma, poderiam levar a problemas de memória.

Vantagens da inferência fragmentada

  • Reduz a carga computacional: As fatias de imagem mais pequenas são mais rápidas de processar e consomem menos memória, permitindo um funcionamento mais suave em hardware de gama baixa.

  • Qualidade de deteção preservada: Uma vez que cada corte é tratado de forma independente, não há redução na qualidade da deteção de objectos, desde que os cortes sejam suficientemente grandes para capturar os objectos de interesse.

  • Escalabilidade melhorada: A técnica permite que a deteção de objectos seja mais facilmente dimensionada em diferentes tamanhos e resoluções de imagens, tornando-a ideal para uma vasta gama de aplicações, desde imagens de satélite a diagnósticos médicos.

YOLOv8 sem SAHI YOLOv8 com SAHI
YOLOv8 sem SAHI YOLOv8 com SAHI

Instalação e preparação

Instalação

Para começar, instala as versões mais recentes do SAHI e Ultralytics:

pip install -U ultralytics sahi

Importar módulos e transferir recursos

Vê aqui como importar os módulos necessários e transferir um modelo YOLOv8 e algumas imagens de teste:

from sahi.utils.yolov8 import download_yolov8s_model
from sahi import AutoDetectionModel
from sahi.utils.cv import read_image
from sahi.utils.file import download_from_url
from sahi.predict import get_prediction, get_sliced_prediction, predict
from pathlib import Path
from IPython.display import Image

# Download YOLOv8 model
yolov8_model_path = "models/yolov8s.pt"
download_yolov8s_model(yolov8_model_path)

# Download test images
download_from_url('https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg', 'demo_data/small-vehicles1.jpeg')
download_from_url('https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png', 'demo_data/terrain2.png')

Inferência padrão com YOLOv8

Instanciar o modelo

Podes instanciar um modelo YOLOv8 para deteção de objectos desta forma:

detection_model = AutoDetectionModel.from_pretrained(
    model_type='yolov8',
    model_path=yolov8_model_path,
    confidence_threshold=0.3,
    device="cpu",  # or 'cuda:0'
)

Executa a previsão standard

Executa a inferência padrão utilizando um caminho de imagem ou uma imagem numpy.

# With an image path
result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

# With a numpy image
result = get_prediction(read_image("demo_data/small-vehicles1.jpeg"), detection_model)

Visualiza os resultados

Exporta e visualiza as caixas delimitadoras e máscaras previstas:

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

Inferência fatiada com YOLOv8

Executa a inferência fatiada especificando as dimensões das fatias e os rácios de sobreposição:

result = get_sliced_prediction(
    "demo_data/small-vehicles1.jpeg",
    detection_model,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2
)

Tratamento de resultados de previsão

A SAHI fornece um PredictionResult que pode ser convertido em vários formatos de anotação:

# Access the object prediction list
object_prediction_list = result.object_prediction_list

# Convert to COCO annotation, COCO prediction, imantics, and fiftyone formats
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
result.to_imantics_annotations()[:3]
result.to_fiftyone_detections()[:3]

Previsão de lotes

Para previsão em lote num diretório de imagens:

predict(
    model_type="yolov8",
    model_path="path/to/yolov8n.pt",
    model_device="cpu",  # or 'cuda:0'
    model_confidence_threshold=0.4,
    source="path/to/dir",
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

E pronto! Agora estás equipado para usar YOLOv8 com SAHI para inferência padrão e fatiada.

Citações e agradecimentos

Se utilizares o SAHI no teu trabalho de investigação ou desenvolvimento, por favor cita o artigo original do SAHI e reconhece os autores:

@article{akyon2022sahi,
  title={Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection},
  author={Akyon, Fatih Cagatay and Altinuc, Sinan Onur and Temizel, Alptekin},
  journal={2022 IEEE International Conference on Image Processing (ICIP)},
  doi={10.1109/ICIP46576.2022.9897990},
  pages={966-970},
  year={2022}
}

Estendemos os nossos agradecimentos ao grupo de investigação SAHI por criar e manter este recurso inestimável para a comunidade da visão computacional. Para mais informações sobre o SAHI e os seus criadores, visita o repositório SAHI GitHub.



Criado em 2023-11-12, Atualizado em 2023-11-22
Autores: glenn-jocher (3)

Comentários