Marco de detección de objetos Darknet y YOLO
Logotipos de !darknet y hank.ai
Darknet es un marco de red neuronal de código abierto escrito en C, C++ y CUDA. Proporciona una base poderosa para desarrollar e implementar modelos de detección de objetos.
YOLO (Solo miras una vez) es un sistema de detección de objetos en tiempo real de última generación construido sobre el marco Darknet. Destaca por su velocidad y precisión, lo que lo convierte en una opción popular para diversas aplicaciones.
¿Quiere obtener más información sobre cómo Hank.ai contribuye a la comunidad Darknet/YOLO?
Explora el sitio web oficial de Darknet/YOLO:
Sumérjase en las preguntas frecuentes completas de Darknet/YOLO:
Únase a la vibrante comunidad Darknet/YOLO Discord:
Papeles
YOLOv7: Enlace al artículo
Scaled-YOLOv4: enlace al artículo
YOLOv4: Enlace al artículo
YOLOv3: Enlace al artículo
Información general
El marco Darknet/YOLO sigue siendo líder en detección de objetos y ofrece constantemente ventajas de velocidad y precisión sobre otros marcos y versiones de YOLO.
Características clave:
1. Código abierto y gratuito: este marco es completamente gratuito y de código abierto, lo que le permite incorporarlo perfectamente a sus proyectos sin restricciones de licencia.
2. Alto rendimiento: Darknet V3 ("Jazz"), lanzado en octubre de 2024, logra un rendimiento impresionante, alcanzando hasta 1000 FPS para el conjunto de datos LEGO utilizando una GPU NVIDIA RTX 3090.
3. Implementación versátil: Darknet/YOLO es compatible con varios dispositivos, desde Raspberry Pi y servidores en la nube hasta computadoras de escritorio y equipos de capacitación de alta gama.
4. Soporte multiplataforma: se sabe que se ejecuta perfectamente en los sistemas operativos Linux, Windows y Mac.
¿Necesitas ayuda o quieres hablar sobre Darknet/YOLO? Únase a la vibrante comunidad de Discord:
Versión de la red oscura
La evolución de Darknet se puede rastrear a través de sus versiones:
1. Versión 0.x (2013-2017): la herramienta Darknet original desarrollada por Joseph Redmon carecía de un número de versión formal.
2. Versión 1.x (2017-2021): Esta versión fue mantenida por Alexey Bochkovskiy y también carecía de número de versión.
3. Versión 2.x "OAK" (2023): El repositorio Darknet, patrocinado por Hank.ai y mantenido por Stéphane Charette, introdujo un comando de versión. Esta versión trajo mejoras significativas, que incluyen:
* Pasos de compilación unificados usando CMake para Windows y Linux.
* Conversión al compilador C++.
* Visualización mejorada de chart.png durante el entrenamiento.
* Corrección de errores y optimizaciones de rendimiento para la eficiencia del entrenamiento.
4. Versión 2.1: la rama final del código base v2.
5. Versión 3.x "JAZZ" (octubre de 2024): esta última versión introdujo:
* Optimizaciones de rendimiento tanto para entrenamiento como para inferencia.
* Una API C heredada modificada que requiere adaptaciones menores para aplicaciones que utilizan la API Darknet original.
* Una nueva API Darknet V3 C y C++.
* Nuevas aplicaciones y código de muestra en el directorio src-examples.
Por compatibilidad con versiones anteriores, aún se puede acceder a la rama v2. Si necesita utilizar comandos específicos de versiones anteriores, háganoslo saber y exploraremos cómo volver a agregarlos.
Pesas preentrenadas MSCOCO
Varias versiones populares de YOLO vienen previamente entrenadas en el conjunto de datos MSCOCO, lo que ofrece un punto de partida conveniente para experimentar con el marco. MSCOCO contiene 80 clases, enumeradas en el archivo cfg/coco.names.
Pesos previamente entrenados disponibles:
YOLOv2 (noviembre de 2016):
* yolov2-tiny.pesos
* yolov2-pesos.completos
YOLOv3 (mayo de 2018):
* yolov3-tiny.pesos
* yolov3-pesos completos
YOLOv4 (mayo de 2020):
* yolov4-tiny.pesos
* yolov4-pesos completos
YOLOv7 (agosto de 2022):
* yolov7-tiny.pesos
* yolov7-pesos.completos
Recuerde: si bien estos pesos previamente entrenados son útiles para las demostraciones, es esencial entrenar sus propias redes para obtener soluciones personalizadas. MSCOCO se utiliza principalmente para verificar que su configuración esté funcionando correctamente.
Comandos de ejemplo que utilizan pesos previamente entrenados:
`golpear
Mostrar imágenes comentadas
wget --no-clobber https://github.com/hank-ai/darknet/releases/download/v2.0/yolov4-tiny.weights
darknet02displayannotatedimages coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
Mostrar vídeos con anotaciones
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
Utilice la CLI de DarkHelp
DarkHelp coco.nombres yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.nombres yolov4-tiny.cfg yolov4-tiny.pesos video1.avi
`
Edificio
Darknet aprovecha CMake para optimizar el proceso de compilación tanto para Windows como para Linux. Requiere C++ 17 o un compilador más nuevo, junto con OpenCV.
Las instrucciones de compilación ahora están unificadas, reemplazando métodos más antiguos y complejos.
Nota: Si tiene problemas con tutoriales antiguos o pasos de compilación que no se alinean con esta guía, consulte las instrucciones más recientes que se proporcionan aquí.
Se anima a los desarrolladores de software a visitar https://darknetcv.ai/ para obtener información sobre el funcionamiento interno del marco Darknet/YOLO.
colaboración de google
Las instrucciones de Google Colab reflejan las instrucciones de Linux.
Explore los cuadernos en el subdirectorio colab o siga las instrucciones de Linux a continuación.
Método CMake de Linux
1. Instale los paquetes necesarios:
`golpear
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Clonar el repositorio Darknet:
`golpear
mkdir ~/src
cd ~/fuente
clon de git https://github.com/hank-ai/darknet
cd red oscura
compilación mkdir
compilación de cd
`
3. Configurar CMake:
`golpear
cmake -DCMAKEBUILDTYPE=Lanzar ..
`
4. Construya la red oscura:
`golpear
hacer -j4
`
5. Paquete Darknet:
`golpear
paquete
sudo dpkg -i darknet-VERSIÓN.deb
`
Opcional: CUDA o CUDA+cuDNN para aceleración de GPU
Visite https://developer.nvidia.com/cuda-downloads para descargar e instalar CUDA.
Visite https://developer.nvidia.com/rdp/cudnn-download o https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview para descargar e instale cuDNN.
Después de instalar CUDA, asegúrese de que nvcc y nvidia-smi sean accesibles. Es posible que necesites ajustar tu variable PATH.
Si instala CUDA o CUDA+cuDNN más adelante o actualiza el software NVIDIA:
Elimine el archivo CMakeCache.txt en su directorio de compilación Darknet para obligar a CMake a volver a encontrar dependencias.
Reconstruir Darknet.
Para actualizar CMake en Ubuntu:
`golpear
sudo apt-get purga cmake
sudo snap instalar cmake --classic
`
Usuarios avanzados:
Para crear un archivo de instalación RPM en lugar de un archivo DEB, modifique CPACKGENERATOR en CMpackage.cmake a "RPM".
Para Centos y OpenSUSE, cambie CPACK_GENERATOR a "RPM".
Después de crear el paquete de instalación, utilice el administrador de paquetes adecuado para instalarlo.
Verificación:
Ejecute la versión darknet desde la línea de comando para confirmar la instalación.
Método CMake de Windows
1. Instale el software requerido:
`golpear
instalación de alas Git.Git
Instalación de Winget Kitware.CMake
instalación de alas nsis.nsis
Winget instala Microsoft.VisualStudio.2022.Community
`
2. Modifique la instalación de Visual Studio:
* Abra "Instalador de Visual Studio".
* Haga clic en "Modificar".
* Seleccione "Desarrollo de escritorio con C++".
* Haga clic en "Modificar" y luego en "Sí".
3. Abra el símbolo del sistema del desarrollador para VS 2022:
* No utilice PowerShell.
4. Instale Microsoft VCPKG:
`golpear
Centros para el Control y la Prevención de Enfermedades:
mkdirc:src
cdc:src
clon de git https://github.com/microsoft/vcpkg
cd vcpkg
arranque-vcpkg.bat
.vcpkg.exe instalación integrada
.vcpkg.exe integra powershell
.vcpkg.exe instalar opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. Opcional: CUDA o CUDA+cuDNN para aceleración de GPU
* Instale CUDA siguiendo las instrucciones en https://developer.nvidia.com/cuda-downloads.
* Instale cuDNN siguiendo las instrucciones en https://developer.nvidia.com/rdp/cudnn-download o https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows.
Después de la instalación, asegúrese de que nvcc.exe y nvidia-smi.exe sean accesibles. Es posible que deba modificar su variable PATH.
Si instala CUDA o CUDA+cuDNN más adelante o actualiza el software NVIDIA:
* Asegúrese de que CUDA esté instalado después de Visual Studio.
* Vuelva a instalar CUDA si se actualiza Visual Studio.
6. Clona Darknet y constrúyelo:
`golpear
cdc:src
clon de git https://github.com/hank-ai/darknet.git
cd red oscura
compilación mkdir
compilación de cd
cmake -DCMAKEBUILDTYPE=Versión -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Versión PACKAGE.vcxproj
`
7. Copie las DLL de CUDA (si es necesario):
* Si recibe errores sobre la falta de DLL CUDA o cuDNN, cópielos manualmente en el directorio de salida de Darknet. Por ejemplo:
`golpear
copie "C:Archivos de programaNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
8. Vuelva a ejecutar el comando msbuild.exe para generar el paquete de instalación de NSIS:
`golpear
msbuild.exe /property:Platform=x64;Configuration=Versión PACKAGE.vcxproj
`
Usuarios avanzados:
Puede utilizar el archivo de solución Darknet.sln generado por CMake dentro de la GUI de Visual Studio en lugar de herramientas de línea de comandos.
Verificación:
Ejecute la versión C:srcDarknetbuildsrc-cliReleasedarknet.exe para confirmar la instalación.
Para instalar Darknet, ejecute el asistente de instalación de NSIS:
Busque el archivo darknet-VERSION.exe en el directorio de compilación.
Ejecute el asistente de instalación para instalar la aplicación CLI, las bibliotecas, los archivos incluidos y las DLL necesarias.
Usando la red oscura
CLI
Nota: Los siguientes comandos no son exhaustivos.
Además de la CLI de Darknet, considere utilizar la CLI del proyecto DarkHelp, que ofrece funcionalidad alternativa y características avanzadas.
La mayoría de los comandos requieren el archivo .weights junto con sus archivos .names y .cfg correspondientes. Puede entrenar su propia red o descargar modelos previamente entrenados de Internet. Los ejemplos incluyen:
LEGO Gears: Detección de objetos en imágenes.
Rolodex: Detección de texto en imágenes.
MSCOCO: Detección de objetos estándar de clase 80.
Comandos:
1. Ayuda:
`golpear
ayuda de la red oscura
`
2. Versión:
`golpear
versión de la red oscura
`
3. Predicción mediante una imagen:
* V2:
`golpear
Prueba del detector darknet cars.data cars.cfg cars_best.weights image1.jpg
`
*V3:
`golpear
darknet02displayimagenes anotadas cars.cfg image1.jpg
`
* Ayuda oscura:
`golpear
DarkHelp cars.cfg cars.cfg cars_best.weights imagen1.jpg
`
4. Coordenadas de salida:
* V2:
`golpear
prueba del detector darknet animales.datos animales.cfg animalesmejor.pesos -extoutput perro.jpg
`
* V3:
`golpear
darknet01inference_images animales perro.jpg
`
* Ayuda oscura:
`golpear
DarkHelp --json animales.cfg animales.nombres animales_mejores.pesos perro.jpg
`
5. Trabajar con vídeos:
* V2:
`golpear
Demostración del detector darknet animales.datos animales.cfg animalesmejores.pesos -extoutput test.mp4
`
*V3:
`golpear
darknet03display_videos animales.cfg prueba.mp4
`
* Ayuda oscura:
`golpear
DarkHelp animales.cfg animales.nombres animales_mejores.pesos prueba.mp4
`
6. Lectura desde una cámara web:
* V2:
`golpear
Demostración del detector darknet animales.datos animales.cfg animales_best.weights -c 0
`
*V3:
`golpear
darknet08display_webcam animales
`
7. Guardar resultados en un vídeo:
* V2:
`golpear
demostración del detector darknet animales.datos animales.cfg animalesbest.pesos prueba.mp4 -outfilename res.avi
`
* V3:
`golpear
darknet05procesovideosmultiproceso animales.cfg animales.nombres animales_mejores.pesos prueba.mp4
`
* Ayuda oscura:
`golpear
DarkHelp animales.cfg animales.nombres animales_mejores.pesos prueba.mp4
`
8. Salida JSON:
* V2:
`golpear
Demostración del detector darknet animales.datos animales.cfg animalesbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
* V3:
`golpear
darknet06imagestojson animales image1.jpg
`
* Ayuda oscura:
`golpear
DarkHelp --json animales.nombres animales.cfg animales_mejor.pesos imagen1.jpg
`
9. Ejecutando en una GPU específica:
`golpear
Demostración del detector darknet animales.datos animales.cfg animales_mejores.pesos -i 1 prueba.mp4
`
10. Comprobación de la precisión de la red neuronal:
`golpear
Mapa del detector de darknet conducción.datos conducción.cfg conducción_mejor.pesos...
`
11. Calculando mAP@IoU=75:
`golpear
Mapa del detector de darknet animales.datos animales.cfg animalesbest.weights -iouthresh 0,75
`
12. Recalcular anclajes:
`golpear
detector de red oscura calcanchors animales.data -numof_clusters 6 -ancho 320 -alto 256
`
13. Entrenando una nueva red:
`golpear
detector de red oscura -mapa -dont_show entrenar animales.datos animales.cfg
`
Capacitación
Para realizar anotaciones y capacitación simplificadas, utilice DarkMark. Es el enfoque recomendado para crear nuevas redes neuronales.
Configuración de entrenamiento manual (si lo prefieres):
1. Cree una carpeta de proyecto:
* Por ejemplo, ~/nn/animals/ para detección de animales.
2. Copie un archivo de configuración de Darknet como plantilla:
* Por ejemplo, cfg/yolov4-tiny.cfg.
3. Cree un archivo de texto animales.nombres:
* Lista cada clase, una entrada por línea, sin líneas en blanco ni comentarios. Ejemplo:
`
perro
gato
pájaro
caballo
`
4. Cree un archivo de texto animales.data:
`
clases = 4
tren = /home/nombre de usuario/nn/animals/animals_train.txt
válido = /home/nombre de usuario/nn/animals/animals_valid.txt
nombres = /home/nombredeusuario/nn/animals/animals.nombres
copia de seguridad = /home/nombre de usuario/nn/animals
`
5. Cree una carpeta para imágenes y anotaciones (por ejemplo, ~/nn/animals/dataset).
* Anota imágenes usando DarkMark o software similar. El formato de anotación de YOLO se describe en las preguntas frecuentes de Darknet/YOLO.
6. Cree animalestrain.txt y animalesvalid.txt:
* Enumere todas las imágenes utilizadas para capacitación y validación, una imagen por línea.
7. Modifique el archivo .cfg:
* Establecer lote = 64.
* Ajuste las subdivisiones según las dimensiones de su red y la memoria de la GPU. Comience con subdivisiones = 1.
* Establezca max_batches en 2000 veces el número de clases (por ejemplo, 8000 para 4 clases).
* Establezca pasos al 80% y 90% de max_batches.
* Ajuste el ancho y el alto para que coincidan con las dimensiones de red deseadas.
* Modifique las clases para reflejar la cantidad de clases en su archivo .names.
Actualizar filtros en las secciones [convolucionales] antes de cada sección [yolo]: (número de clases + 5) 3.
8. Comienza a entrenar:
`golpear
cd ~/nn/animales/
detector de red oscura -mapa -dont_show entrenar animales.datos animales.cfg
`
Para obtener más detalles de capacitación y parámetros avanzados, consulte las preguntas frecuentes de Darknet/YOLO.
Otras herramientas y enlaces
DarkMark: administre proyectos Darknet/YOLO, anote imágenes, verifique anotaciones y genere archivos de capacitación.
DarkHelp: proporciona una CLI alternativa para Darknet, que permite el mosaico de imágenes, el seguimiento de objetos y una API C++ sólida para aplicaciones comerciales.
Preguntas frecuentes sobre Darknet/YOLO: un recurso completo para responder a sus preguntas.
Canal YouTube de Stéphane: acceda a numerosos tutoriales y vídeos de ejemplo.
Darknet/YOLO Discord Server: conéctese con otros usuarios para obtener soporte y debates.
Hoja de ruta
Última actualización 2024-10-30:
Terminado:
Se reemplazó qsort() con std::sort() cuando corresponda durante el entrenamiento.
Se eliminaron check_mistakes, getchar() y system().
Se convirtió Darknet para usar el compilador C++ (g++ en Linux, VisualStudio en Windows).
Se corrigió la compilación de Windows.
Etiquetas reactivadas en las predicciones (el código "alfabeto").
Se volvió a habilitar el código CUDA/GPU, CUDNN y la mitad de CUDNN.
Se eliminó la arquitectura CUDA codificada.
Información de versión CUDA mejorada.
AVX rehabilitado.
Se eliminaron soluciones antiguas y Makefiles.
Hizo de OpenCV una dependencia no opcional.
Se eliminó la antigua dependencia de la biblioteca pthread.
STB eliminado.
Se reescribió CMakeLists.txt para mejorar la detección de CUDA.
Se eliminó el antiguo código "alfabeto" y las imágenes asociadas.
Implementación de compilación externa.
Salida de número de versión mejorada.
Optimizaciones de rendimiento durante el entrenamiento (en curso).
Optimizaciones de rendimiento durante la inferencia (en curso).
Implementado paso por referencia siempre que sea posible.
Se limpiaron archivos .hpp.
Reescribió darknet.h.
Se eliminó la conversión de cv::Mat a void y lo usó como un objeto C++.
Se corrigieron inconsistencias en la estructura de la imagen interna.
Se corrigió la compilación para dispositivos Jetson basados en ARM (los nuevos dispositivos Jetson Orin están funcionando).
Se corrigió la API de Python en V3.
Metas a corto plazo:
Reemplace printf() con std::cout (en progreso).
Revise el antiguo soporte de la cámara Zed.
Mejorar la coherencia del análisis de la línea de comandos (en progreso).
Metas a mediano plazo:
Elimine todo el código de caracteres y reemplácelo con std::string.
Elimine las advertencias del compilador y mejore la claridad del código (en progreso).
Mejorar el uso de cv::Mat en lugar de la estructura de imagen personalizada en C (en progreso).
Reemplace la funcionalidad de lista anterior con std::vector o std::list.
Agregue soporte para imágenes en escala de grises de 1 canal.
Amplíe el soporte para imágenes de N canales (N > 3, por ejemplo, canales térmicos o de profundidad).
Limpieza de código en curso (en progreso).
Metas a largo plazo:
Resuelva problemas de CUDA/CUDNN en todas las GPU.
Vuelva a escribir el código CUDA+cuDNN.
Explore la compatibilidad con GPU que no sean NVIDIA.
Implemente cuadros delimitadores rotados o soporte en "ángulo".
Añade puntos clave/esqueletos.
Introducir mapas de calor (en progreso).
Explora la segmentación.
¡Estén atentos a las actualizaciones y contribuciones al marco Darknet/YOLO!