Marco de detección de objetos Darknet y YOLO
Darknet es un marco de red neuronal de código abierto escrito en C, C++ y CUDA.
YOLO (Solo miras una vez) es un sistema de detección de objetos en tiempo real de última generación que se ejecuta dentro del marco Darknet.
¡Descubra cómo Hank.ai está empoderando a la comunidad Darknet/YOLO!
Anuncio de Darknet V3 "Jazz"
Visite el sitio web Darknet/YOLO
Explora las preguntas frecuentes de Darknet/YOLO
Únase al servidor Darknet/YOLO Discord
Papeles
1. Documento YOLOv7: Enlace al artículo
2. Paper Scaled-YOLOv4: enlace al documento
3. Documento YOLOv4: Enlace al artículo
4. Documento YOLOv3: Enlace al artículo
Información general
El marco Darknet/YOLO supera consistentemente a otros marcos y versiones de YOLO tanto en velocidad como en precisión.
Este marco es completamente gratuito y de código abierto. Puede integrar perfectamente Darknet/YOLO en sus proyectos y productos existentes, incluidos los comerciales, sin ningún costo de licencia.
Darknet V3 ("Jazz"), lanzado en octubre de 2024, logra un rendimiento notable al ejecutar los videos del conjunto de datos LEGO a hasta 1000 FPS en una GPU NVIDIA RTX 3090. Esto se traduce en que Darknet/YOLO procesa cada fotograma de vídeo, incluido el cambio de tamaño y el procesamiento, en menos de 1 milisegundo.
Únase al servidor Darknet/YOLO Discord para obtener soporte y discusión: https://discord.gg/zSq8rtW
La versión de CPU de Darknet/YOLO funciona de manera eficiente en varios dispositivos, incluidos Raspberry Pi, servidores en la nube y de colaboración, computadoras de escritorio, portátiles y equipos de capacitación de alta gama. Sin embargo, la versión GPU de Darknet/YOLO requiere una GPU compatible con CUDA de NVIDIA.
Darknet/YOLO es compatible con los sistemas operativos Linux, Windows y Mac. Consulte las instrucciones de construcción a continuación para obtener orientación detallada.
Versión de la red oscura
La herramienta Darknet original desarrollada por Joseph Redmon entre 2013 y 2017 carecía de un número de versión. Nos referimos a esta versión como 0.x.
El posterior y popular repositorio Darknet mantenido por Alexey Bochkovskiy entre 2017 y 2021 también carecía de un número de versión. Consideramos esta versión 1.x.
El repositorio Darknet patrocinado por Hank.ai y mantenido por Stéphane Charette, a partir de 2023, introdujo por primera vez un comando de versión. Desde 2023 hasta finales de 2024, devolvió la versión 2.x "OAK".
El equipo de desarrollo se centró en minimizar la interrupción de la funcionalidad existente mientras se familiarizaba con el código base.
Los cambios clave implementados durante este período incluyen:
1. Proceso de compilación unificado: pasos de compilación reescritos para optimizar el proceso usando CMake tanto para Windows como para Linux.
2. Conversión de C++: el código base se convirtió para utilizar el compilador de C++.
3. Mejora del gráfico: la visualización del gráfico.png se mejoró durante la capacitación.
4. Correcciones de errores y optimizaciones: se implementaron numerosas correcciones de errores y optimizaciones relacionadas con el rendimiento, principalmente enfocadas en reducir el tiempo de capacitación.
La última rama de este código base es la versión 2.1, ubicada en la rama v2.
La siguiente fase de desarrollo comenzó a mediados de 2024 y culminó con el lanzamiento de la versión 3.x "JAZZ" en octubre de 2024. El comando de versión ahora devuelve 3.x.
Siempre puedes volver a la rama v2 anterior si necesitas ejecutar comandos específicos de esa versión. Informe al equipo de desarrollo si encuentra algún comando faltante y ellos investigarán cómo volver a agregarlo.
Cambios significativos introducidos en la versión 3.x "JAZZ":
1. Eliminación de comandos: se eliminaron muchos comandos obsoletos y no compatibles.
2. Optimizaciones de rendimiento: se aplicaron numerosas optimizaciones de rendimiento tanto para el entrenamiento como para la inferencia.
3. Modificación de la API: la API C heredada sufrió modificaciones. Las aplicaciones que utilizan la API Darknet original pueden requerir ajustes menores. https://darknetcv.ai/api/api.html
4. Nueva API C/C++: Darknet V3 presenta una nueva API C y C++. https://darknetcv.ai/api/api.html
5. Código de muestra mejorado: nuevas aplicaciones y códigos de muestra están disponibles en src-examples. https://darknetcv.ai/api/files.html
Pesas preentrenadas MSCOCO
Se han entrenado previamente varias versiones populares de YOLO para mayor comodidad en el conjunto de datos de MSCOCO. Este conjunto de datos incluye 80 clases, que se enumeran en el archivo de texto cfg/coco.names.
Además de MSCOCO, hay disponibles varios conjuntos de datos más simples y pesos previamente entrenados para probar Darknet/YOLO, como LEGO Gears y Rolodex. Consulte las preguntas frecuentes sobre Darknet/YOLO para obtener más detalles.
Los pesos previamente entrenados de MSCOCO se pueden descargar de varias fuentes, incluido este repositorio:
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
Las pesas previamente entrenadas de MSCOCO se proporcionan únicamente con fines de demostración. Los archivos .cfg y .names correspondientes a MSCOCO residen en el directorio cfg.
A continuación se muestran algunos comandos de ejemplo:
`golpear
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
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
DarkHelp coco.nombres yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.nombres yolov4-tiny.cfg yolov4-tiny.pesos video1.avi
`
Se anima a los usuarios a entrenar sus propias redes. MSCOCO sirve principalmente como una herramienta para verificar que todo funciona correctamente.
Edificio
Los diversos métodos de construcción empleados antes de 2023 se han consolidado en una solución unificada. Darknet necesita C++ 17 o una versión más reciente, OpenCV, y aprovecha CMake para generar los archivos de proyecto necesarios.
Construir Darknet/YOLO no requiere conocimientos de C++. Es análogo a conducir un coche sin ser mecánico.
colaboración de google
Las instrucciones de Google Colab reflejan las de Linux. Hay varios cuadernos de Jupyter disponibles para demostrar tareas específicas, como entrenar una nueva red.
Explore los cuadernos en el subdirectorio colab o siga las instrucciones de Linux a continuación.
Método CMake de Linux
Tutorial de compilación de Darknet para Linux
1. Requisitos previos: asegúrese de tener instalados los siguientes paquetes:
`golpear
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Clonar Darknet: Clonar el repositorio de Darknet:
`golpear
mkdir ~/srccd ~/src
clon de git https://github.com/hank-ai/darknet
cd red oscura
`
3. Crear directorio de compilación: cree un directorio de compilación:
`golpear
compilación mkdir
compilación de cd
`
4. Configure con CMake: ejecute CMake para configurar la compilación:
`golpear
cmake -DCMAKEBUILDTYPE=Lanzar ..
`
5. Construir: Construir el proyecto:
`golpear
hacer -j4
`
6. Paquete: Cree un paquete Debian:
`golpear
hacer paquete
`
7. Instalar: Instale el paquete:
`golpear
sudo dpkg -i darknet-VERSIÓN.deb
`
Opcional: CUDA/cuDNN para aceleración de GPU
1. Instale CUDA: si tiene una GPU NVIDIA moderna, puede instalar CUDA para la aceleración de la GPU. Descargue e instale CUDA desde https://developer.nvidia.com/cuda-downloads.
2. Instale cuDNN: descargue e instale cuDNN desde https://developer.nvidia.com/rdp/cudnn-download o https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn- descripción general de la instalación del administrador de paquetes.
3. Verifique la instalación de CUDA: asegúrese de poder ejecutar nvcc y nvidia-smi después de instalar CUDA. Es posible que necesite ajustar su variable PATH.
4. Configuración de CMake (si CUDA se instaló después de CMake): si instala CUDA o CUDA+cuDNN después de configurar CMake, debe eliminar el archivo CMakeCache.txt en el directorio de compilación de Darknet para obligar a CMake a volver a encontrar los archivos necesarios. Luego, vuelva a ejecutar CMake y reconstruya Darknet.
Usuarios avanzados
Paquete RPM: para crear un archivo de instalación RPM en lugar de un archivo DEB, modifique las siguientes líneas en CM_package.cmake:
`cmake
# CONFIGURAR (CPACK_GENERATOR "DEB")
ESTABLECER (CPACK_GENERATOR "RPM")
`
Distribuciones como Centos y OpenSUSE: para distribuciones como Centos y OpenSUSE, cambie las líneas en CM_package.cmake a:
`cmake
# CONFIGURAR (CPACK_GENERATOR "DEB")
ESTABLECER (CPACK_GENERATOR "RPM")
`
Paquete de instalación: para instalar el paquete después de compilarlo, utilice el administrador de paquetes de su distribución. Por ejemplo, en sistemas basados en Debian como Ubuntu, utilice sudo dpkg -i darknet-2.0.1-Linux.deb.
Archivos clave instalados:
/usr/bin/darknet: El ejecutable principal de Darknet. Confirme la instalación ejecutando la versión darknet en la CLI.
/usr/include/darknet.h: La API Darknet para desarrolladores de C, C++ y Python.
/usr/include/darknet_version.h: contiene información de versión para desarrolladores.
/usr/lib/libdarknet.so: la biblioteca con la que se vinculan los desarrolladores de C, C++ y Python.
/opt/darknet/cfg/...: Almacena todas las plantillas .cfg.
Método CMake de Windows
Tutorial de compilación para Windows (suponiendo una instalación nueva de Windows 11 22H2)
1. Requisitos previos de instalación: Instale los componentes necesarios usando Winget:
`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. Instale la compatibilidad con Visual Studio C++: modifique la instalación de Visual Studio para incluir compatibilidad con C++:
* Abra el menú "Inicio de Windows" y ejecute "Visual Studio Installer".
* Haga clic en "Modificar".
* Seleccione "Desarrollo de escritorio con C++".
* Haga clic en "Modificar" en la esquina inferior derecha y luego en "Sí".
3. Símbolo del sistema para desarrolladores: inicie el "Símbolo del sistema para desarrolladores para VS 2022" desde el menú "Inicio de Windows". ¡No utilice PowerShell para estos pasos!
4. Instale Microsoft VCPKG: Instale VCPKG para compilar OpenCV:
`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
`
* Tenga paciencia, este paso puede llevar una cantidad significativa de tiempo ya que requiere descargar y compilar numerosos componentes.
5. Opcional: CUDA/cuDNN para aceleración de GPU: siga los mismos pasos descritos en la sección de Linux.
6. Clonar Darknet: Clonar el repositorio de Darknet:
`golpear
cdc:src
clon de git https://github.com/hank-ai/darknet.git
cd red oscura
compilación mkdir
compilación de cd
`
7. Configurar con CMake: Configure la compilación usando CMake:
`golpear
cmake -DCMAKEBUILDTYPE=Versión -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. Compile con msbuild: cree el proyecto utilizando msbuild:
`golpear
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
`
Solución de problemas: faltan archivos DLL CUDA/cuDNN
Si encuentra errores acerca de la falta de DLL CUDA o cuDNN (por ejemplo, cublas64_12.dll), copie manualmente los archivos CUDA .dll al mismo directorio de salida que darknet.exe. Por ejemplo:
`golpear
copie "C:Archivos de programaNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
* Recuerde ajustar el comando según su versión de CUDA.
Vuelva a ejecutar el comando msbuild.exe después de copiar las DLL.
Usuarios avanzados
Solución de Visual Studio: CMake genera un archivo de solución de Visual Studio (Darknet.sln). Los desarrolladores de software que prefieran usar la GUI de Visual Studio pueden cargar el proyecto Darknet dentro de Visual Studio en lugar de usar la línea de comandos.
Verificación e instalación
Verificación: ejecute el siguiente comando para verificar si Darknet está construido correctamente:
`golpear
C:srcDarknetbuildsrc-cliReleasedarknet.exe versión
`
Instalación: ejecute el asistente de instalación de NSIS generado en el último paso para instalar correctamente Darknet, bibliotecas, archivos de inclusión y DLL necesarios. Localice el archivo darknet-VERSION.exe en el directorio de compilación. Por ejemplo: darknet-2.0.31-win64.exe.
Archivos clave instalados:
C: Archivos de programa Darknetbin/darknet.exe: la aplicación Darknet CLI.
C:Archivos de programaDarknet/bin: Contiene otras aplicaciones de muestra.
C: Archivos de programa Darknet: incluye archivos .dll de terceros necesarios (OpenCV), archivos Darknet .dll, .lib y .h, y archivos de plantilla .cfg.
Usando la red oscura
CLI
La siguiente lista no es exhaustiva de todos los comandos admitidos por Darknet.
Además de la CLI de Darknet, considere la CLI del proyecto DarkHelp, que ofrece una CLI alternativa con varias funciones avanzadas que no están disponibles directamente en Darknet. Puede utilizar ambas CLI simultáneamente.
Requisitos previos esenciales:
Para la mayoría de los comandos, necesita un archivo .weights junto con los archivos .names y .cfg correspondientes.
Entrene su propia red (¡muy recomendable!) o descargue una red previamente entrenada de Internet.
Ejemplos de conjuntos de datos previamente entrenados:
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 de ejemplo:
1. Obtenga ayuda:
`golpear
ayuda de la red oscura
`
2. Verificar versión:
`golpear
versión de la red oscura
`
3. Predicción de imágenes:
V2:
`golpear
Prueba del detector darknet cars.data cars.cfg cars_best.weights image1.jpg
`
V3:
`golpear
darknet02displayimágenes 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. Procesamiento de vídeo:
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. Procesamiento de 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. Salida de 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. GPU específica:
V2:
`golpear
Demostración del detector darknet animales.datos animales.cfg animales_mejores.pesos -i 1 prueba.mp4
`
10. Evaluación de precisión:
mapa:
`golpear
Mapa del detector de darknet conducción.datos conducción.cfg conducción_mejor.pesos...
`
mapa@IoU=75:
`golpear
Mapa del detector de darknet animales.datos animales.cfg animalesbest.weights -iouthresh 0,75
`
11. Cálculo del ancla:
DarkMark: utilice DarkMark para recalcular los anclajes para obtener un rendimiento óptimo.
Darknet (método anterior):
`golpear
detector de red oscura calcanchors animales.data -numof_clusters 6 -ancho 320 -alto 256
`
12. Capacitación de una nueva red:
DarkMark (recomendado): use DarkMark para anotaciones y capacitación.
Configuración manual:
1. Creación de directorio: cree una carpeta para su proyecto (por ejemplo, ~/nn/animals/).
2. Archivo de configuración: copie un archivo de configuración de Darknet como plantilla (por ejemplo, cfg/yolov4-tiny.cfg).
3. Archivo .names: cree un archivo de texto .names que enumere sus clases (por ejemplo, ~/nn/animals/animals.names).
4. Archivo .data: cree un archivo de texto .data en la misma carpeta que el archivo de configuración (por ejemplo, ~/nn/animals/animals.data).
5. Carpeta del conjunto de datos: cree una carpeta para sus imágenes y anotaciones (por ejemplo, ~/nn/animals/dataset).
6. Anotaciones .txt: genere archivos .txt para cada imagen, que contengan coordenadas de anotación. Utilice DarkMark u otras herramientas de anotación.
7. Archivos de entrenamiento/válidos: cree archivos animalestrain.txt y animalesvalid.txt que enumeren sus imágenes de entrenamiento y validación.
8. Modificar el archivo .cfg: ajuste el archivo de configuración según su conjunto de datos.
* Establecer lote = 64.
* Ajuste las subdivisiones según la memoria de su GPU.
Establezca max_batches en 2000 números de clases.
* Establezca pasos al 80% y 90% de max_batches.
* Ajuste el ancho y el alto según las dimensiones de la red.
* Establezca clases=... en el número de clases en su archivo .names.
Ajuste los filtros =... en las secciones [convolucionales] antes de cada sección [yolo] a (número de clases + 5) 3.
9. Entrenamiento: Iniciar entrenamiento:
`golpear
cd ~/nn/animales/
detector de red oscura -mapa -dont_show entrenar animales.datos animales.cfg
`
* Los mejores pesos se guardarán como animales_best.weights.
* Ver el archivo chart.png para monitorear el progreso del entrenamiento.
Otras herramientas y enlaces
Recursos clave:
DarkMark: para gestionar proyectos Darknet/YOLO, anotar imágenes, verificar anotaciones y generar archivos de capacitación.
DarkHelp: una CLI alternativa sólida a Darknet, con funciones como mosaico de imágenes, seguimiento de objetos en videos y una API C++ sólida adecuada para aplicaciones comerciales.
Preguntas frecuentes sobre Darknet/YOLO: encuentre respuestas a preguntas y soluciones comunes.
Canal de YouTube de Stéphane: explore tutoriales y vídeos de ejemplo.
Servidor Darknet/YOLO Discord: conéctese con otros usuarios de Darknet/YOLO para obtener soporte y debates.
Hoja de ruta
Última actualización 2024-10-30:
Tareas completadas:
1. Se reemplazó qsort() con std::sort() en las secciones de capacitación relevantes.
2. Se eliminaron check_mistakes, getchar() y system().
3. Se convirtió Darknet para usar el compilador C++ (g++ en Linux, VisualStudio en Windows).
4. Se corrigió la compilación de Windows.
5. Se corrigió el soporte de Python.
6. Biblioteca Darknet construida.
7. Etiquetas reactivadas en las predicciones (código "alfabeto").
8. Código CUDA/GPU rehabilitado.
9. CUDNN rehabilitado.
10. Se rehabilitó la mitad CUDNN.
11. Se eliminó la arquitectura CUDA codificada.
12. Información de versión CUDA mejorada.
13. AVX rehabilitado.
14. Se eliminaron soluciones antiguas y Makefile.
15. OpenCV se hizo no opcional.
16. Se eliminó la dependencia de la antigua biblioteca pthread.
17. STB eliminado.
18. Reescribió CMakeLists.txt para usar la nueva detección CUDA.
19. Se eliminó el antiguo código "alfabeto" y se eliminaron imágenes en datos/etiquetas.
20. Compilación fuera de fuente habilitada.
21. Salida del número de versión mejorada.
22. Optimizaciones del rendimiento relacionadas con la formación (en curso).
23. Optimizaciones de rendimiento relacionadas con la inferencia (en curso).
24. Se implementó el pase por referencia cuando corresponda.
25. Archivos .hpp limpios.
26. Se reescribió darknet.h.
27. Se eliminó la conversión de cv::Mat a void*, usándolo como un objeto C++ adecuado.
28. Coherencia mejorada en cómo se utiliza la estructura de la imagen interna.
29. Compilación fija para dispositivos Jetson basados en ARM.
30. Se corrigió la API de Python en V3.
Metas a corto plazo:
1. Reemplace printf() con std::cout (en progreso).
2. Investiga el antiguo soporte de la cámara Zed.
3. Mejorar y estandarizar el análisis de la línea de comandos (en progreso).
Metas a mediano plazo:
1. Elimine todo el código char* y reemplácelo con std::string.
2. Eliminar las advertencias del compilador (en progreso).
3. Mejorar el uso de cv::Mat en lugar de la estructura de imagen personalizada en C (en progreso).
4. Reemplace la funcionalidad de lista anterior con std::vector o std::list.
5. Se corrigió la compatibilidad con imágenes en escala de grises de 1 canal.
6. Agregue soporte para imágenes de canal N donde N > 3 (por ejemplo, imágenes con profundidad adicional o canales térmicos).
7. Limpieza de código en curso (en progreso).
Metas a largo plazo:
1. Abordar los problemas de CUDA/CUDNN en todas las GPU.
2. Reescribir el código CUDA+cuDNN.
3. Explore la compatibilidad con GPU que no sean NVIDIA.
4. Implemente cuadros delimitadores rotados o soporte en "ángulo".
5. Soporte para puntos clave/esqueletos.
6. Soporte para mapas de calor (en progreso).
7. Segmentación.