Saltar al contenido

Ultralytics Documentos: Utilizar YOLOv8 con SAHI para la inferencia en rodajas

Bienvenido a la documentaci贸n de Ultralytics sobre c贸mo utilizar YOLOv8 con SAHI (Slicing Aided Hyper Inference). Esta completa gu铆a pretende proporcionarte todos los conocimientos esenciales que necesitar谩s para aplicar SAHI junto con YOLOv8. Profundizaremos en qu茅 es SAHI, por qu茅 la inferencia en rodajas es fundamental para las aplicaciones a gran escala, y c贸mo integrar estas funcionalidades con YOLOv8 para mejorar el rendimiento de la detecci贸n de objetos.

Visi贸n general de la inferencia rebanada SAHI

Introducci贸n a SAHI

SAHI (Slicing Aided Hyper Inference) es una innovadora biblioteca dise帽ada para optimizar los algoritmos de detecci贸n de objetos en im谩genes a gran escala y de alta resoluci贸n. Su funci贸n principal consiste en dividir las im谩genes en fragmentos manejables, ejecutar la detecci贸n de objetos en cada fragmento y, a continuaci贸n, unir los resultados. SAHI es compatible con una serie de modelos de detecci贸n de objetos, incluida la serie YOLO , por lo que ofrece flexibilidad al tiempo que garantiza un uso optimizado de los recursos inform谩ticos.

Caracter铆sticas principales de SAHI

  • Integraci贸n sin fisuras: SAHI se integra sin esfuerzo con los modelos de YOLO , lo que significa que puedes empezar a cortar y detectar sin necesidad de modificar mucho el c贸digo.
  • Eficiencia de recursos: Al dividir las im谩genes grandes en partes m谩s peque帽as, SAHI optimiza el uso de la memoria, lo que te permite ejecutar una detecci贸n de alta calidad en hardware con recursos limitados.
  • Alta precisi贸n: SAHI mantiene la precisi贸n de detecci贸n empleando algoritmos inteligentes para fusionar los cuadros de detecci贸n superpuestos durante el proceso de cosido.

驴Qu茅 es la inferencia en rodajas?

La Inferencia por Cortes se refiere a la pr谩ctica de subdividir una imagen grande o de alta resoluci贸n en segmentos m谩s peque帽os (cortes), realizar la detecci贸n de objetos en estos cortes y, a continuaci贸n, recompilar los cortes para reconstruir las ubicaciones de los objetos en la imagen original. Esta t茅cnica es inestimable en situaciones en las que los recursos inform谩ticos son limitados o cuando se trabaja con im谩genes de muy alta resoluci贸n que, de otro modo, podr铆an provocar problemas de memoria.

Ventajas de la inferencia en rodajas

  • Carga computacional reducida: Los cortes de imagen m谩s peque帽os son m谩s r谩pidos de procesar y consumen menos memoria, lo que permite un funcionamiento m谩s fluido en hardware de gama baja.

  • Calidad de detecci贸n preservada: Como cada corte se trata de forma independiente, no se reduce la calidad de la detecci贸n de objetos, siempre que los cortes sean lo bastante grandes para captar los objetos de inter茅s.

  • Escalabilidad mejorada: La t茅cnica permite escalar m谩s f谩cilmente la detecci贸n de objetos en diferentes tama帽os y resoluciones de im谩genes, lo que la hace ideal para una amplia gama de aplicaciones, desde las im谩genes de sat茅lite hasta el diagn贸stico m茅dico.

YOLOv8 sin SAHI YOLOv8 con SAHI
YOLOv8 sin SAHI YOLOv8 con SAHI

Instalaci贸n y preparaci贸n

Instalaci贸n

Para empezar, instala las 煤ltimas versiones de SAHI y Ultralytics:

pip install -U ultralytics sahi

Importar m贸dulos y descargar recursos

A continuaci贸n te explicamos c贸mo importar los m贸dulos necesarios y descargar un modelo de YOLOv8 y algunas im谩genes de prueba:

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

Inferencia est谩ndar con YOLOv8

Instanciar el modelo

Puedes instanciar un modelo YOLOv8 para la detecci贸n de objetos de esta forma:

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

Realiza una predicci贸n est谩ndar

Realiza una inferencia est谩ndar utilizando una ruta de imagen o una imagen 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 los resultados

Exporta y visualiza los recuadros delimitadores y las m谩scaras predichas:

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

Inferencia en rodajas con YOLOv8

Realiza la inferencia en rodajas especificando las dimensiones de las rodajas y las relaciones de solapamiento:

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
)

Manejo de los resultados de la predicci贸n

SAHI proporciona un PredictionResult que puede convertirse en varios formatos de anotaci贸n:

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

Predicci贸n por lotes

Para la predicci贸n por lotes en un directorio de im谩genes:

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

Ya est谩. Ahora est谩s equipado para utilizar YOLOv8 con SAHI tanto para la inferencia est谩ndar como para la rebanada.

Citas y agradecimientos

Si utilizas SAHI en tu trabajo de investigaci贸n o desarrollo, cita el documento original de SAHI y da las gracias a los 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}
}

Extendemos nuestro agradecimiento al grupo de investigaci贸n SAHI por crear y mantener este recurso inestimable para la comunidad de visi贸n por ordenador. Para m谩s informaci贸n sobre SAHI y sus creadores, visita el repositorio SAHI GitHub.



Creado 2023-11-12, Actualizado 2023-11-22
Autores: glenn-jocher (3)

Comentarios