YOLOv4: la red neuronal en tiempo real más precisa en el conjunto de datos COCO de Microsoft

Darknet YOLOv4 es más rápido / más preciso que Google TensorFlow EfficientDet y FaceBook Pytorch / Detectron RetinaNet / MaskRCNN.

El mismo artículo en medio : medio
Código : github.com/AlexeyAB/darknet
Artículo : arxiv.org/abs/2004.10934


Mostraremos algunos matices de comparación y uso de redes neuronales para detectar objetos.

Nuestro objetivo era desarrollar un algoritmo de detección de objetos para usar en productos reales, y no solo hacer avanzar la ciencia. La precisión de la red neuronal YOLOv4 (608x608) es 43.5% AP / 65.7% AP50 Microsoft-COCO-testdev.

62 FPS - YOLOv4 (608x608 lote = 1) en Tesla V100 - usando Darknet-framework
400 FPS - YOLOv4 (416x416 lote = 4) en RTX 2080 Ti - usando TensorRT + tkDNN
32 FPS - YOLOv4 (416x416 lote = 1) en Jetson AGX Xavier - mediante el uso de TensorRT + tkDNN




Primero, algunos enlaces útiles.




Nuestra red neuronal YOLOv4 y nuestro propio marco Darknet DL (C / C ++ / CUDA) son mejores en velocidad FPS y precisión AP50: 95 y AP50 en los conjuntos de datos Microsoft COCO que los marcos DL y las redes neuronales: Google TensorFlow EfficientDet, FaceBook Detectron RetinaNet / MaskRCNN, PyTorch Yolov3-ASFF y muchos otros ... YOLOv4 logra una precisión de 43.5% AP / 65.7% AP50 en la prueba de Microsoft COCO a una velocidad de 62 FPS TitanV o 34 FPS RTX 2070. A diferencia de otros detectores modernos, YOLOv4 puede entrenar a cualquiera con quien tenga la tarjeta gráfica de juegos nVidia con 8-16 GB de VRAM. Ahora, no solo las grandes empresas pueden entrenar una red neuronal en cientos de GPU / TPU para usar grandes tamaños de mini lotes para lograr una mayor precisión, por lo que estamos devolviendo el control de la inteligencia artificial a los usuarios comunes, porque para YOLOv4 no se requiere un gran mini lote,puede limitarse a un tamaño de 2 a 8.

YOLOV4 es óptimo para usar en tiempo real, porque la red se encuentra en la curva de optimización de Pareto en el gráfico AP (precisión) / FPS (velocidad).



Gráficos de precisión (AP) y velocidad (FPS) de muchas redes neuronales para detectar objetos medidos en GPU TitanV / TeslaV100, TitanXP / TeslaP100, TitanX / TeslaM40 para los dos indicadores principales de precisión AP50: 95 y AP50

Para una comparación justa, tomamos datos de artículos y compare solo en la GPU con la misma arquitectura.

La mayoría de las tareas prácticas tienen los requisitos mínimos necesarios para los detectores: estos son la precisión y velocidad mínimas aceptables. Por lo general, la velocidad mínima permitida de 30 FPS (fotogramas por segundo) y superior para sistemas en tiempo real.

Como se puede ver en los gráficos, en sistemas en tiempo real con FPS 30 o más:

  • YOLOv4-608 RTX 2070 450$ (34 FPS) 43.5% AP / 65.7% AP50
  • EfficientDet-D2 TitanV 2250$ (42 FPS) 43.0% AP / 62.3% AP50
  • EfficientDet-D0 RTX 2070 450$ (34 FPS) 33.8% AP / 52.2% AP50

Aquellos. YOLOv4 requiere un equipo 5 veces más barato y más preciso que EfficientDet-D2 (Google-TensorFlow). Puede usar EfficientDet-D0 (Google-TensorFlow), entonces el costo del equipo será el mismo, pero la precisión será 10% AP más baja.
Además, algunos sistemas industriales tienen limitaciones en la disipación de calor o en el uso de un sistema de enfriamiento pasivo; en este caso, no puede usar TitanV incluso con dinero.

Cuando usamos YOLOv4 (416x416) en una GPU RTX 2080 Ti usando TensorRT + tkDNN, alcanzamos una velocidad 2 veces más rápida, y cuando usamos batch = 4 es 3x-4x veces más rápido, para una comparación honesta, no presentamos estos resultados en un artículo sobre arxiv. org:

Red neuronal YOLOv4 (416x416) FP16 (núcleos tensoriales) lote = 1 alcanza a 32 calculadora FPS nVidia Jetson AGX Xavier usando bibliotecas + tkDNN TensorRT: github.com/ceccocats/tkDNN
velocidad ligeramente más lenta da una biblioteca OpenCV-dnn compilada con CUDA: documentos .opencv.org / master / da / d9d / tutorial_dnn_yolo.html

A veces, la velocidad (FPS) de algunas redes neuronales en los artículos se indica cuando se usa un tamaño de lote alto o cuando se prueba con un software especializado (TensorRT), que optimiza la red y muestra un mayor valor de FPS. La comparación de algunas redes en TRT con otras redes sin TRT no es justa. El uso de un tamaño de lote alto aumenta el FPS, pero también aumenta la latencia (en lugar de disminuirlo) en comparación con el lote = 1. Si la red con lote = 1 muestra 40 FPS, y con lote = 32 muestra 60 FPS, el retraso será de 25 ms para lote = 1 y ~ 500 ms para lote = 32, porque solo se procesarán ~ 2 paquetes (32 imágenes cada uno) por segundo, por lo que el uso de lote = 32 no es aceptable en muchos sistemas industriales. Por lo tanto, comparamos los resultados en los gráficos solo con lote = 1 y sin usar TensorRT.

Cualquier proceso puede ser controlado por personas o por computadoras. Cuando un sistema informático actúa con un gran retraso debido a la baja velocidad y comete demasiados errores, no se le puede confiar el control completo de las acciones, en este caso la persona controla el proceso, y el sistema informático solo da pistas (este es un sistema de recomendación), la persona trabaja y solo el sistema dice dónde se cometieron los errores. Cuando el sistema funciona rápidamente y con alta precisión, dicho sistema puede controlar el proceso de forma independiente, y una persona solo lo cuida. Por lo tanto, la precisión y la velocidad del sistema son siempre importantes. Si le parece que 120 FPS para YOLOv4 416x416 es demasiado para su tarea, y es mejor tomar el algoritmo de manera más lenta y precisa, entonces lo más probable es que en tareas reales use algo más débil que el Tesla V100 de 250 vatios,por ejemplo, RTX 2060 / Jetson-Xavier 30-80 Watt, en este caso obtendrá 30 FPS en YOLOv4 416x416 y otras redes neuronales a 1-15 FPS o no comenzará en absoluto.

Características del entrenamiento de varias redes neuronales.


Debe entrenar EfficientDet con tamaño mini-lote = 128 en varias GPU Tesla V100 de 32 GB, mientras que YOLOv4 recibió capacitación en una sola GPU Tesla V100 de 32 GB con mini lote = 8 = lote / subdivisiones, y puede entrenarse en un juego regular Tarjeta gráfica GPU-VRAM de 8-16GB.
El siguiente matiz es la dificultad de entrenar una red neuronal para detectar sus propios objetos. No importa cuánto tiempo entrene otras redes en la misma GPU 1080 Ti, no obtendrá la precisión indicada en el gráfico anterior. La mayoría de las redes (EfficientDet, ASFF, ...) necesitan capacitación en 4 a 128 GPU (con un tamaño de mini lote grande usando syncBN) y es necesario entrenar cada vez de nuevo para cada resolución de red, sin cumplir ambas condiciones es imposible lograr la precisión AP o AP50 declarada por ellos.


Puede ver la dependencia de la precisión de detección de objetos en el tamaño del minibatch en otros detectores, es decir. usando 128 tarjetas de video en lugar de 8 tarjetas de video y la velocidad de aprendizaje es 10 veces más alta y la precisión final es 1.5 AP más alta - MegDet: un detector de objetos de mini lotes grandes arxiv.org/abs/1711.07240

Yolo ASFF: arxiv.org/abs/1911.09516
Siguiendo [43], presentamos una bolsa de trucos en el proceso de entrenamiento, como el algoritmo de mezcla [12], el programa de tasa de aprendizaje de coseno [26] y la técnica de normalización por lotes sincronizada [30].

EfficientDet: arxiv.org/abs/1911.09070
La normalización de lote sincronizada se agrega después de cada convolución con la descomposición de la norma de lote 0.99 y epsilon 1e-3.

Cada modelo está entrenado 300 épocas con un tamaño total de lote 128 en 32 núcleos TPUv3.

cloud.google.com/tpu/docs/types-zones#europe
v3-32 TPU type (v3) – 32 TPU v3 cores – 512 GiB Total TPU memory

Debe usar 512 GB de TPU / GPU-RAM para entrenar el modelo EfficientDet con normalización de lote sincronizada en lote = 128, mientras que mini-lote = 8 y solo 32 GB de GPU-RAM se usaron para entrenar YOLOv4. A pesar de esto, YOLOv4 es más rápido / más preciso que las redes públicas, aunque se entrena solo 1 vez con una resolución de 512x512 por 1 GPU (Tesla V100 32GB / 16GB). Al mismo tiempo, usar el tamaño de mini lote más pequeño y GPU-VRAM no conduce a una pérdida de precisión tan dramática como en otras redes neuronales:


Fuente: arxiv.org/abs/2004.10934

Para que pueda entrenar inteligencia artificial localmente en su PC, en lugar de descargar Conjunto de datos en la nube: esto garantiza la protección de sus datos personales y hace que la capacitación en inteligencia artificial esté disponible para todos.

Es suficiente entrenar nuestra red una vez con una resolución de red 512x512, y luego se puede usar con diferentes resoluciones de red en el rango: [416x416 - 512x512 - 608x608].

La mayoría de los otros modelos necesitan ser entrenados cada vez por separado para cada resolución de red, debido a esto, el entrenamiento lleva muchas más horas.

Características de la precisión de medición de algoritmos de detección de objetos


Siempre puede encontrar una imagen en la que un algoritmo funcionará mal, y otro algoritmo funcionará bien, y viceversa. Por lo tanto, para probar los algoritmos de detección, se utiliza un gran conjunto de ~ 20,000 imágenes y 80 tipos diferentes de objetos: el conjunto de datos MSCOCO test-dev.

Para que el algoritmo no solo intente recordar el hash de cada imagen y las coordenadas que contiene (sobreajuste), la precisión de la detección de objetos siempre se verifica en las imágenes y etiquetas que el algoritmo no vio durante el entrenamiento; esto garantiza que el algoritmo pueda detectar objetos en imágenes / videos que Nunca lo vi.

Para que nadie pueda cometer un error al calcular la precisión, en el dominio público solo hay imágenes de prueba test-dev en las que detecta y envía los resultados al servidor de evaluación CodaLab, en el que el programa compara sus resultados con anotaciones de prueba que no son accesibles para nadie .

El conjunto de datos MSCOCO consta de 3 partes

  1. Tutorial: 120,000 imágenes y un archivo json con las coordenadas de cada objeto
  2. Conjunto de validación: 5,000 imágenes y un archivo json con las coordenadas de cada objeto
  3. Conjunto de pruebas: 41,000 imágenes jpg sin las coordenadas de los objetos (algunas de estas imágenes se utilizan para determinar la precisión en las tareas: detección de objetos, segmentación de instancias, puntos clave, ...)

Características del desarrollo de YOLOv4


Al desarrollar YOLOv4, tuve que desarrollar tanto la red neuronal YOLOv4 como el marco Darknet en C / C ++ / CUDA. Porque en Darknet no hay diferenciación automática y ejecución automática de reglas de cadena, entonces todos los gradientes deben implementarse manualmente. Por otro lado, podemos apartarnos de la estricta adherencia a la regla de la cadena, cambiar la propagación hacia atrás e intentar cosas muy poco triviales para aumentar la estabilidad y precisión del aprendizaje.

Hallazgos adicionales al crear redes neuronales


  • No siempre la mejor red para clasificar objetos será la mejor como red troncal para la red utilizada para detectar objetos
  • El uso de pesas entrenadas con características que tienen mayor precisión en la clasificación puede afectar negativamente la precisión del detector (en algunas redes)
  • No todas las características indicadas en varios estudios mejoran la precisión de la red.
  • .
  • BFLOPS , BFLOPS
  • , receptive field , stride=2 / conv3x3, weights (filters) .

YOLOv4


La detección de objetos utilizando modelos entrenados de YOLOv4 está integrada en la biblioteca OpenCV-dnn github.com/opencv/opencv/issues/17148 para que pueda usar YOLOv4 directamente desde OpenCV sin usar el marco Darknet. La biblioteca OpenCV admite la implementación de redes neuronales en la CPU, GPU (GPU nVidia), VPU (Intel Myriad X). Más detalles: docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html Marco

OpenCV (dnn):


Marco Darknet :


tkDNN + TensorRT - Velocidad máxima de detección de objetos usando YOLOv4: TensorRT + tkDNN github.com/ceccocats/tkDNN

  • 400 FPS - YOLOv4 (416x416 lote = 4) en RTX 2080 Ti
  • 32 FPS - YOLOv4 (416x416 lote = 1) en Jetson AGX Xavier

El uso de YOLOv4 se puede ampliar para detectar Bboxes rotados en 3D o puntos clave / puntos de referencia faciales, por ejemplo:

github.com/ouyanghuiyu/darknet_face_with_landmark


All Articles