Marco de detección de objetos Darknet y YOLO
Darknet es un marco de red neuronal de código abierto escrito principalmente en C y C++, con algo de código CUDA para aceleración de GPU. Es conocido por su velocidad y eficiencia, lo que lo convierte en una opción popular para aplicaciones de detección de objetos en tiempo real.
YOLO (Solo miras una vez) es un potente sistema de detección de objetos en tiempo real diseñado para ejecutarse dentro del marco Darknet. Destaca en velocidad y precisión, superando consistentemente a otros sistemas de detección de objetos en los puntos de referencia.
Sumérgete más profundamente en el mundo Darknet/YOLO:
Contribuciones de Hank.ai: descubra cómo Hank.ai apoya activamente a la comunidad Darknet/YOLO.
Sitio web oficial: explore el sitio web oficial de Darknet/YOLO para obtener información completa.
Preguntas frecuentes: encuentre respuestas a preguntas comunes sobre Darknet/YOLO.
Servidor de Discord: únase a la vibrante comunidad Darknet/YOLO Discord para debates y asistencia.
Papeles
La evolución de YOLO está documentada en varios artículos de investigación:
1. YOLOv7: superando los límites del aprendizaje profundo para la detección de objetos
2. Scaled-YOLOv4: Ampliación de YOLOv4 para aplicaciones industriales
3. YOLOv4: Velocidad y precisión óptimas en la detección de objetos
4. YOLOv3: una mejora incremental
Información general
El marco Darknet/YOLO continúa a la vanguardia de la detección de objetos, con velocidad y precisión. Este marco es completamente gratuito y de código abierto, lo que permite a los desarrolladores incorporarlo perfectamente en sus proyectos sin ninguna licencia ni restricciones de tarifas.
Darknet V3, con nombre en código "Jazz", lanzado en octubre de 2024, logra un rendimiento notable con una GPU NVIDIA RTX 3090. Puede procesar los videos del conjunto de datos de LEGO a hasta 1000 FPS, lo que significa que cada cuadro se analiza en solo 1 milisegundo o menos.
Manténgase conectado:
Discord: únase al servidor Darknet/YOLO Discord para obtener soporte y debates: https://discord.gg/zSq8rtW.
Darknet/YOLO es adaptable y se ejecuta en varias plataformas, desde Raspberry Pi y servidores en la nube hasta computadoras de escritorio y sistemas de capacitación de alta gama. Si bien la versión con CPU funciona en una amplia gama de dispositivos, la versión con GPU requiere una GPU compatible con CUDA de NVIDIA.
Versión de la red oscura
El marco Darknet ha evolucionado significativamente desde sus inicios, con varias versiones clave:
1. Versión 0.x: Esta versión original, desarrollada por Joseph Redmon entre 2013-2017, carecía de un número de versión específico.
2. Versión 1.x: mantenida por Alexey Bochkovskiy de 2017 a 2021, esta versión tampoco tenía un número de versión.
3. Versión 2.x "OAK": patrocinada por Hank.ai y mantenida por Stéphane Charette a partir de 2023, marcó la primera versión con un comando de versión. Esta versión estuvo vigente hasta finales de 2024.
4. Versión 3.x "JAZZ": La última versión, lanzada en octubre de 2024, introduce importantes mejoras y una nueva API.
Construyendo la red oscura
La creación de Darknet requiere un compilador C++ 17 o posterior, OpenCV y el sistema de compilación CMake. Si bien el proceso puede parecer complejo, no es necesario ser un experto en C++ para crear, instalar y ejecutar Darknet/YOLO.
Opciones de construcción:
1. Google Colab: las instrucciones de Google Colab son idénticas a las instrucciones de Linux.
2. Método Linux CMake: este método proporciona una guía detallada para los usuarios de Linux.
3. Método Windows CMake: siga estas instrucciones para crear Darknet en Windows.
Nota: Si está utilizando tutoriales antiguos, sus pasos de compilación pueden diferir del nuevo enfoque unificado que se describe a continuación.
Desarrolladores de software: visite https://darknetcv.ai/ para obtener información sobre el funcionamiento interno del marco de detección de objetos Darknet/YOLO.
colaboración de google
Las instrucciones de Google Colab reflejan fielmente el método CMake de Linux. Hay varios cuadernos de Jupyter dentro del subdirectorio colab que demuestran tareas específicas, como entrenar una nueva red.
Método CMake de Linux
Siga estas instrucciones para crear Darknet en Linux:
1. Requisitos previos: Instale las herramientas necesarias:
`golpear
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Clonar Darknet: Descargue 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 para el proceso de compilación:
`golpear
compilación mkdir
compilación de cd
`
4. Configure con CMake: genere los archivos de compilación:
`golpear
cmake -DCMAKEBUILDTYPE=Lanzar ..
`
5. Cree Darknet: cree los ejecutables de Darknet:
`golpear
hacer -j4
`
6. Paquete para instalación: cree un paquete DEB para una fácil instalación (opcional):
`golpear
hacer paquete
sudo dpkg -i darknet-VERSIÓN.deb
`
7. CUDA/cuDNN (opcional): para aceleración de GPU, instale CUDA o CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. Verifique la instalación: Después de la instalación, verifique la versión de Darknet:
`golpear
versión de la red oscura
`
Método CMake de Windows
Estas instrucciones son para crear Darknet en una instalación limpia de Windows 11 22H2.
1. Instalar requisitos previos:
`golpear
instalación de Winget Git.Git instalación de Winget Kitware.CMake instalación de Winget nsis.nsis instalación de Winget Microsoft.VisualStudio.2022.Community
`
2. Compatibilidad con Visual Studio C++:
* Abra el instalador de Visual Studio y seleccione Modificar.
* Habilite el desarrollo de escritorio con C++ y haga clic en Modificar.
3. Símbolo del sistema para desarrolladores para VS 2022: abra el símbolo del sistema para desarrolladores para VS 2022.
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. CUDA/cuDNN (opcional): para aceleración de GPU, instale CUDA o CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. Clonar la red oscura:
`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:
`golpear
cmake -DCMAKEBUILDTYPE=Versión -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. Cree Darknet con 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
`
9. Verifique la instalación: ejecute el ejecutable de Darknet y verifique la versión:
`golpear
C:srcdarknetbuildsrc-cliReleasedarknet.exe versión
`
10. Instale el paquete NSIS: ejecute el archivo darknet-VERSION.exe en el directorio de compilación para instalar Darknet, bibliotecas, archivos de inclusión y DLL.
Usando la red oscura
Darknet ofrece una interfaz de línea de comandos (CLI) para interactuar con el marco.
Nota: Además de la CLI de Darknet, el proyecto DarkHelp proporciona una CLI alternativa con funciones mejoradas. Puede utilizar Darknet CLI y DarkHelp CLI juntos.
Comandos CLI comunes de Darknet:
Ayuda: Lista de comandos disponibles:
`golpear
ayuda de la red oscura
`
Versión: Verifique la versión de Darknet:
`golpear
versión de la red oscura
`
Predicción (Imagen): Realice la detección de objetos en una imagen:
`golpear
# Versión 2
Prueba del detector darknet cars.data cars.cfg cars_best.weights image1.jpg
# Versión 3
darknet02displayimágenes anotadas cars.cfg image1.jpg
# Ayuda oscura
DarkHelp cars.cfg cars.cfg cars_best.weights imagen1.jpg
`
Coordenadas de salida (Imagen): Obtener coordenadas del objeto:
`golpear
# Versión 2
prueba del detector darknet animales.datos animales.cfg animalesmejor.pesos -extoutput perro.jpg
# Versión 3
darknet01inference_images animales perro.jpg
# Ayuda oscura
DarkHelp --json animales.cfg animales.nombres animales_mejores.pesos perro.jpg
`
Procesamiento de vídeo:
`golpear
# Versión 2
# Ejecutar en archivo de video
Demostración del detector darknet animales.datos animales.cfg animalesmejores.pesos -extoutput test.mp4
# Ejecutar en la cámara web
Demostración del detector darknet animales.datos animales.cfg animales_best.weights -c 0
# Versión 3
# Ejecutar en archivo de video
darknet03display_videos animales.cfg prueba.mp4
# Ejecutar en la cámara web
darknet08display_webcam animales
# Ayuda oscura
# Ejecutar en archivo de video
DarkHelp animales.cfg animales.nombres animales_mejores.pesos prueba.mp4
`
Guardar resultados en vídeo:
`golpear
# Versión 2
demostración del detector darknet animales.datos animales.cfg animalesbest.pesos prueba.mp4 -outfilename res.avi
# Versión 3
darknet05procesovideosmultiproceso animales.cfg animales.nombres animales_mejores.pesos prueba.mp4
# Ayuda oscura
DarkHelp animales.cfg animales.nombres animales_mejores.pesos prueba.mp4
`
Salida JSON:
`golpear
# Versión 2
Demostración del detector darknet animales.datos animales.cfg animalesbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# Versión 3
darknet06imagestojson animales image1.jpg
# Ayuda oscura
DarkHelp --json animales.nombres animales.cfg animales_mejor.pesos imagen1.jpg
`
GPU específica: Ejecutar en una GPU designada:
`golpear
# Versión 2
Demostración del detector darknet animales.datos animales.cfg animales_mejores.pesos -i 1 prueba.mp4
`
Verificación de precisión: evalúe la precisión de la red:
`golpear
Mapa del detector de darknet conducción.datos conducción.cfg conducción_mejor.pesos
`
Calcular anclajes:
`golpear
detector de red oscura calcanchors animales.data -numof_clusters 6 -ancho 320 -alto 256
`
Entrenando una nueva red
DarkMark: para obtener un enfoque intuitivo y optimizado para anotar y entrenar, utilice DarkMark.
Configuración manual:
1. Crear directorio: configure una carpeta para sus datos de entrenamiento.
2. Copie la configuración: elija un archivo de configuración como plantilla, por ejemplo, cfg/yolov4-tiny.cfg, y cópielo a su directorio.
3. Cree un archivo .names: cree un archivo de texto (por ejemplo, animales.nombres) que enumere sus clases, una por línea.
4. Cree un archivo .data: cree un archivo de texto (por ejemplo, animales.data) con la siguiente estructura:
`
clases = 4
tren = /ruta/hacia/animals_train.txt
válido = /ruta/a/animales_valid.txt
nombres = /ruta/a/animales.nombres
copia de seguridad = /ruta/al/directorio_de_copia de seguridad
`
5. Prepare el conjunto de datos: organice las imágenes y los archivos de anotaciones correspondientes en un directorio.
6. Cree archivos de texto válidos/de entrenamiento: cree dos archivos de texto (animalstrain.txt, animalesvalid.txt) que enumeren las rutas a las imágenes para entrenamiento y validación.
7. Modificar configuración:
* Establecer lote = 64.
* Ajuste las subdivisiones según la memoria de su GPU.
Establezca max_batches en un valor adecuado (por ejemplo, 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 su red.
* Actualizar clases para que coincida con el número de clases.
* Modificar filtros en las secciones [convolucionales] anteriores a las secciones [yolo].
8. Comience a entrenar:
`golpear
cd /ruta/a/animales
detector de red oscura -mapa -dont_show entrenar animales.datos animales.cfg
`
9. Ver progreso: supervise el progreso del entrenamiento a través del archivo chart.png.
Otras herramientas y enlaces
DarkMark: esta herramienta simplifica la anotación, verificación y generación de archivos de imágenes para el entrenamiento con Darknet.
DarkHelp: una CLI alternativa sólida para Darknet con funciones como mosaico de imágenes y seguimiento de objetos.
Preguntas frecuentes sobre Darknet/YOLO: encuentre respuestas a preguntas frecuentes.
Canal de YouTube de Stéphane: acceda a tutoriales y vídeos de ejemplo.
Darknet/YOLO Discord Server: únase a la comunidad para obtener soporte y debates.
Hoja de ruta
Terminado:
Se reemplazó qsort() con std::sort() para mayor eficiencia.
Se eliminó el código obsoleto (por ejemplo, check_mistakes, getchar(), system()).
Migré Darknet al compilador de C++.
Se solucionaron problemas de compilación de Windows.
Soporte de Python restaurado.
Construyó la biblioteca Darknet.
Se volvió a habilitar el código CUDA/GPU, CUDNN y la mitad de CUDNN.
Información de versión CUDA mejorada.
Conjunto de instrucciones AVX reactivado.
Se eliminaron soluciones antiguas y Makefile.
Hizo de OpenCV una dependencia obligatoria.
Se eliminaron las dependencias de bibliotecas obsoletas (por ejemplo, pthread, STB).
CMakeLists.txt reescrito para mejorar la detección de CUDA.
Compilaciones fuera de fuente habilitadas.
Salida de número de versión mejorada.
Se implementaron optimizaciones de rendimiento para entrenamiento e inferencia.
Código limpio para una mejor legibilidad.
Darknet.h reescrito para una API mejorada.
Soporte mejorado para dispositivos Jetson basados en ARM.
Se corrigió la API de Python en V3.
Metas a corto plazo:
Cambie printf() con std::cout.
Investiga el soporte de la cámara zed.
Mejorar el análisis de la línea de comandos.
Metas a mediano plazo:
Reemplace todo el código de caracteres con std::string.
Aborde las advertencias del compilador.
Mejore el uso de cv::Mat en lugar de estructuras de imágenes personalizadas.
Actualice la funcionalidad de la lista a std::vector o std::list.
Admite imágenes en escala de grises de 1 canal.
Agregue soporte para imágenes de N canales (N > 3).
Limpieza de código continua.
Metas a largo plazo:
Solucione los problemas de CUDA/CUDNN en diferentes GPU.
Reescriba el código CUDA+cuDNN para mejorar la eficiencia.
Explore la compatibilidad con GPU que no sean NVIDIA.
Implemente cuadros delimitadores rotados y soporte de "ángulo".
Agregue puntos clave, esqueletos y mapas de calor.
Introducir capacidades de segmentación.