Cadre de détection d'objets Darknet et YOLO
Logos !darknet et hank.ai
Darknet est un framework de réseau neuronal open source écrit en C, C++ et CUDA.
YOLO (You Only Look Once) est un système de détection d'objets en temps réel de pointe qui fonctionne dans le cadre Darknet.
Découvrez comment Hank.ai aide la communauté Darknet/YOLO
Annonce du Darknet V3 "Jazz"
Consultez le site Darknet/YOLO
Veuillez lire la FAQ Darknet/YOLO
Rejoignez le serveur Discord Darknet/YOLO
Papiers
1. Papier YOLOv7
2. Papier à l'échelle-YOLOv4
3. Papier YOLOv4
4. Papier YOLOv3
Informations générales
Le framework Darknet/YOLO est plus rapide et plus précis que les autres frameworks et versions YOLO.
Le framework est entièrement gratuit et open source. Vous pouvez intégrer Darknet/YOLO dans des projets et produits existants, y compris des produits commerciaux, sans licence ni frais.
Darknet V3 (« Jazz »), sorti en octobre 2024, peut exécuter avec précision des vidéos d'ensembles de données LEGO jusqu'à 1 000 FPS lors de l'utilisation d'un GPU NVIDIA RTX 3090, ce qui signifie que chaque image vidéo peut être traitée en 1 milliseconde ou lue, redimensionnée et traitée par Darknet. /YOLO en moins de temps.
Si vous avez besoin d'aide ou souhaitez discuter de Darknet/YOLO, veuillez rejoindre le serveur Discord Darknet/YOLO : https://discord.gg/zSq8rtW
La version CPU de Darknet/YOLO peut fonctionner sur des appareils simples tels que le Raspberry Pi, les serveurs cloud et Colab, les ordinateurs de bureau, les ordinateurs portables et les plateformes de formation haut de gamme. La version GPU de Darknet/YOLO nécessite le GPU compatible CUDA de NVIDIA.
Darknet/YOLO est connu pour fonctionner sous Linux, Windows et Mac. Voir les instructions de construction ci-dessous.
Version Darknet
Les outils Darknet originaux, écrits par Joseph Redmon en 2013-2017, n'avaient pas de numéro de version. Nous considérons cette version 0.x.
Le prochain référentiel Darknet populaire maintenu par Alexey Bochkovskiy de 2017 à 2021 n'a pas non plus de numéro de version. Nous considérons cette version 1.x.
Le référentiel Darknet, sponsorisé par Hank.ai et maintenu par Stéphane Charette depuis 2023, est le premier à disposer d'une commande de version. De 2023 à fin 2024, il revient à la version 2.x « OAK ».
L’objectif est de casser le moins possible les fonctionnalités existantes tout en se familiarisant avec la base de code.
Réécrivez les étapes de construction afin que nous disposions d'une manière unifiée de créer sous Windows et Linux à l'aide de CMake.
Convertissez la base de code pour utiliser un compilateur C++.
Chart.png amélioré pendant la formation.
Corrections de bugs et optimisations liées aux performances, principalement liées à la réduction du temps nécessaire à la formation du réseau.
La dernière branche de cette base de code est la version 2.1 dans la branche v2.
La prochaine phase de développement commence mi-2024 et sortira en octobre 2024. La commande version renvoie désormais 3.x "JAZZ".
Suppression de nombreuses commandes anciennes et non maintenues.
De nombreuses optimisations de performances, tant au moment de la formation qu'au moment de l'inférence.
L'API C traditionnelle a été modifiée ; les applications utilisant l'API Darknet d'origine nécessitent des modifications mineures : https://darknetcv.ai/api/api.html
Nouvelle API Darknet V3 C et C++ : https://darknetcv.ai/api/api.html
Nouvelles applications et exemples de code dans src-examples : https://darknetcv.ai/api/files.html
Si vous devez exécuter l'une de ces commandes, vous pouvez toujours consulter la branche v2 précédente. Veuillez nous le faire savoir afin que nous puissions étudier l'ajout de commandes manquantes.
Poids pré-entraînés MSCOCO
Pour plus de commodité, plusieurs versions populaires de YOLO sont pré-entraînées sur l'ensemble de données MSCOCO. Cet ensemble de données contient 80 catégories et peut être consulté dans le fichier texte cfg/coco.names.
Il existe plusieurs autres ensembles de données plus simples et poids pré-entraînés disponibles pour tester Darknet/YOLO, tels que LEGO Gears et Rolodex. Pour plus d’informations, consultez la FAQ Darknet/YOLO.
Les poids pré-entraînés MSCOCO peuvent être téléchargés à partir de plusieurs emplacements différents ou à partir de ce référentiel :
1. YOLOv2, novembre 2016
* YOLOv2-minuscule
*YOLOv2-complet
2. YOLOv3, mai 2018
* YOLOv3-minuscule
*YOLOv3-complet
3. YOLOv4, mai 2020
* YOLOv4-minuscule
*YOLOv4-complet
4. YOLOv7, août 2022
* YOLOv7-minuscule
*YOLOv7-complet
Les poids pré-entraînés MSCOCO sont uniquement destinés à des fins de démonstration. Les fichiers .cfg et .names correspondants pour MSCOCO se trouvent dans le répertoire cfg. Exemple de commande :
`bash
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.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
Notez qu’il faut former son propre réseau. MSCOCO est souvent utilisé pour confirmer que tout va bien.
construire
Les différentes méthodes de construction disponibles dans le passé (avant 2023) ont été fusionnées en une solution unifiée. Darknet nécessite C++ 17 ou supérieur, OpenCV et l'utilisation de CMake pour générer les fichiers de projet nécessaires.
Vous n'avez pas plus besoin de connaître le C++ pour créer, installer ou exécuter Darknet/YOLO que vous n'avez besoin d'être mécanicien pour conduire une voiture.
Soyez conscient si vous suivez un didacticiel plus ancien comportant des étapes de construction plus complexes ou si les étapes de construction ne correspondent pas à celles de ce fichier Lisez-moi. À partir d’août 2023, les nouvelles étapes de construction sont décrites ci-dessous.
Les développeurs de logiciels sont encouragés à visiter https://darknetcv.ai/ pour plus d'informations sur les composants internes du framework de détection d'objets Darknet/YOLO.
Google Colab
Les instructions de Google Colab sont les mêmes que celles de Linux. Il existe plusieurs notebooks Jupyter montrant comment effectuer certaines tâches, telles que la formation de nouveaux réseaux.
Consultez le notebook dans le sous-répertoire colab ou suivez les instructions Linux ci-dessous.
Méthode Linux CMake
Tutoriel de construction Darknet pour Linux
Facultatif : si vous disposez d'un GPU NVIDIA moderne, vous pouvez installer CUDA ou CUDA+cuDNN à ce stade. S'il est installé, Darknet utilisera votre GPU pour accélérer le traitement des images (et des vidéos).
Vous devez supprimer le fichier CMakeCache.txt du répertoire de construction Darknet pour forcer CMake à retrouver tous les fichiers nécessaires.
N'oubliez pas de reconstruire le Darknet.
Darknet peut fonctionner sans lui, mais si vous souhaitez former un réseau personnalisé, vous avez besoin de CUDA ou CUDA+cuDNN.
Visitez https://developer.nvidia.com/cuda-downloads pour télécharger et installer CUDA.
Visitez https://developer.nvidia.com/rdp/cudnn-download ou https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview pour télécharger et installez cuDNN.
Après avoir installé CUDA, assurez-vous que vous pouvez exécuter nvcc et nvidia-smi. Vous devrez peut-être modifier la variable PATH.
Si vous installez CUDA ou CUDA+cuDNN ultérieurement, ou si vous effectuez une mise à niveau vers une version plus récente du logiciel NVIDIA :
Ces instructions supposent (mais ne nécessitent pas !) un système exécutant Ubuntu 22.04. Si vous utilisez une autre distribution, ajustez si nécessaire.
`bash
sudo apt-get install build-essential git libopencv-dev cmake
mkdir ~/srccd ~/src
clone git https://github.com/hank-ai/darknet
cd darknet
mkdir construire
construction de CD
cmake -DCMAKEBUILDTYPE=Version ..
créer le paquet -j4
sudo dpkg -i darknet-VERSION.deb
`
Si vous utilisez une ancienne version de CMake, vous devrez mettre à niveau CMake avant d'exécuter la commande cmake ci-dessus. La mise à niveau de CMake sur Ubuntu peut être effectuée à l'aide de la commande suivante :
`bash
sudo apt-get purge cmake
sudo snap install cmake --classic
`
Si vous utilisez bash comme shell de commande, vous devrez redémarrer votre shell à ce stade. Si vous utilisez du poisson, il devrait immédiatement suivre le nouveau chemin.
Utilisateurs avancés :
Si vous souhaitez créer un fichier d'installation RPM au lieu d'un fichier DEB, consultez les lignes pertinentes dans CM_package.cmake. Avant d'exécuter le package make -j4, vous devez modifier ces deux lignes :
`cmake
SET (CPACKGENERATOR "DEB")# SET (CPACKGENERATOR "RPM")
`
Pour les distributions comme Centos et OpenSUSE, vous devez remplacer ces deux lignes dans CM_package.cmake par :
`cmake
ENSEMBLE (CPACK_GENERATOR "DEB")
ENSEMBLE (CPACK_GENERATOR "RPM")
`
Pour installer un package, utilisez le gestionnaire de packages habituel de votre distribution. Par exemple, sur un système basé sur Debian tel qu'Ubuntu :
`bash
sudo dpkg -i darknet-2.0.1-Linux.deb
`
L'installation du package .deb copiera les fichiers suivants :
/usr/bin/darknet est l'exécutable Darknet habituel. Exécutez la version darknet à partir de la CLI pour confirmer qu'elle est correctement installée.
/usr/include/darknet.h est l'API Darknet, utilisée par les développeurs C, C++ et Python.
/usr/include/darknet_version.h contient des informations de version pour les développeurs.
/usr/lib/libdarknet.so est une bibliothèque permettant de relier les développeurs C, C++ et Python.
/opt/darknet/cfg/... est l'endroit où tous les modèles .cfg sont stockés.
Vous avez terminé maintenant ! Darknet est construit et installé dans /usr/bin/. Exécutez la commande suivante pour tester : version darknet.
Si vous n'avez pas /usr/bin/darknet, vous ne l'avez pas installé, vous venez de le construire ! Assurez-vous d'installer le fichier .deb ou .rpm comme décrit ci-dessus.
Méthodes Windows CMake
Ces instructions supposent une nouvelle installation de Windows 11 22H2.
Ouvrez une fenêtre d'invite de commande cmd.exe normale et exécutez la commande suivante :
`bash
Winget installe Git.Git
Winget installe Kitware.CMake
Winget installe nsis.nsis
Winget installe Microsoft.VisualStudio.2022.Community
`
À ce stade, nous devons modifier l'installation de Visual Studio pour inclure la prise en charge des applications C++ :
Cliquez sur le menu Démarrer de Windows et exécutez Visual Studio Installer
Cliquez sur "Modifier"
Sélectionnez "Développement de postes de travail en C++"
Cliquez sur « Modifier » dans le coin inférieur droit, puis cliquez sur « Oui »
Une fois que tout est téléchargé et installé, cliquez à nouveau sur le menu Démarrer de Windows et sélectionnez Invite de commandes du développeur pour Visual Studio 2022. N'utilisez pas PowerShell pour ces étapes, vous rencontrerez des problèmes !
Utilisateurs avancés :
Au lieu d'exécuter une invite de commande de développeur, vous pouvez vous connecter à l'appareil à l'aide d'une invite de commande normale ou de SSH et exécuter manuellement « Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat ».
Une fois que l'invite de commande du développeur s'exécute comme ci-dessus (pas PowerShell !), exécutez la commande suivante pour installer Microsoft VCPKG, qui sera utilisé pour créer OpenCV :
`bash
CDC:
mkdir c:srccd c:src
clone git https://github.com/microsoft/vcpkg
cdvcpkg
bootstrap-vcpkg.bat
.vcpkg.exe intégrer l'installation
.vcpkg.exe intégrer powershell.vcpkg.exe installer opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
Veuillez être patient avec cette dernière étape car son exécution peut prendre beaucoup de temps. Cela nécessite beaucoup de téléchargement et de construction.
Utilisateurs avancés :
Notez qu'il existe de nombreux autres modules facultatifs que vous souhaiterez peut-être ajouter lors de la création d'OpenCV. Exécutez la recherche .vcpkg.exe opencv pour voir la liste complète.
Facultatif : si vous disposez d'un GPU NVIDIA moderne, vous pouvez installer CUDA ou CUDA+cuDNN à ce stade. S'il est installé, Darknet utilisera votre GPU pour accélérer le traitement des images (et des vidéos).
Vous devez supprimer le fichier CMakeCache.txt du répertoire de construction Darknet pour forcer CMake à retrouver tous les fichiers nécessaires.
N'oubliez pas de reconstruire le Darknet.
Darknet peut fonctionner sans lui, mais si vous souhaitez former un réseau personnalisé, vous avez besoin de CUDA ou CUDA+cuDNN.
Visitez https://developer.nvidia.com/cuda-downloads pour télécharger et installer CUDA.
Visitez https://developer.nvidia.com/rdp/cudnn-download ou https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows pour télécharger et installer cuDNN.
Après avoir installé CUDA, assurez-vous de pouvoir exécuter nvcc.exe et nvidia-smi.exe. Vous devrez peut-être modifier la variable PATH.
Après avoir téléchargé cuDNN, décompressez et copiez les répertoires bin, include et lib dans C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[version]/. Vous devrez peut-être écraser certains fichiers.
Si vous installez CUDA ou CUDA+cuDNN ultérieurement, ou si vous effectuez une mise à niveau vers une version plus récente du logiciel NVIDIA :
CUDA doit être installé après Visual Studio. Si vous mettez à niveau Visual Studio, n'oubliez pas de réinstaller CUDA.
Une fois toutes les étapes précédentes terminées avec succès, vous devez cloner Darknet et le créer. Dans cette étape, nous devons également indiquer à CMake où se trouve vcpkg afin qu'il puisse trouver OpenCV et d'autres dépendances :
`bash
cdc:src
clone git https://github.com/hank-ai/darknet.git
cd darknet
mkdir construire
construction de CD
cmake -DCMAKEBUILDTYPE=Release -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=Release PACKAGE.vcxproj
`
Si vous recevez une erreur concernant une DLL CUDA ou cuDNN manquante (par exemple, cublas64_12.dll), copiez manuellement le fichier CUDA .dll dans le même répertoire de sortie que Darknet.exe. Par exemple:
`bash
copier "C: Program FilesNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll" src-cliRelease
`
(Ceci est un exemple ! Veuillez vérifier quelle version vous utilisez et exécutez la commande appropriée pour la version que vous avez installée.)
Après avoir copié les fichiers, réexécutez la dernière commande msbuild.exe pour générer le package d'installation NSIS :
`bash
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
Utilisateurs avancés :
Notez que la sortie de la commande cmake est le fichier de solution Visual Studio normal Darknet.sln. Si vous êtes un développeur de logiciels qui utilise régulièrement l'interface graphique de Visual Studio au lieu de msbuild.exe pour créer des projets, vous pouvez ignorer la ligne de commande et charger le projet Darknet dans Visual Studio.
Vous devriez maintenant avoir ce fichier prêt à être exécuté : C:srcDarknetbuildsrc-cliReleasedarknet.exe. Exécutez la commande suivante pour tester : version C:srcDarknetbuildsrc-cliReleasedarknet.exe.
Pour installer correctement Darknet, les bibliothèques, les fichiers d'inclusion et les DLL nécessaires, exécutez l'assistant d'installation NSIS créé à la dernière étape. Voir le fichier darknet-VERSION.exe dans le répertoire build. Par exemple:
`bash
darknet-2.0.31-win64.exe
`
L'installation du package d'installation NSIS :
Créez un répertoire nommé Darknet, par exemple C:Program FilesDarknet.
Installez l'application CLI darknet.exe et d'autres exemples d'applications.
Installez les fichiers .dll tiers requis, tels que ceux d'OpenCV.
Installez les fichiers Darknet .dll, .lib et .h nécessaires pour utiliser darknet.dll à partir d'autres applications.
Installez le fichier modèle .cfg.
Vous avez terminé maintenant ! Une fois l'assistant d'installation terminé, Darknet sera installé dans C:Program FilesDarknet. Exécutez la commande suivante pour tester : version C:Program FilesDarknetbindarknet.exe.
Si vous n'avez pas C:/Program Files/darknet/bin/darknet.exe, vous ne l'avez pas installé, vous venez de le construire ! Assurez-vous de remplir chaque panneau de l'assistant d'installation NSIS au cours des étapes précédentes.
Utiliser le Darknet
CLI
Ce qui suit n'est pas une liste complète de toutes les commandes prises en charge par Darknet.
En plus de la CLI Darknet, notez également la CLI du projet DarkHelp, qui fournit une CLI alternative pour Darknet/YOLO. DarkHelp CLI possède également plusieurs fonctionnalités avancées non directement disponibles dans Darknet. Vous pouvez utiliser Darknet CLI et DarkHelp CLI ensemble, ils ne s'excluent pas mutuellement.
Pour la plupart des commandes présentées ci-dessous, vous aurez besoin du fichier .weights et de ses fichiers .names et .cfg correspondants. Vous pouvez former votre propre réseau (fortement recommandé !) ou télécharger gratuitement des réseaux que d'autres ont formés et mis à disposition sur Internet. Voici des exemples d'ensembles de données de pré-formation :
1. LEGO Gears (trouver des objets dans les images)
2. Rolodex (trouver du texte dans l'image)
3. MSCOCO (détection de cible standard de catégorie 80)
Les commandes exécutables incluent :
Répertoriez quelques commandes et options pouvant être exécutées :
`bash
aide sur le darknet
`
Vérifier la version :
`bash
version darknet
`
Utiliser la prédiction d'image :
V2 : test du détecteur darknet cars.data cars.cfg cars_best.weights image1.jpg
V3 : darknet02displayannotatedimages cars.cfg image1.jpg
DarkHelp : DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
Coordonnées de sortie :
V2 : test du détecteur darknet animal.data animaux.cfg animauxbest.weights -extoutput dog.jpg
V3 : darknet01inference_images animaux chien.jpg
DarkHelp : DarkHelp --json animaux.cfg animaux.names animaux_best.weights dog.jpg
Vidéo de traitement :
V2 : démo du détecteur darknet animal.data animaux.cfg animauxbest.weights -extoutput test.mp4
V3 : darknet03display_videos animaux.cfg test.mp4
DarkHelp : DarkHelp animaux.cfg animaux.names animaux_best.weights test.mp4
Lecture depuis la webcam :
V2 : démo du détecteur darknet animaux.data animaux.cfg animaux_best.weights -c 0
V3 : animaux darknet08display_webcam
Enregistrer les résultats dans une vidéo :
V2 : démo du détecteur darknet animaux.data animaux.cfg animauxbest.weights test.mp4 -outfilename res.avi
V3 : darknet05processvideosmultithreaded animaux.cfg animaux.noms animaux_best.weights test.mp4
DarkHelp : DarkHelp animaux.cfg animaux.names animaux_best.weights test.mp4
JSON :
V2 : démo du détecteur darknet animal.data animaux.cfg animauxbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
V3 : darknet06imagestojson animaux image1.jpg
DarkHelp : DarkHelp --json animaux.names animaux.cfg animaux_best.weights image1.jpg
Exécuter sur un GPU spécifique :
V2 : démo du détecteur darknet animaux.data animaux.cfg animaux_best.weights -i 1 test.mp4
Vérifiez l'exactitude du réseau neuronal :
`bash
Carte du détecteur Darknet Driving.data Driving.cfg Driving_best.weights ...
`
`
Id Nom AvgPrecision TP FN FP TN Précision ErrorRate Précision Rappel Spécificité FalsePosRate
-- ---- ------------ ------ ------ ------ ------ -------- --------- --------- ------ ---------- ----------
0 véhicule 91,2495 32648 3903 5826 65129 0,9095 0,0905 0,8486 0,8932 0,9179 0,0821
1 moto 80.4499 2936 513 569 5393 0,8850 0,1150 0,8377 0,8513 0,9046 0,0954
2 vélos 89,0912 570 124 104 3548 0,9475 0,0525 0,8457 0,8213 0,9715 0,0285
3 personnes 76,7937 7072 1727 2574 27523 0,8894 0,1106 0,7332 0,8037 0,9145 0,0855
4 nombreux véhicules 64,3089 1068 509 733 11288 0,9087 0,0913 0,5930 0,6772 0,9390 0,0610
5 feu vert 86,8118 1969 239 510 4116 0,8904 0,1096 0,7943 0,8918 0,8898 0,1102
6 lumière jaune 82,0390 126 38 30 1239 0,9525 0,0475 0,8077 0,7683 0,9764 0,0236
7 feu rouge 94.1033 3449 217 451 4643 0.9237 0.0763 0.8844 0.9408 0.9115 0.0885
`
Vérifier la précision mAP@IoU=75 :
`bash
carte du détecteur darknet animaux.data animaux.cfg animauxbest.weights -iouthresh 0,75
`
Il est préférable de recalculer les points d'ancrage dans DarkMark, car il s'exécutera 100 fois de suite et sélectionnera le meilleur point d'ancrage parmi tous les points d'ancrage calculés. Cependant, si vous souhaitez exécuter une ancienne version dans Darknet :
`bash
détecteur darknet calcanchors animaux.data -numof_clusters 6 -largeur 320 -hauteur 256
`
Former un nouveau réseau :
`bash
détecteur darknet -map -dont_show train animaux.data animaux.cfg
`
(Voir également la section formation ci-dessous)
former
Liens rapides vers les sections pertinentes de la FAQ Darknet/YOLO :
1. Comment dois-je configurer mes fichiers et répertoires ?
2. Quel profil dois-je utiliser ?
3. Quelle commande dois-je utiliser lors de la formation de mon propre réseau ?
Utiliser DarkMark pour créer tous les fichiers Darknet nécessaires est le moyen le plus simple d'annoter et de former. C'est certainement la méthode recommandée pour former de nouveaux réseaux de neurones.
Si vous souhaitez paramétrer manuellement les différents fichiers pour entraîner un réseau personnalisé :
1. Créez un nouveau dossier pour stocker les fichiers. Dans cet exemple, vous allez créer un réseau de neurones qui détecte les animaux, créez donc le répertoire suivant : ~/nn/animals/.
2. Copiez l'un des fichiers de configuration Darknet que vous souhaitez utiliser comme modèle. Par exemple, consultez cfg/yolov4-tiny.cfg. Placez-le dans le dossier que vous avez créé. Dans cet exemple, nous avons maintenant ~/nn/animals/animals.cfg.
3. Créez un fichier texte animaux.names dans le même dossier où vous avez placé le fichier de configuration. Dans cet exemple, nous avons maintenant ~/nn/animals/animals.names.
4. Utilisez un éditeur de texte pour modifier le fichier cats.names. Répertoriez les catégories que vous souhaitez utiliser. Vous devez avoir exactement 1 entrée par ligne, pas de lignes vides, pas de commentaires. Dans cet exemple, le fichier .names contiendra exactement 4 lignes :
`
chien
chat
oiseau
cheval
`
5. Créez un fichier texte animaux.data dans le même dossier. Dans cet exemple, le fichier .data contiendra :
`
cours=4
train=/home/username/nn/animals/animals_train.txt
valid=/home/username/nn/animals/animals_valid.txt
noms=/home/username/nn/animaux/animaux.names
sauvegarde=/home/nom d'utilisateur/nn/animaux
`
6. Créez un dossier pour stocker vos images et annotations. Par exemple, cela pourrait être ~/nn/animals/dataset. Chaque image nécessite un fichier .txt correspondant décrivant les annotations de cette image. Le format des fichiers de commentaires .txt est très spécifique. Vous ne pouvez pas créer ces fichiers manuellement car chaque annotation doit contenir les coordonnées précises de l'annotation. Consultez DarkMark ou un autre logiciel similaire pour annoter vos images. Le format d'annotation YOLO est décrit dans la FAQ Darknet/YOLO.
7. Créez les fichiers texte « train » et « valide » nommés dans le fichier .data. Ces deux fichiers texte doivent répertorier toutes les images que Darknet doit utiliser respectivement pour la formation et la validation, pour la validation lors du calcul de mAP%. Il y a exactement une image par ligne. Les chemins et les noms de fichiers peuvent être relatifs ou absolus.
8. Utilisez un éditeur de texte pour modifier votre fichier .cfg.
* Assurez-vous que lot = 64.
* Faites attention aux subdivisions. En fonction de la taille du réseau et de la quantité de mémoire disponible sur le GPU, vous devrez peut-être augmenter les subdivisions. La meilleure valeur à utiliser est 1, alors commencez par cela. Si vous ne parvenez pas à utiliser 1, veuillez consulter la FAQ Darknet/YOLO.
Notez que maxbatches=.... Au début, la valeur optimale à utiliser est un nombre de classes de 2000. Dans cet exemple nous avons 4 animaux, donc 4 * 2000 = 8000. Cela signifie que nous utiliserons maxbatches=8000.
* Notez les étapes =.... Cela doit être défini sur 80 % et 90 % des lots maximum. Dans cet exemple, nous utiliserons steps=6400,7200 car maxbatches est défini sur 8000.
* Notez que width=... et height=.... Ce sont des dimensions de réseau. La FAQ Darknet/YOLO explique comment calculer la taille optimale à utiliser.
* Recherchez toutes les instances contenant la ligne classes=... et modifiez-les avec le nombre de classes dans le fichier .names. Dans cet exemple, nous utiliserons classes=4.
Dans la section [convolutional] avant chaque section [yolo], recherchez toutes les instances contenant la ligne filters=... . La valeur à utiliser est (nombre de catégories + 5) 3. Cela signifie que dans cet exemple, (4 + 5) * 3 = 27. Par conséquent, nous utiliserons filters=27 pour les lignes appropriées.
9. Commencez la formation ! Exécutez la commande suivante :
`bash
cd ~/nn/animaux/
détecteur darknet -map -dont_show train animaux.data animaux.cfg
`
S'il vous plaît, attendez. Les meilleurs poids seront enregistrés sous le nom animaux_best.weights. Vous pouvez observer la progression de la formation en consultant le fichier chart.png. Consultez la FAQ Darknet/YOLO pour connaître les paramètres supplémentaires que vous souhaiterez peut-être utiliser lors de la formation d'un nouveau réseau.
Si vous souhaitez voir plus de détails pendant l'entraînement, ajoutez le paramètre --verbose. Par exemple:
`bash
détecteur darknet -map -dont_show --verbose train animaux.data animaux.cfg
`
Autres outils et liens
Pour gérer votre projet Darknet/YOLO, annoter des images, valider vos annotations et générer les fichiers nécessaires à la formation avec Darknet, voir DarkMark.
Pour une CLI alternative puissante à Darknet, pour utiliser la mosaïque d'images, le suivi d'objets dans vos vidéos ou pour une API C++ puissante qui peut être facilement utilisée dans des applications commerciales, consultez DarkHelp.
Consultez la FAQ Darknet/YOLO pour voir si elle peut vous aider à répondre à votre question.
Découvrez les nombreux tutoriels et exemples de vidéos sur la chaîne YouTube de Stéphane
Si vous avez des questions d'assistance ou souhaitez discuter avec d'autres utilisateurs de Darknet/YOLO, veuillez rejoindre le serveur Discord Darknet/YOLO.
feuille de route
Dernière mise à jour : 2024-10-30
Complété
1. Remplacez qsort() utilisé pendant l'entraînement par std::sort() (d'autres étranges existent encore)
2. Débarrassez-vous de check_mistakes, getchar() et system()
3. Convertissez Darknet pour utiliser un compilateur C++ (g++ sous Linux, Visual Studio sous Windows)
4. Corriger la version de Windows
5. Correction de la prise en charge de Python
6. Créez une bibliothèque darknet
7. Réactiver les labels dans les prédictions (code "alphabet")
8. Réactivez le code CUDA/GPU
9. Réactivez CUDNN
10. Réactivez la moitié CUDNN
11. Ne codez pas en dur l'architecture CUDA
12. Meilleures informations sur la version CUDA
13. Réactivez AVX
14. Supprimez l'ancienne solution et le Makefile
15. Rendre OpenCV non facultatif
16. Supprimer la dépendance à l'ancienne bibliothèque pthread
17. Supprimer le STB
18. Réécrivez CMakeLists.txt pour utiliser la nouvelle instrumentation CUDA
19. Supprimez l'ancien code "alphabet" et supprimez plus de 700 images dans les données/étiquettes
20. Construire en dehors de la source
21. Avoir une meilleure sortie du numéro de version
22. Optimisation des performances liées à la formation (tâches continues)
23. Optimisation des performances liées à l'inférence (tâches en cours)
24. Utilisez le passage par référence autant que possible
25. Nettoyer les fichiers .hpp
26. Réécrire darknet.h
27. Ne convertissez pas cv::Mat en void*, utilisez-le plutôt comme un objet C++ approprié
28. Corriger ou rendre cohérente l'utilisation des structures d'image internes
29. Correction de la version pour les appareils Jetson basés sur ARM
*Il est peu probable que les appareils Jetson d'origine soient réparés car ils ne sont plus pris en charge par NVIDIA (pas de compilateur C++17)
* Le nouvel appareil Jetson Orin fonctionne
30. Correction de l'API Python dans la V3
* Besoin d'un meilleur support Python (y a-t-il des développeurs Python qui souhaitent aider avec cela ?)
objectifs à court terme
1. Remplacez printf() par std::cout (travail en cours)
2. Vérifiez l'ancien support de l'appareil photo Zed
3. Analyse de ligne de commande meilleure et plus cohérente (travail en cours)
objectifs à moyen terme
1. Supprimez tous les codes char* et remplacez-les par std :: string
2. Ne masquez pas les avertissements et nettoyez les avertissements du compilateur (en cours)
3. Meilleure utilisation de cv::Mat au lieu des structures d'images personnalisées en C (travail en cours)
4. Remplacez l'ancienne fonction de liste par std :: vector ou std :: list
5. Correction de la prise en charge des images en niveaux de gris à 1 canal
6. Ajoutez la prise en charge des images à canal N où N > 3 (par exemple, images avec une profondeur supplémentaire ou des canaux thermiques)
7. Nettoyage du code en cours (en cours)
objectifs à long terme
1. Résoudre les problèmes CUDA/CUDNN sur tous les GPU
2. Réécrivez le code CUDA+cuDNN
3. Pensez à ajouter la prise en charge des GPU non NVIDIA
4. Boîte englobante pivotée, ou une sorte de support « d'angle »
5. Points clés/squelette
6. Carte thermique (en cours)
7. Diviser