Ir al contenido

Documentos de Ultralytics: Uso de YOLO11 con SAHI para la Inferencia en Segmentos

Abrir SAHI para la inferencia en porciones en Colab

Le damos la bienvenida a la documentación de Ultralytics sobre cómo usar YOLO11 con SAHI (Inferencia Hiperasistida por Segmentación). Esta guía completa tiene como objetivo proporcionarle todo el conocimiento esencial que necesitará para implementar SAHI junto con YOLO11. Profundizaremos en qué es SAHI, por qué la inferencia segmentada es fundamental para las aplicaciones a gran escala y cómo integrar estas funcionalidades con YOLO11 para mejorar el rendimiento de la detección de objetos.

Descripción general de la inferencia segmentada de SAHI

Introducción a SAHI

SAHI (Slicing Aided Hyper Inference) es una biblioteca innovadora diseñada para optimizar los algoritmos de detección de objetos para imágenes a gran escala y de alta resolución. Su funcionalidad principal reside en la partición de imágenes en segmentos manejables, la ejecución de la detección de objetos en cada segmento y, a continuación, la unión de los resultados. SAHI es compatible con una gama de modelos de detección de objetos, incluyendo la serie YOLO, ofreciendo así flexibilidad al tiempo que garantiza el uso optimizado de los recursos computacionales.



Ver: Inferencia con SAHI (Inferencia Hiperasistida por Segmentación) usando Ultralytics YOLO11

Características principales de SAHI

  • Integración perfecta: SAHI se integra sin esfuerzo con los modelos YOLO, lo que significa que puede comenzar a segmentar y detectar sin una gran modificación del 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 la detección empleando algoritmos inteligentes para fusionar cuadros de detección superpuestos durante el proceso de unión.

¿Qué es la inferencia segmentada?

La Inferencia Dividida se refiere a la práctica de subdividir una imagen grande o de alta resolución en segmentos más pequeños (divisiones), realizar la detección de objetos en estas divisiones y luego recompilar las divisiones para reconstruir las ubicaciones de los objetos en la imagen original. Esta técnica es invaluable en escenarios donde los recursos computacionales son limitados o cuando se trabaja con imágenes de resolución extremadamente alta que de otro modo podrían generar problemas de memoria.

Ventajas de la inferencia segmentada

  • Carga Computacional Reducida: Los fragmentos de imagen más pequeños se procesan más rápido y consumen menos memoria, lo que permite un funcionamiento más fluido en hardware de gama baja.

  • Calidad de Detección Preservada: Dado que cada segmento se trata de forma independiente, no hay reducción en la calidad de la detección de objetos, siempre que los segmentos sean lo suficientemente grandes como para capturar los objetos de interés.

  • Escalabilidad mejorada: La técnica permite que la detección de objetos se escale más fácilmente en diferentes tamaños y resoluciones de imágenes, lo que la hace ideal para una amplia gama de aplicaciones, desde imágenes de satélite hasta diagnósticos médicos.

YOLO11 sin SAHI YOLO11 con SAHI
YOLO11 sin SAHI YOLO11 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

Aquí se explica 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.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_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

Puede instanciar un modelo YOLO11 para la detección de objetos de esta manera:

from sahi import AutoDetectionModel

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

Realizar predicción estándar

Realice una inferencia estándar utilizando una ruta de imagen o una imagen numpy.

from sahi.predict import get_prediction
from sahi.utils.cv import read_image

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

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

Visualizar resultados

Exporte y visualice los cuadros delimitadores y las máscaras predichas:

from IPython.display import Image

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

Inferencia Dividida con YOLO11

Realice una inferencia segmentada especificando las dimensiones del segmento y las relaciones de superposición:

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 objeto, que se puede convertir a 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 Lote

Para la predicción por lotes en un directorio de imágenes:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    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,
)

¡Eso es todo! Ahora estás equipado para usar YOLO11 con SAHI tanto para la inferencia estándar como para la segmentada.

Citas y agradecimientos

Si utiliza SAHI en su trabajo de investigación o desarrollo, cite el artículo original de SAHI y reconozca 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 valioso recurso para la comunidad de visión artificial. Para obtener más información sobre SAHI y sus creadores, visite el repositorio de SAHI en GitHub.

Preguntas frecuentes

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

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

pip install -U ultralytics sahi

Luego, descargue un modelo YOLO11 e imágenes de prueba:

from sahi.utils.file import download_from_url
from sahi.utils.ultralytics import download_yolo11n_model

# Download YOLO11 model
model_path = "models/yolo11n.pt"
download_yolo11n_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 Segmentada.

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

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

  • Carga Computacional Reducida: Los fragmentos más pequeños se procesan más rápido 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 cuadros superpuestos, preservando la calidad de la detección.
  • Escalabilidad mejorada: Al escalar las tareas de detección de objetos en diferentes tamaños y resoluciones de imagen, SAHI se vuelve ideal para diversas aplicaciones, como el análisis de imágenes de satélite y los diagnósticos médicos.

Obtenga más información sobre los beneficios de la inferencia segmentada en nuestra documentación.

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

Sí, puedes visualizar los resultados de la predicción cuando usas YOLO11 con SAHI. Aquí te mostramos 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 notebook o aplicación. Para obtener una guía detallada, consulta la sección Standard Inference section.

¿Qué características ofrece SAHI para mejorar la detección de objetos YOLO11?

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

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

Para una comprensión más profunda, lea sobre las características clave de SAHI.

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

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

  1. Instale las bibliotecas necesarias: Asegúrese de tener las últimas versiones de ultralytics y sahi.
  2. Configurar la Inferencia en Segmentos: Determine las dimensiones óptimas de los segmentos y las relaciones de superposición para su proyecto específico.
  3. Ejecutar predicciones por lotes: Utilice las capacidades de SAHI para realizar predicciones por lotes en un directorio de imágenes, lo que mejora la eficiencia.

Ejemplo para la predicción por lotes:

from sahi.predict import predict

predict(
    model_type="ultralytics",
    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 obtener pasos más detallados, visita nuestra sección sobre Predicción por Lotes.



📅 Creado hace 1 año ✏️ Actualizado hace 23 días

Comentarios