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.



Observa: Inferência com SAHI (Slicing Aided Hyper Inference) utilizando Ultralytics YOLOv8

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.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

# 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:

from sahi import AutoDetectionModel

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.

from sahi.predict import get_prediction

# 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:

from sahi.predict import get_sliced_prediction

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:

from sahi.predict import predict

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.

FAQ

Como posso integrar o YOLOv8 com o SAHI para a inferência fatiada na deteção de objectos?

A integração de Ultralytics YOLOv8 com SAHI (Slicing Aided Hyper Inference) para inferência fatiada optimiza as suas tarefas de deteção de objectos em imagens de alta resolução, dividindo-as em fatias geríveis. Esta abordagem melhora a utilização da memória e garante uma elevada precisão de deteção. Para começar, tens de instalar as bibliotecas ultralytics e sahi:

pip install -U ultralytics sahi

Em seguida, transfere um modelo YOLOv8 e testa as imagens:

from sahi.utils.file import download_from_url
from sahi.utils.yolov8 import download_yolov8s_model

# 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",
)

Para obter instruções mais detalhadas, consulta o nosso guia Sliced Inference.

Por que razão devo utilizar o SAHI com YOLOv8 para a deteção de objectos em imagens de grandes dimensões?

A utilização do SAHI com Ultralytics YOLOv8 para a deteção de objectos em imagens de grandes dimensões oferece várias vantagens:

  • Reduz a carga computacional: As fatias mais pequenas são mais rápidas de processar e consomem menos memória, tornando viável a execução de detecções de alta qualidade em hardware com recursos limitados.
  • Mantém a precisão da deteção: O SAHI utiliza algoritmos inteligentes para fundir caixas sobrepostas, preservando a qualidade da deteção.
  • Escalabilidade melhorada: Ao escalar as tarefas de deteção de objectos em diferentes tamanhos e resoluções de imagem, o SAHI torna-se ideal para várias aplicações, como a análise de imagens de satélite e diagnósticos médicos.

Sabe mais sobre as vantagens da inferência cortada na nossa documentação.

Posso visualizar os resultados da previsão quando utilizo YOLOv8 com o SAHI?

Sim, podes visualizar os resultados da previsão quando utilizas YOLOv8 com o SAHI. Vê aqui como podes exportar e visualizar os resultados:

result.export_visuals(export_dir="demo_data/")
from IPython.display import Image

Image("demo_data/prediction_visual.png")

Este comando guarda as previsões visualizadas no diretório especificado e pode depois carregar a imagem para a visualizar no seu bloco de notas ou aplicação. Para obter um guia detalhado, consulta a secção Inferência padrão.

Que funcionalidades oferece o SAHI para melhorar a deteção de objectos YOLOv8 ?

SAHI (Slicing Aided Hyper Inference) oferece várias funcionalidades que complementam Ultralytics YOLOv8 para a deteção de objectos:

  • Integração perfeita: O SAHI integra-se facilmente com os modelos YOLO , exigindo ajustes mínimos no código.
  • Eficiência de recursos: Divide imagens grandes em fatias mais pequenas, o que optimiza a utilização da memória e a velocidade.
  • Elevada precisão: Ao fundir eficazmente as caixas de deteção sobrepostas durante o processo de costura, o SAHI mantém uma elevada precisão de deteção.

Para uma compreensão mais aprofundada, lê sobre as principais características do SAHI.

Como posso lidar com projectos de inferência em grande escala utilizando YOLOv8 e SAHI?

Para lidar com projectos de inferência em grande escala utilizando YOLOv8 e SAHI, segue estas boas práticas:

  1. Instala as bibliotecas necessárias: Certifica-te de que tens as versões mais recentes de ultralytics e sahi.
  2. Configura a inferência fatiada: Determina as dimensões ideais das fatias e os rácios de sobreposição para o teu projeto específico.
  3. Executa previsões em lote: Utiliza as capacidades do SAHI para realizar previsões em lote num diretório de imagens, o que melhora a eficiência.

Exemplo de previsão de lotes:

from sahi.predict import predict

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,
)

Para obteres passos mais detalhados, visita a nossa secção sobre Previsão de lotes.



Criado em 2023-11-12, Atualizado em 2024-07-05
Autores: glenn-jocher (7), RizwanMunawar (1)

Comentários