Saltar al contenido

Ultralytics Documentos: Utilización de YOLO11 con SAHI para la inferencia fragmentada

Welcome to the Ultralytics documentation on how to use YOLO11 with SAHI (Slicing Aided Hyper Inference). This comprehensive guide aims to furnish you with all the essential knowledge you'll need to implement SAHI alongside YOLO11. We'll deep-dive into what SAHI is, why sliced inference is critical for large-scale applications, and how to integrate these functionalities with YOLO11 for enhanced object detection performance.

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.



Observa: Inference with SAHI (Slicing Aided Hyper Inference) using Ultralytics YOLO11

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.
  • High Accuracy: SAHI maintains the detection accuracy by employing smart algorithms to merge overlapping detection boxes during the stitching process.

¿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.

YOLO11 without SAHIYOLO11 with SAHI
YOLO11 without SAHIYOLO11 with 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 YOLO11 y algunas imágenes de prueba:

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

# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_model(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 YOLO11

Instanciar el modelo

Puedes instanciar un modelo YOLO11 para la detección de objetos de esta 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'
)

Realiza una predicción estándar

Realiza una inferencia estándar utilizando una ruta de imagen o una imagen 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 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 YOLO11

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

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

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:

from sahi.predict import predict

predict(
    model_type="yolov8",
    model_path="path/to/yolo11n.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 ya estás preparado para utilizar YOLO11 con SAHI tanto para la inferencia estándar como para la inferencia en rodajas.

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}
}

We extend our thanks to the SAHI research group for creating and maintaining this invaluable resource for the computer vision community. For more information about SAHI and its creators, visit the SAHI GitHub repository.

PREGUNTAS FRECUENTES

¿Cómo puedo integrar YOLO11 con SAHI para la inferencia rebanada en la detección de objetos?

La integración de Ultralytics YOLO11 con SAHI (Slicing Aided Hyper Inference) para la inferencia en rodajas optimiza tus tareas de detección de objetos en imágenes de alta resolución dividiéndolas en rodajas manejables. Este enfoque mejora el uso de la memoria y garantiza una gran precisión en la detección. Para empezar, necesitas instalar las bibliotecas ultralytics y sahi:

pip install -U ultralytics sahi

A continuación, descarga un modelo YOLO11 e imágenes de prueba:

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

# Download YOLO11 model
model_path = "models/yolo11s.pt"
download_yolov8s_model(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 obtener instrucciones más detalladas, consulta nuestra guía de Inferencia en Rebanadas.

¿Por qué debería utilizar SAHI con YOLO11 para la detección de objetos en imágenes grandes?

Utilizar SAHI con Ultralytics YOLO11 para la detección de objetos en imágenes grandes ofrece varias ventajas:

  • Carga computacional reducida: Los trozos más pequeños se procesan más rápidamente y consumen menos memoria, lo que hace factible ejecutar detecciones de alta calidad en hardware con recursos limitados.
  • Precisión de detección mantenida: SAHI utiliza algoritmos inteligentes para fusionar las cajas superpuestas, preservando la calidad de la detección.
  • Escalabilidad mejorada: Al escalar las tareas de detección de objetos en distintos tamaños y resoluciones de imagen, SAHI resulta ideal para diversas aplicaciones, como el análisis de imágenes de satélite y el diagnóstico médico.

Obtén más información sobre las ventajas de la inferencia rebanada en nuestra documentación.

¿Puedo visualizar los resultados de la predicción cuando utilizo YOLO11 con SAHI?

Sí, puedes visualizar los resultados de las predicciones cuando utilices YOLO11 con SAHI. Aquí te explicamos cómo puedes exportar y visualizar los resultados:

from IPython.display import Image

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

Este comando guardará las predicciones visualizadas en el directorio especificado y luego podrás cargar la imagen para verla en tu cuaderno o aplicación. Para una guía detallada, consulta la sección Inferencia estándar.

¿Qué funciones ofrece SAHI para mejorar la detección de objetos de YOLO11?

SAHI (Slicing Aided Hyper Inference) ofrece varias funciones que complementan a Ultralytics YOLO11 para la detección de objetos:

  • Integración perfecta: SAHI se integra fácilmente con los modelos de YOLO , requiriendo mínimos ajustes de código.
  • Eficiencia de recursos: Particiona las imágenes grandes en trozos más pequeños, lo que optimiza el uso de memoria y la velocidad.
  • Alta precisión: Al fusionar eficazmente los cuadros de detección superpuestos durante el proceso de cosido, SAHI mantiene una alta precisión de detección.

Para comprenderlo mejor, lee sobre las características clave de SAHI.

¿Cómo puedo gestionar proyectos de inferencia a gran escala utilizando YOLO11 y SAHI?

Para gestionar proyectos de inferencia a gran escala utilizando YOLO11 y SAHI, sigue estas buenas prácticas:

  1. Instala las bibliotecas necesarias: Asegúrate de que tienes las últimas versiones de ultralytics y sahi.
  2. Configura la inferencia por cortes: Determina las dimensiones de corte y las relaciones de solapamiento óptimas para tu proyecto específico.
  3. Ejecutar predicciones por lotes: Utiliza las capacidades de SAHI para realizar predicciones por lotes en un directorio de imágenes, lo que mejora la eficacia.

Ejemplo de predicción por lotes:

from sahi.predict import predict

predict(
    model_type="yolov8",
    model_path="path/to/yolo11n.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 ver pasos más detallados, visita nuestra sección sobre Predicción por lotes.

📅 C reado hace 1 año ✏️ Actualizado hace 1 mes

Comentarios