Estás leyendo la publicación: Detección de objetos pequeños mediante Slicing Aided Hyper Inference (SAHI)
En las aplicaciones de vigilancia, la detección de elementos diminutos y objetos que están lejos en la escena es prácticamente muy difícil. Debido a que estas cosas están representadas por un número limitado de píxeles en la imagen, los detectores tradicionales tienen dificultades para detectarlas. Entonces, en este artículo, veremos cómo los modelos SOTA actuales no reconocen objetos en el otro extremo, así como una estrategia presentada por Fatih Akyon et al. para abordar este problema llamado Slicing Aided Hyper Inference (SAHI). A continuación se enumeran los puntos principales que se discutirán en este artículo.
Tabla de contenido
- El problema de la detección de objetos pequeños
- Cómo SAHI ayuda a detectar objetos pequeños
- Implementando el método
Comencemos la discusión entendiendo el problema de la detección de objetos pequeños.
El problema de la detección de objetos pequeños
¿Qué es la detección de objetos?
La detección de objetos es una tarea que implica delimitar cuadros y clasificarlos en categorías para ubicar todas las posiciones de los objetos de interés en una entrada. Se han propuesto varias formas de lograr este objetivo, que van desde metodologías tradicionales hasta alternativas basadas en el aprendizaje profundo.
¿Cuáles son los 2 enfoques para la detección de objetos?
Los enfoques de detección de objetos se dividen en dos categorías: enfoques de dos etapas basados en algoritmos de propuesta de región y redes unificadas y en tiempo real o enfoques de una etapa basados en regresión o clasificación.
La adopción de arquitecturas de aprendizaje profundo en este sector ha resultado en enfoques muy precisos como Faster R-CNN y RetinaNet, que se han refinado aún más como Cascade R-CNN, VarifocalNet y variantes. Todos estos nuevos detectores están entrenados y validados en conjuntos de datos conocidos como ImageNet, Pascal VOC12 y MS COCO.
Estos conjuntos de datos generalmente consisten en fotos de baja resolución (640 480 píxeles) con objetos enormes y una alta cobertura de píxeles (en promedio, el 60 por ciento de la altura de la imagen). Si bien los modelos entrenados funcionan bien con ese tipo de datos de entrada, muestran una precisión mucho menor en tareas de detección de elementos pequeños en fotografías de alta resolución capturadas por cámaras de vigilancia y drones de alta gama.
La detección de objetos pequeños es, por lo tanto, una tarea difícil en la visión artificial porque, además de las pequeñas representaciones de objetos, la diversidad de imágenes de entrada dificulta la tarea. Por ejemplo, una imagen puede tener diferentes resoluciones; si la resolución es baja, el detector puede tener dificultades para detectar objetos pequeños.
Cómo SAHI ayuda a detectar objetos pequeños
Para abordar la dificultad de detección de objetos pequeños, Fatih Akyon et al. presentó Slicing Aided Hyper Inference (SAHI), una solución de código abierto que proporciona una inferencia genérica asistida por corte y un proceso de ajuste fino para el reconocimiento de objetos pequeños. Durante las etapas de ajuste fino e inferencia, se utiliza una arquitectura basada en cortes.
Dividir las fotos de entrada en porciones superpuestas da como resultado regiones de píxeles más pequeñas en comparación con las imágenes alimentadas a la red. La técnica propuesta es genérica en el sentido de que se puede utilizar en cualquier detector de objetos existente sin necesidad de ajustes finos. La estrategia sugerida se probó utilizando los modelos Detectron2, MMDetection y YOLOv5.
Como se discutió anteriormente, los modelos entrenados previamente con estos conjuntos de datos brindan un rendimiento de detección muy exitoso para entradas similares. Por otro lado, producen una precisión significativamente menor en tareas de detección de objetos pequeños en imágenes de alta resolución generadas por cámaras de vigilancia y drones de alta gama. Para abordar este problema, el marco aumenta el conjunto de datos extrayendo parches del conjunto de datos de ajuste fino de la imagen.
Cada imagen se corta en parches superpuestos de diferentes dimensiones que se eligen dentro de rangos predefinidos conocidos como hiperparámetros. Luego, durante el ajuste fino, los parches se redimensionan manteniendo la relación de aspecto, de modo que el ancho de la imagen esté entre 800 y 1333 píxeles, lo que da como resultado imágenes aumentadas con tamaños de objetos relativos más grandes que la imagen original. Estas imágenes, junto con las imágenes originales, se utilizan durante el ajuste fino.
Durante el paso de inferencia, también se utiliza el método de corte. En este caso, la imagen de consulta original se corta en varios parches superpuestos. Luego, los parches se redimensionan mientras se mantiene la relación de aspecto. Después de eso, cada parche superpuesto recibe su propio pase de detección de objetos. Para detectar objetos más grandes, se puede usar una inferencia completa (FI) opcional que utiliza la imagen original. Finalmente, los resultados de predicción superpuestos y, si corresponde, los resultados de FI se vuelven a fusionar en su tamaño original.
Ahora veremos prácticamente cómo puede marcar la diferencia.
Implementando el método
En esta sección, veremos cómo el corte y la inferencia autoayuda pueden detectar el objeto pequeño de las imágenes. Compararemos la predicción original dada por YOLOv5 y SAHI + YOLOv5.
Ahora, comencemos con la instalación e importación de las dependencias.
# instalar los últimos SAHI y YOLOv5 !pip install -U torch sahi yolov5 # importar las funciones requeridas, las clases de sahi.utils.yolov5 de IPython.display imagen de importación
Ahora cargaremos rápidamente el modelo YOLO estándar y lo iniciaremos con el método Yolov5DetectionModel.
# descargar modelo YOLOV5S6 yolov5_model_path=”yolov5s6.pt” download_yolov5s6_model(destination_path=yolov5_model_path) # inferencia con YOLOv5 solo modelo_detección = Yolov5DetectionModel(model_path=yolov5_model_path, trust_threshold=0.3, device=”cuda:0″)
Vamos a obtener y visualizar las predicciones. Aquí utilizamos el método get_prediction del marco que toma una imagen y un modelo de detección. Luego exportamos nuestro resultado al directorio de trabajo actual y lo visualizamos usando PIL.
resultado = get_prediction(read_image(“/content/mumbai-bridge-1.jpg”), modelo_detección) # exportar el resultado del directorio de trabajo actual result.export_visuals(export_dir=”/”) # mostrar el resultado que se guardó como imagen de predicción_visual.png (“predicción_visual.png”)
Como podemos ver en el resultado, los autos en el otro extremo del paso elevado no han sido capturados por el YOLO estándar. Ahora veamos cómo la conexión de SAHI mejorará el resultado general. Inferimos el método propuesto.
resultado = get_sliced_prediction( read_image(“/content/mumbai-bridge-1.jpg”), modelo_detección, altura_corte = 256, ancho_corte = 256, relación_altura_superposición = 0,2, relación_ancho_superposición = 0,2)
Y aqui esta el resultado.
¿No es como magia?
Ultimas palabras
A lo largo de este artículo, hemos discutido la detección de objetos. De manera más detallada, discutimos cómo los modelos SOTA estándar como YOLO, R-CNN rápido, etc. fallan cuando hay interés en detectar objetos pequeños que suelen ser problemas para las imágenes tomadas por drones, etc. Para superar esto, hemos discutido El resultado de este método es un tipo de método de complemento llamado SAHI que mejora la detección de una imagen determinada principalmente cortando e iterando la imagen y más.