Red de conocimiento informático - Problemas con los teléfonos móviles - YOLO puede detectar múltiples imágenes y guardar información de etiquetas

YOLO puede detectar múltiples imágenes y guardar información de etiquetas

YOLO es un método de detección de objetivos en tiempo real de un extremo a otro basado en el aprendizaje profundo. Hasta ahora, existen 4 versiones: YOLOv1, YOLOv2, YOLO9000 y YOLOv3. La red YOLO es implementada por darknet, un marco de red neuronal convolucional escrito por el autor en lenguajes C y CUDA. Actualmente, los marcos de código abierto como tensorflow y pytorch también se reimprimen en github. Este artículo se basa principalmente en modificaciones en la darknet. código fuente para implementar Detectar la imagen y guardar la imagen y la información de la etiqueta del resultado de la detección.

La versión modificada del código fuente se ha subido a github:

Hay dos formas para que YOLO detecte imágenes

El comando que no especifica el la ruta de salida está en el directorio darknet/ Genere predicciones.jpg si especifica la ruta de salida, solo necesita ingresar el prefijo y el resultado proporcionará un sufijo .jpg.

De hecho, las pruebas de una sola imagen también se pueden completar de la siguiente manera general:

Si el comando general anterior no especifica una ruta de salida, se pueden implementar pruebas de múltiples imágenes. El autor escribe que la prueba de múltiples imágenes consiste en probar las imágenes una por una a través de la ruta de entrada después de cargar el modelo una vez, lo que no parece muy práctico. Generalmente, queremos probar todas las imágenes en una carpeta y guardar la información de su etiqueta. Esto debe lograrse modificando el código fuente. Los archivos principales que deben modificarse son: include/darknet.h src/image.c ejemplos/detector.c ejemplos/darknet.c

La entrada a toda la detección es: ejemplos/darknet.c Su función principal es la de Determinar los parámetros para seleccionar la función adecuada. Para el parámetro de detección, saltará directamente a la función test_detector en detector.c. La función test_detector se define de la siguiente manera:

En ln437 en darknet.c, aquí char *filename = (argc gt; 4) ? argv[4]: 0; 4, el valor predeterminado es 5. El primer parámetro es la ruta del nombre del archivo para detectar imágenes. Obviamente, no podremos detectar las imágenes en la carpeta, por lo que debemos agregar un identificador de entrada -entrada al nombre del archivo, para que podamos agregar. los parámetros idir de la ruta de entrada y odir de la ruta de salida más adelante (la ruta de salida aquí se define como la ruta de la imagen y la etiqueta).

detector.c modifica principalmente la función test_detector, en la que la función draw_detections_person se modifica a partir de la función draw_detections. La función draw_detections se define en src/image.c y se utiliza para dibujar marcos para cada imagen. Aquí solo necesito información de peatones, por lo que para la función draw_detections_person, se necesita información de la ruta de la imagen para generar la ruta de la carpeta. Para una sola imagen, la información de la ruta de la imagen es el nombre del archivo. Para varias imágenes, la información de la ruta de la imagen es la carpeta de entrada más los nombres de las imágenes atravesadas en la carpeta, por lo que la función test_detector modificada necesita agregar dos parámetros, idir y odir.

image.c modifica principalmente la función draw_detections_person, que se utiliza para encuadrar imágenes y guardar información de etiquetas.

Agregue la definición de función draw_detections_person:

Para una sola imagen, puede usar el siguiente comando:

Para varias imágenes en una carpeta, puede usar lo siguiente comando:

Por supuesto, en el directorio de resultados, las carpetas de imágenes y etiquetas deben crearse con anticipación.