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 facilmente com os 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 de 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