Cadre de détection d'objets Darknet et YOLO
Darknet est un framework de réseau neuronal open source principalement écrit en C et C++, avec du code CUDA pour l'accélération GPU. Il est connu pour sa rapidité et son efficacité, ce qui en fait un choix populaire pour les applications de détection d'objets en temps réel.
YOLO (You Only Look Once) est un puissant système de détection d'objets en temps réel conçu pour fonctionner dans le cadre Darknet. Il excelle en termes de vitesse et de précision, surpassant systématiquement les autres systèmes de détection d'objets dans les tests de référence.
Plongez plus profondément dans le monde Darknet/YOLO :
Contributions de Hank.ai : découvrez comment Hank.ai soutient activement la communauté Darknet/YOLO.
Site Web officiel : explorez le site Web officiel de Darknet/YOLO pour des informations complètes.
Foire aux questions : trouvez les réponses aux questions courantes sur Darknet/YOLO.
Serveur Discord : rejoignez la communauté dynamique Darknet/YOLO Discord pour des discussions et de l'aide.
Papiers
L'évolution de YOLO est documentée dans plusieurs articles de recherche :
1. YOLOv7 : repousser les limites du Deep Learning pour la détection d'objets
2. Scaled-YOLOv4 : mise à l'échelle de YOLOv4 pour les applications industrielles
3. YOLOv4 : vitesse et précision optimales de la détection d'objets
4. YOLOv3 : une amélioration incrémentielle
Informations générales
Le framework Darknet/YOLO continue d'être à la pointe de la détection d'objets, offrant à la fois rapidité et précision. Ce framework est entièrement gratuit et open source, permettant aux développeurs de l'intégrer de manière transparente dans leurs projets sans aucune restriction de licence ou de frais.
Darknet V3, nom de code « Jazz », sorti en octobre 2024, atteint des performances remarquables avec un GPU NVIDIA RTX 3090. Il peut traiter les vidéos de l'ensemble de données LEGO jusqu'à 1 000 FPS, ce qui signifie que chaque image est analysée en seulement 1 milliseconde ou moins.
Restez connecté :
Discord : rejoignez le serveur Discord Darknet/YOLO pour obtenir de l'aide et des discussions : https://discord.gg/zSq8rtW.
Darknet/YOLO est adaptable et fonctionne sur diverses plates-formes, du Raspberry Pi aux serveurs cloud, en passant par les ordinateurs de bureau et les systèmes de formation haut de gamme. Alors que la version CPU fonctionne sur une large gamme d'appareils, la version GPU nécessite un GPU compatible CUDA de NVIDIA.
Version Darknet
Le framework Darknet a considérablement évolué depuis sa création, avec plusieurs versions clés :
1. Version 0.x : Cette version originale, développée par Joseph Redmon entre 2013 et 2017, ne disposait pas d'un numéro de version spécifique.
2. Version 1.x : maintenue par Alexey Bochkovskiy de 2017 à 2021, cette version n'avait pas non plus de numéro de version.
3. Version 2.x « OAK » : Sponsorisée par Hank.ai et maintenue par Stéphane Charette à partir de 2023, elle marquait la première version avec une commande de version. Cette version a fonctionné jusqu'à fin 2024.
4. Version 3.x « JAZZ » : La dernière version, sortie en octobre 2024, introduit des améliorations significatives et une nouvelle API.
Construire le Darknet
La création de Darknet nécessite un compilateur C++ 17 ou plus récent, OpenCV et le système de build CMake. Bien que le processus puisse paraître complexe, vous n'avez pas besoin d'être un expert en C++ pour créer, installer et exécuter Darknet/YOLO.
Options de construction :
1. Google Colab : Les instructions de Google Colab sont identiques aux instructions Linux.
2. Méthode Linux CMake : Cette méthode fournit un guide détaillé pour les utilisateurs de Linux.
3. Méthode Windows CMake : suivez ces instructions pour créer Darknet sous Windows.
Remarque : Si vous utilisez d'anciens didacticiels, leurs étapes de création peuvent différer de la nouvelle approche unifiée décrite ci-dessous.
Développeurs de logiciels : visitez https://darknetcv.ai/ pour obtenir un aperçu du fonctionnement interne du cadre de détection d'objets Darknet/YOLO.
Google Colab
Les instructions de Google Colab reflètent fidèlement la méthode Linux CMake. Il existe plusieurs notebooks Jupyter dans le sous-répertoire colab qui démontrent des tâches spécifiques telles que la formation d'un nouveau réseau.
Méthode Linux CMake
Suivez ces instructions pour créer Darknet sur Linux :
1. Prérequis : Installez les outils nécessaires :
`bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Cloner Darknet : Téléchargez le référentiel Darknet :
`bash
mkdir ~/srccd ~/src
clone git https://github.com/hank-ai/darknet
cd darknet
`
3. Créer un répertoire de construction : créez un répertoire pour le processus de construction :
`bash
mkdir construire
construction de CD
`
4. Configurez avec CMake : Générez les fichiers de build :
`bash
cmake -DCMAKEBUILDTYPE=Version ..
`
5. Construire Darknet : Créez les exécutables Darknet :
`bash
faire -j4
`
6. Package pour l'installation : créez un package DEB pour une installation facile (facultatif) :
`bash
faire un paquet
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN (Facultatif) : Pour l'accélération GPU, installez CUDA ou CUDA+cuDNN :
* CUDA : https://developer.nvidia.com/cuda-downloads
* cuDNN : https://developer.nvidia.com/rdp/cudnn-download
8. Vérifiez l'installation : Après l'installation, vérifiez la version Darknet :
`bash
version darknet
`
Méthode Windows CMake
Ces instructions concernent la création de Darknet sur une nouvelle installation de Windows 11 22H2.
1. Conditions préalables à l'installation :
`bash
Winget installe Git.Git Winget installe Kitware.CMake Winget installe nsis.nsis Winget installe Microsoft.VisualStudio.2022.Community
`
2. Prise en charge de Visual Studio C++ :
* Ouvrez Visual Studio Installer et sélectionnez Modifier.
* Activez le développement de bureau avec C++ et cliquez sur Modifier.
3. Invite de commandes du développeur pour VS 2022 : ouvrez l'invite de commande du développeur pour VS 2022.
4. Installez Microsoft VCPKG :
`bash
CDC:
mkdir c:src
cdc:src
clone git https://github.com/microsoft/vcpkg
cdvcpkg
bootstrap-vcpkg.bat
.vcpkg.exe installation intégrée
.vcpkg.exe intègre PowerShell
.vcpkg.exe installer opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
5. CUDA/cuDNN (Facultatif) : Pour l'accélération GPU, installez CUDA ou CUDA+cuDNN :
* CUDA : https://developer.nvidia.com/cuda-downloads
* cuDNN : https://developer.nvidia.com/rdp/cudnn-download
6. Cloner le Darknet :
`bash
cdc:src
clone git https://github.com/hank-ai/darknet.git
cd darknet
mkdir construire
construction de CD
`
7. Configurez avec CMake :
`bash
cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. Créez Darknet avec MSBuild :
`bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
9. Vérifiez l'installation : exécutez l'exécutable Darknet et vérifiez la version :
`bash
Version C:srcdarknetbuildsrc-cliReleasedarknet.exe
`
10. Installez le package NSIS : exécutez le fichier darknet-VERSION.exe dans le répertoire de construction pour installer Darknet, les bibliothèques, les fichiers d'inclusion et les DLL.
Utiliser le Darknet
Darknet propose une interface de ligne de commande (CLI) pour interagir avec le framework.
Remarque : En plus de la CLI Darknet, le projet DarkHelp propose une CLI alternative avec des fonctionnalités améliorées. Vous pouvez utiliser Darknet CLI et DarkHelp CLI ensemble.
Commandes CLI Darknet courantes :
Aide : Liste des commandes disponibles :
`bash
aide sur le darknet
`
Version : Vérifiez la version Darknet :
`bash
version darknet
`
Prédiction (Image) : Effectuer une détection d'objet sur une image :
`bash
#Version 2
Test du détecteur darknet cars.data cars.cfg cars_best.weights image1.jpg
#Version 3
darknet02displayannotatedimages cars.cfg image1.jpg
# Aide Sombre
DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
`
Coordonnées de sortie (image) : obtenez les coordonnées de l'objet :
`bash
#Version 2
test du détecteur darknet animaux.data animaux.cfg animauxbest.weights -extoutput dog.jpg
#Version 3
darknet01inference_images animaux chien.jpg
# Aide Sombre
DarkHelp --json animaux.cfg animaux.names animaux_best.weights chien.jpg
`
Traitement vidéo :
`bash
#Version 2
# Exécuter sur un fichier vidéo
Démo du détecteur darknet animaux.data animaux.cfg animauxbest.weights -extoutput test.mp4
# Exécuter sur webcam
Démo du détecteur darknet animaux.data animaux.cfg animaux_best.weights -c 0
#Version 3
# Exécuter sur un fichier vidéo
darknet03display_videos animaux.cfg test.mp4
# Exécuter sur webcam
darknet08display_webcam animaux
# Aide Sombre
# Exécuter sur un fichier vidéo
DarkHelp animaux.cfg animaux.names animaux_best.weights test.mp4
`
Enregistrer les résultats dans la vidéo :
`bash
#Version 2
Démo du détecteur darknet animaux.data animaux.cfg animauxbest.weights test.mp4 -outfilename res.avi
#Version 3
darknet05processvideosmultithreaded animaux.cfg animaux.noms animaux_best.weights test.mp4
# Aide Sombre
DarkHelp animaux.cfg animaux.names animaux_best.weights test.mp4
`
Sortie JSON :
`bash
#Version 2
Démo du détecteur darknet animaux.data animaux.cfg animauxbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
#Version 3
darknet06imagestojson animaux image1.jpg
# Aide Sombre
DarkHelp --json animaux.names animaux.cfg animaux_best.weights image1.jpg
`
GPU spécifique : exécuté sur un GPU désigné :
`bash
#Version 2
Démo du détecteur darknet animaux.data animaux.cfg animaux_best.weights -i 1 test.mp4
`
Contrôle de précision : évaluez la précision du réseau :
`bash
Carte du détecteur Darknet Driving.data Driving.cfg Driving_best.weights
`
Calculer les ancres :
`bash
détecteur darknet calcanchors animaux.data -numof_clusters 6 -largeur 320 -hauteur 256
`
Former un nouveau réseau
DarkMark : pour une approche intuitive et rationalisée de l'annotation et de la formation, utilisez DarkMark.
Configuration manuelle :
1. Créer un répertoire : créez un dossier pour vos données d'entraînement.
2. Copier la configuration : choisissez un fichier de configuration comme modèle, par exemple cfg/yolov4-tiny.cfg, et copiez-le dans votre répertoire.
3. Créez un fichier .names : créez un fichier texte (par exemple, animals.names) répertoriant vos classes, une par ligne.
4. Créer un fichier .data : Créez un fichier texte (par exemple, cats.data) avec la structure suivante :
`
cours = 4
train = /chemin/vers/animaux_train.txt
valide = /chemin/vers/animaux_valid.txt
noms = /chemin/vers/animaux.noms
sauvegarde = /chemin/vers/répertoire_sauvegarde
`
5. Préparez l'ensemble de données : organisez les images et les fichiers d'annotation correspondants dans un répertoire.
6. Créer des fichiers texte Train/Valid : créez deux fichiers texte (animauxtrain.txt, animauxvalid.txt) répertoriant les chemins d'accès aux images pour la formation et la validation.
7. Modifier la configuration :
* Définir le lot = 64.
* Ajustez les subdivisions en fonction de la mémoire de votre GPU.
Définissez max_batches sur une valeur appropriée (par exemple, 2 000 classes).
* Définissez les étapes à 80 % et 90 % de max_batches.
* Ajustez la largeur et la hauteur en fonction des dimensions de votre réseau.
* Mettez à jour les classes pour qu'elles correspondent au nombre de classes.
* Modifier les filtres dans les sections [convolutionnelles] avant les sections [yolo].
8. Commencer la formation :
`bash
cd /chemin/vers/animaux
détecteur darknet -map -dont_show train animaux.data animaux.cfg
`
9. Afficher la progression : surveillez la progression de la formation via le fichier chart.png.
Autres outils et liens
DarkMark : cet outil simplifie l'annotation, la vérification et la génération de fichiers pour la formation avec Darknet.
DarkHelp : une CLI alternative robuste pour Darknet avec des fonctionnalités telles que la mosaïque d'images et le suivi d'objets.
FAQ Darknet/YOLO : trouvez les réponses aux questions fréquemment posées.
Chaîne YouTube de Stéphane : Accédez à des tutoriels et des exemples de vidéos.
Serveur Discord Darknet/YOLO : rejoignez la communauté pour obtenir de l'aide et des discussions.
Feuille de route
Complété:
Remplacement de qsort() par std::sort() pour plus d'efficacité.
Suppression du code obsolète (par exemple, check_mistakes, getchar(), system()).
Migration de Darknet vers le compilateur C++.
Correction de problèmes de build Windows.
Prise en charge de Python restaurée.
Création de la bibliothèque Darknet.
Réactivation du code CUDA/GPU, CUDNN et moitié CUDNN.
Informations sur la version CUDA améliorées.
Jeu d’instructions AVX réactivé.
Suppression des anciennes solutions et du Makefile.
A fait d'OpenCV une dépendance obligatoire.
Suppression des dépendances de bibliothèque obsolètes (par exemple, pthread, STB).
CMakeLists.txt réécrit pour une détection CUDA améliorée.
Activation des builds hors source.
Sortie améliorée du numéro de version.
Implémentation d'optimisations de performances pour la formation et l'inférence.
Code nettoyé pour une meilleure lisibilité.
Darknet.h réécrit pour une API améliorée.
Prise en charge améliorée des appareils Jetson basés sur ARM.
API Python fixe dans la V3.
Objectifs à court terme :
Remplacez printf() par std::cout.
Enquêtez sur la prise en charge de la caméra zed.
Améliorez l’analyse de la ligne de commande.
Objectifs à moyen terme :
Remplacez tout le code char par std::string.
Adressez les avertissements du compilateur.
Améliorez l'utilisation de cv::Mat au lieu de structures d'image personnalisées.
Mettez à niveau la fonctionnalité de liste vers std :: vector ou std :: list.
Prend en charge les images en niveaux de gris à 1 canal.
Ajoutez la prise en charge des images à canal N (N > 3).
Nettoyage du code en cours.
Objectifs à long terme :
Résolvez les problèmes CUDA/CUDNN sur différents GPU.
Réécrivez le code CUDA+cuDNN pour une efficacité améliorée.
Découvrez la prise en charge des GPU non NVIDIA.
Implémentez des cadres de délimitation pivotés et un support "d'angle".
Ajoutez des points clés, des squelettes et des cartes thermiques.
Introduire des capacités de segmentation.