Darknet Object Detection Framework und YOLO
Der Herausgeber von Downcodes vermittelt Ihnen ein tiefgreifendes Verständnis von Darknet, einem Open-Source-Framework für neuronale Netzwerke, das in C, C++ und CUDA geschrieben ist, und dem fortschrittlichen Echtzeit-Zielerkennungssystem YOLO (You Only Look Once), das auf dem Darknet-Framework läuft .
Das Darknet/YOLO-Framework ist schneller und genauer als andere Frameworks und YOLO-Versionen. Dieses Framework ist völlig kostenlos und Open Source. Sie können Darknet/YOLO ohne Lizenzen oder Gebühren in bestehende Projekte und Produkte integrieren, auch in kommerzielle Projekte.
Darknet V3 („Jazz“), veröffentlicht im Oktober 2024, kann LEGO-Datensatzvideos bei Verwendung einer NVIDIA RTX 3090-GPU präzise mit bis zu 1000 FPS ausführen, was bedeutet, dass jedes Videobild 1 Millisekunde oder weniger dauert. Intern gelesen, in der Größe geändert und verarbeitet von Darknet/ YOLO.
Wenn Sie Hilfe benötigen oder über Darknet/YOLO diskutieren möchten, treten Sie bitte dem Darknet/YOLO Discord-Server bei: https://discord.gg/zSq8rtW
Die CPU-Version von Darknet/YOLO kann auf einfachen Geräten wie Raspberry Pi, Cloud- und Kollaborationsservern, Desktops, Laptops und High-End-Schulungsgeräten ausgeführt werden. Die GPU-Version von Darknet/YOLO erfordert die CUDA-unterstützte GPU von NVIDIA.
Darknet/YOLO läuft bekanntermaßen auf Linux, Windows und Mac. Bitte beachten Sie die Bauanleitung unten.
Die ursprünglichen Darknet-Tools, die Joseph Redmon in den Jahren 2013–2017 geschrieben hatte, hatten keine Versionsnummern. Wir gehen davon aus, dass es sich hierbei um Version 0.x handelt.
Auch die nächste beliebte Darknet-Bibliothek, die von Alexey Bochkovskiy von 2017 bis 2021 gepflegt wurde, hatte keine Versionsnummer. Wir gehen davon aus, dass es sich um Version 1.x handelt.
Ab 2023 ist die von Hank.ai gesponserte und von Stéphane Charette gepflegte Darknet-Bibliothek die erste Bibliothek, die über einen Versionsbefehl verfügt. Von 2023 bis Ende 2024 erfolgt die Rückkehr zur Version 2.x „OAK“.
Ziel ist es, sich mit der Codebasis vertraut zu machen und gleichzeitig Störungen der vorhandenen Funktionalität zu minimieren.
Schreiben Sie die Build-Schritte neu, sodass wir eine einheitliche Möglichkeit haben, mit CMake unter Windows und Linux zu erstellen.
Konvertieren Sie die Codebasis, um einen C++-Compiler zu verwenden.
Chart.png während des erweiterten Trainings.
Fehlerbehebungen und leistungsbezogene Optimierungen, hauptsächlich im Zusammenhang mit der Reduzierung der Zeit, die zum Trainieren des Netzwerks erforderlich ist.
Der letzte Zweig dieser Codebasis ist Version 2.1 im v2-Zweig.
Die nächste Entwicklungsphase beginnt Mitte 2024, die Veröffentlichung erfolgt im Oktober 2024. Der Versionsbefehl gibt jetzt 3.x „JAZZ“ zurück.
Wenn Sie einen dieser Befehle ausführen müssen, können Sie jederzeit den vorherigen v2-Zweig auschecken. Teilen Sie uns dies bitte mit, damit wir das erneute Hinzufügen fehlender Befehle untersuchen können.
Viele alte und nicht gepflegte Befehle wurden entfernt.
Während des Trainings und der Inferenz wurden viele Leistungsoptimierungen vorgenommen.
Änderungen an der alten C-API; Anwendungen, die die ursprüngliche Darknet-API verwenden, erfordern geringfügige Änderungen: https://darknetcv.ai/api/api.html
Neue Darknet V3 C- und C++-API: https://darknetcv.ai/api/api.html
Neue Anwendungen und Beispielcode in src-examples: https://darknetcv.ai/api/files.html
Der Einfachheit halber sind mehrere beliebte Versionen von YOLO auf dem MSCOCO-Datensatz vorab trainiert. Dieser Datensatz hat 80 Kategorien und kann in der Textdatei cfg/coco.names eingesehen werden.
Es stehen mehrere andere einfachere Datensätze und vorab trainierte Gewichte zum Testen von Darknet/YOLO zur Verfügung, beispielsweise LEGO Gears und Rolodex. Weitere Informationen finden Sie in den Darknet/YOLO-FAQ.
Vorab trainierte MSCOCO-Gewichte können von verschiedenen Orten heruntergeladen werden und können auch von diesem Repository heruntergeladen werden:
YOlov2, November 2016
*YOLOv2-tiny
*YOLOv2-full
YOlov3, Mai 2018
* YOLOv3-tiny
*YOlov3-full
YOlov4, Mai 2020
* YOLOv4-tiny
*YOLOv4-full
YOLOv7, August 2022
* YOLOv7-tiny
*YOLOv7-voll
Die vortrainierten MSCOCO-Gewichte dienen nur zu Demonstrationszwecken. Die .cfg- und .names-Dateien, die MSCOCO entsprechen, befinden sich im cfg-Verzeichnis. Beispielbefehl:
`
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
`
Beachten Sie, dass man sein eigenes Netzwerk trainieren sollte. MSCOCO wird normalerweise verwendet, um zu bestätigen, dass alles ordnungsgemäß funktioniert.
Verschiedene in der Vergangenheit (vor 2023) bereitgestellte Build-Methoden wurden zu einer einheitlichen Lösung zusammengeführt. Darknet erfordert C++17 oder höher, OpenCV und verwendet CMake, um die notwendigen Projektdateien zu generieren.
Sie müssen keine C++-Kenntnisse haben, um Darknet/YOLO zu erstellen, zu installieren oder auszuführen, genauso wie Sie kein Mechaniker sein müssen, um ein Auto zu fahren.
Die Anweisungen für Google Colab sind die gleichen wie für Linux. Es werden eine Reihe von Jupyter-Notebooks bereitgestellt, die zeigen, wie bestimmte Aufgaben ausgeführt werden, beispielsweise das Training eines neuen Netzwerks.
Schauen Sie sich bitte das Notebook im Unterverzeichnis colab an oder befolgen Sie die nachstehenden Linux-Anweisungen.
Darknet-Build-Tutorial unter Linux
Optional: Wenn Sie über eine moderne NVIDIA-GPU verfügen, können Sie zu diesem Zeitpunkt CUDA oder CUDA+cuDNN installieren. Falls installiert, nutzt Darknet Ihre GPU, um die Bild- (und Video-)Verarbeitung zu beschleunigen.
Sie müssen die Datei CMakeCache.txt aus dem Darknet-Build-Verzeichnis löschen, um CMake zu zwingen, alle erforderlichen Dateien erneut zu finden.
Denken Sie daran, Darknet neu aufzubauen.
Darknet kann ohne ausgeführt werden, aber wenn Sie ein benutzerdefiniertes Netzwerk trainieren möchten, benötigen Sie CUDA oder CUDA+cuDNN.
Besuchen Sie https://developer.nvidia.com/cuda-downloads, um CUDA herunterzuladen und zu installieren.
Besuchen Sie https://developer.nvidia.com/rdp/cudnn-download oder https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager-installation-overview zum Herunterladen und cuDNN installieren.
Stellen Sie nach der Installation von CUDA sicher, dass nvcc und nvidia-smi ausgeführt werden können. Möglicherweise müssen Sie die PATH-Variable ändern.
Wenn Sie CUDA oder CUDA+cuDNN später installieren oder auf eine neuere Version der NVIDIA-Software aktualisieren:
Diese Anweisungen gehen von einem System aus, auf dem Ubuntu 22.04 läuft (aber erfordern es nicht!). Wenn Sie eine andere Distribution verwenden, passen Sie diese nach Bedarf an.
`
sudo apt-get install build-essential git libopencv-dev cmake
mkdir ~/srccd ~/src
Git-Klon https://github.com/hank-ai/darknetcd Darknet
mkdir buildcd build
cmake -DCMAKEBUILDTYPE=Release ..
Erstellen Sie ein -j4-Paket
sudo dpkg -i darknet-VERSION.deb
`
Wenn Sie eine ältere Version von CMake verwenden, müssen Sie CMake aktualisieren, bevor Sie den oben genannten cmake-Befehl ausführen. CMake kann unter Ubuntu mit dem folgenden Befehl aktualisiert werden:
`
sudo apt-get purge cmakesudo snap install cmake --classic
`
Wenn Sie Bash als Befehls-Shell verwenden, müssen Sie an dieser Stelle Ihre Shell neu starten. Bei der Verwendung von Fisch sollte dieser sofort den neuen Weg einschlagen.
Fortgeschrittene Benutzer:
Wenn Sie eine RPM-Installationsdatei anstelle einer DEB-Datei erstellen möchten, sehen Sie sich die entsprechenden Zeilen in CM_package.cmake an. Bevor Sie make -j4 package ausführen, müssen Sie diese beiden Zeilen bearbeiten:
`
SET (CPACKGENERATOR „DEB“)# SET (CPACKGENERATOR „RPM“)
`
Für Distributionen wie Centos und OpenSUSE müssen Sie diese beiden Zeilen in CM_package.cmake ändern zu:
`
SET (CPACKGENERATOR „DEB“)SET (CPACKGENERATOR „RPM“)
`
Nachdem das Installationspaket erstellt wurde, können Sie es mit dem allgemeinen Paketmanager der Distribution installieren. Beispielsweise auf einem Debian-basierten System wie Ubuntu:
`
sudo dpkg -i darknet-2.0.1-Linux.deb
`
Durch die Installation des .deb-Pakets werden die folgenden Dateien kopiert:
/usr/bin/darknet ist eine häufig verwendete ausführbare Darknet-Datei. Führen Sie die Darknet-Version über die CLI aus, um zu bestätigen, dass sie korrekt installiert ist.
/usr/include/darknet.h ist die Darknet-API für C-, C++- und Python-Entwickler.
/usr/include/darknet_version.h enthält die Versionsinformationen des Entwicklers.
/usr/lib/libdarknet.so ist eine Bibliothek, mit der C-, C++- und Python-Entwickler verknüpfen können.
/opt/darknet/cfg/... ist der Ort, an dem alle .cfg-Vorlagen gespeichert sind.
Jetzt sind Sie fertig! Darknet ist in /usr/bin/ eingebaut und installiert. Führen Sie zum Testen den folgenden Befehl aus: Darknet-Version.
Wenn Sie /usr/bin/darknet nicht haben, bedeutet das, dass Sie es nicht installiert, sondern nur erstellt haben! Bitte stellen Sie sicher, dass Sie die .deb- oder .rpm-Datei wie oben beschrieben installieren.
Diese Anleitung geht von einer Neuinstallation von Windows 11 22H2 aus.
Öffnen Sie ein normales cmd.exe-Eingabeaufforderungsfenster und führen Sie den folgenden Befehl aus:
`
Winget installiert Git.Git
Winget installiert Kitware.CMake
Winget installiert nsis.nsis
Winget installiert Microsoft.VisualStudio.2022.Community
`
An dieser Stelle müssen wir die Visual Studio-Installation ändern, um Unterstützung für C++-Anwendungen einzuschließen:
1. Klicken Sie auf das „Windows-Start“-Menü und führen Sie „Visual Studio Installer“ aus.
2. Klicken Sie auf Bearbeiten.
3. Wählen Sie Desktop-Entwicklung mit C++.
4. Klicken Sie unten rechts auf Bearbeiten und dann auf Ja.
Nachdem alles heruntergeladen und installiert wurde, klicken Sie erneut auf das „Windows-Start“-Menü und wählen Sie die Entwickler-Eingabeaufforderung für VS 2022 aus. Verwenden Sie für diese Schritte nicht PowerShell, da sonst Probleme auftreten!
Fortgeschrittene Benutzer:
Anstatt die Entwickler-Eingabeaufforderung auszuführen, können Sie auch eine normale Eingabeaufforderung oder SSH zum Gerät verwenden und „ProgrammeMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat“ manuell ausführen.
Führen Sie nach dem Ausführen der Entwickler-Eingabeaufforderung oben (nicht PowerShell!) den folgenden Befehl aus, um Microsoft VCPKG zu installieren, das dann zum Erstellen von OpenCV verwendet wird:
`
CDC:
mkdir c:srccd c:src
Git-Klon https://github.com/microsoft/vcpkgcd vcpkg
Bootstrap-vcpkg.bat .vcpkg.exe integrieren
.vcpkg.exe installieren, powershell.vcpkg.exe integrieren, opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows installieren
`
Seien Sie bei diesem letzten Schritt geduldig, da die Ausführung lange dauern kann. Es erfordert das Herunterladen und Erstellen einer Menge Dinge.
Fortgeschrittene Benutzer:
Beachten Sie, dass Sie beim Erstellen von OpenCV viele weitere optionale Module hinzufügen können. Führen Sie „.vcpkg.exe search opencv“ aus, um die vollständige Liste anzuzeigen.
Optional: Wenn Sie über eine moderne NVIDIA-GPU verfügen, können Sie zu diesem Zeitpunkt CUDA oder CUDA+cuDNN installieren. Falls installiert, nutzt Darknet Ihre GPU, um die Bild- (und Video-)Verarbeitung zu beschleunigen.
Sie müssen die Datei CMakeCache.txt aus dem Darknet-Build-Verzeichnis löschen, um CMake zu zwingen, alle erforderlichen Dateien erneut zu finden.
Denken Sie daran, Darknet neu aufzubauen.
Darknet kann ohne ausgeführt werden, aber wenn Sie ein benutzerdefiniertes Netzwerk trainieren möchten, benötigen Sie CUDA oder CUDA+cuDNN.
Besuchen Sie https://developer.nvidia.com/cuda-downloads, um CUDA herunterzuladen und zu installieren.
Besuchen Sie https://developer.nvidia.com/rdp/cudnn-download oder https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows, um cuDNN herunterzuladen und zu installieren.
Stellen Sie nach der Installation von CUDA sicher, dass Sie nvcc.exe und nvidia-smi.exe ausführen können. Möglicherweise müssen Sie die PATH-Variable ändern.
Nachdem Sie cuDNN heruntergeladen haben, entpacken Sie es und kopieren Sie die Verzeichnisse bin, include und lib nach C:/Programme/NVIDIA GPU Computing Toolkit/CUDA/[Version]/. Möglicherweise müssen Sie einige Dateien überschreiben.
Wenn Sie CUDA oder CUDA+cuDNN später installieren oder auf eine neuere Version der NVIDIA-Software aktualisieren:
CUDA muss nach Visual Studio installiert werden. Wenn Sie Visual Studio aktualisieren, denken Sie daran, CUDA neu zu installieren.
Nachdem alle vorherigen Schritte erfolgreich abgeschlossen wurden, müssen Sie Darknet klonen und erstellen. In diesem Schritt müssen wir CMake auch mitteilen, wo sich vcpkg befindet, damit es OpenCV und andere Abhängigkeiten finden kann:
`
cd c:src
Git-Klon https://github.com/hank-ai/darknet.gitcd Darknet
mkdir buildcd build
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
`
Wenn Sie eine Fehlermeldung über eine fehlende CUDA- oder cuDNN-DLL (z. B. cublas64_12.dll) erhalten, kopieren Sie die CUDA-DLL-Datei manuell in dasselbe Ausgabeverzeichnis wie Darknet.exe. Zum Beispiel:
`
kopieren Sie „C:ProgrammeNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll“ src-cliRelease
`
(Dies ist ein Beispiel! Bitte überprüfen Sie, welche Version Sie verwenden, und führen Sie den entsprechenden Befehl für das aus, was Sie installiert haben.)
Führen Sie nach dem Kopieren der Dateien den letzten msbuild.exe-Befehl erneut aus, um das NSIS-Installationspaket zu generieren:
`
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
Fortgeschrittene Benutzer:
Bitte beachten Sie, dass die Ausgabe des cmake-Befehls eine normale Visual Studio-Lösungsdatei, Darknet.sln, ist. Wenn Sie ein Softwareentwickler sind, der zum Erstellen von Projekten häufig die Visual Studio-GUI anstelle von msbuild.exe verwendet, können Sie die Befehlszeile ignorieren und das Darknet-Projekt in Visual Studio laden.
Sie sollten nun über die folgende Datei verfügen, die Sie ausführen können: C:srcDarknetbuildsrc-cliReleasedarknet.exe. Führen Sie zum Testen den folgenden Befehl aus: C:srcDarknetbuildsrc-cliReleasedarknet.exe-Version.
Um Darknet, Bibliotheken, Include-Dateien und erforderliche DLLs ordnungsgemäß zu installieren, führen Sie den im letzten Schritt erstellten NSIS-Installationsassistenten aus. Bitte schauen Sie sich die Datei darknet-VERSION.exe im Build-Verzeichnis an. Zum Beispiel:
`
darknet-2.0.31-win64.exe
`
Die Installation des NSIS-Installationspakets führt zu Folgendem:
Erstellen Sie ein Verzeichnis mit dem Namen Darknet, zum Beispiel C:Program FilesDarknet.
Installieren Sie die CLI-Anwendung, darknet.exe und andere Beispielanwendungen.
Installieren Sie erforderliche DLL-Dateien von Drittanbietern, z. B. die von OpenCV.
Installieren Sie die erforderlichen Darknet-Dateien .dll, .lib und .h, um Darknet.dll aus einer anderen Anwendung zu verwenden.
Installieren Sie die .cfg-Vorlagendatei.
Jetzt sind Sie fertig! Nachdem der Installationsassistent abgeschlossen ist, wird Darknet in C:ProgrammeDarknet installiert. Führen Sie zum Testen den folgenden Befehl aus: C:ProgrammeDarknetbindarknet.exe-Version.
Wenn Sie C:/Program Files/darknet/bin/darknet.exe nicht haben, bedeutet das, dass Sie es nicht installiert, sondern nur erstellt haben! Bitte stellen Sie sicher, dass Sie alle Bereiche des NSIS-Installationsassistenten im vorherigen Schritt abgeschlossen haben.
Im Folgenden finden Sie keine vollständige Liste aller von Darknet unterstützten Befehle.
Beachten Sie neben der Darknet-CLI auch die DarkHelp-Projekt-CLI, die eine andere CLI als Darknet/YOLO bereitstellt. DarkHelp CLI verfügt außerdem über mehrere erweiterte Funktionen, die im Darknet nicht direkt verfügbar sind. Sie können sowohl die Darknet-CLI als auch die DarkHelp-CLI verwenden, sie schließen sich nicht gegenseitig aus.
Für die meisten der unten gezeigten Befehle benötigen Sie die .weights-Datei und die entsprechenden .names- und .cfg-Dateien. Sie können das Netzwerk selbst trainieren (sehr empfehlenswert!) oder ein Netzwerk herunterladen, das andere trainiert haben und im Internet frei verfügbar sind. Beispiele für Datensätze vor dem Training sind:
LEGO Gears (Objekte in Bildern finden)
Rolodex (Text im Bild finden)
MSCOCO (Standard-Zielerkennung der Kategorie 80)
Folgende Befehle können ausgeführt werden:
Listen Sie einige Befehle und Optionen auf, die ausgeführt werden können:
`
Darknet-Hilfe
`
Version prüfen:
`
Darknet-Version
`
Verwenden Sie Bilder, um Vorhersagen zu treffen:
`
V2: Darknet-Detektortest car.data car.cfg car_best.weights image1.jpg
V3: darknet02displayannotatedimages cars.cfg image1.jpg
DarkHelp: DarkHelp Cars.cfg Cars.cfg Cars_Best.weights Bild1.jpg
`
Ausgabekoordinaten:
`
V2: Darknet-Detektortest Animals.data Animals.cfg Animalsbest.weights -extoutput Dog.jpg
V3: Darknet01inference_images Tiere Hund.jpg
DarkHelp: DarkHelp --json Animals.cfg Animals.names Animals_best.weights Hund.jpg
`
Video verwenden:
`
V2: Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights -extoutput test.mp4
V3: darknet03display_videos Animals.cfg test.mp4
DarkHelp: DarkHelp Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
`
Lesung per Webcam:
`
V2: Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -c 0
V3: darknet08display_webcam Tiere
`
Ergebnisse als Video speichern:
`
V2: Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights test.mp4 -outfilename res.avi
V3: Darknet05processvideosmultithreaded Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
DarkHelp: DarkHelp Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
`
JSON:
`
V2: Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
V3: darknet06imagestojson Animals image1.jpg
DarkHelp: DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
Auf einer bestimmten GPU ausführen:
`
V2: Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
Überprüfen Sie die Genauigkeit des neuronalen Netzwerks:
`
Darknet-Detektorkarte fahren.daten fahren.cfg fahren_best.gewichte ...
ID-Name AvgPrecision TP FN FP TN Accuracy ErrorRate Precision Recall Specificity FalsePosRate
-- ---- ------------ ------ ------ ------ ------ -------- --------- --------- ------ ---------- ----------
0 Fahrzeug 91,2495 32648 3903 5826 65129 0,9095 0,0905 0,8486 0,8932 0,9179 0,0821
1 Motorrad 80,4499 2936 513 569 5393 0,8850 0,1150 0,8377 0,8513 0,9046 0,0954
2 Fahrrad 89,0912 570 124 104 3548 0,9475 0,0525 0,8457 0,8213 0,9715 0,0285
3 Personen 76,7937 7072 1727 2574 27523 0,8894 0,1106 0,7332 0,8037 0,9145 0,0855
4 viele Fahrzeuge 64,3089 1068 509 733 11288 0,9087 0,0913 0,5930 0,6772 0,9390 0,0610
5 grünes Licht 86,8118 1969 239 510 4116 0,8904 0,1096 0,7943 0,8918 0,8898 0,1102
6 gelbes Licht 82,0390 126 38 30 1239 0,9525 0,0475 0,8077 0,7683 0,9764 0,0236
7 rotes Licht 94,1033 3449 217 451 4643 0,9237 0,0763 0,8844 0,9408 0,9115 0,0885
`
Überprüfen Sie die Genauigkeit von mAP@IoU=75:
`
Darknet-Detektorkarte Animals.data Animals.cfg Animalsbest.weights -iouthresh 0,75
`
Die Neuberechnung von Ankerpunkten erfolgt am besten in DarkMark, da es 100 Mal hintereinander ausgeführt wird und aus allen berechneten Ankerpunkten den besten Ankerpunkt auswählt. Wenn Sie jedoch eine ältere Version im Darknet ausführen möchten, verwenden Sie den folgenden Befehl:
`
Darknet-Detektor calcanchors Animals.data -numof_clusters 6 -width 320 -height 256
`
Trainieren Sie ein neues Netzwerk:
`
Darknet Detector -map -dont_show train Animals.data Animals.cfg (siehe auch Trainingsabschnitt unten)
`
Schnelle Links zu relevanten Abschnitten der Darknet/YOLO-FAQ:
Wie soll ich meine Dateien und Verzeichnisse einrichten?
Welches Profil soll ich verwenden?
Welchen Befehl sollte ich beim Training meines eigenen Netzwerks verwenden?
Der einfachste Weg, mit DarkMark Anmerkungen zu machen und zu trainieren, besteht darin, alle erforderlichen Darknet-Dateien zu erstellen. Dies ist definitiv die empfohlene Methode zum Trainieren neuer neuronaler Netze.
Wenn Sie die verschiedenen Dateien manuell einrichten möchten, um ein benutzerdefiniertes Netzwerk zu trainieren:
1. Erstellen Sie einen neuen Ordner zum Speichern dieser Dateien. In diesem Beispiel erstellen Sie ein neuronales Netzwerk, das Tiere erkennt. Daher wird das folgende Verzeichnis erstellt: ~/nn/animals/.
2. Kopieren Sie eine der Darknet-Konfigurationsdateien, die Sie als Vorlage verwenden möchten. Siehe beispielsweise cfg/yolov4-tiny.cfg. Platzieren Sie es in dem von Ihnen erstellten Ordner. Für dieses Beispiel haben wir jetzt ~/nn/animals/animals.cfg.
3. Erstellen Sie im selben Ordner, in dem Sie die Konfigurationsdatei abgelegt haben, eine Textdatei „animals.names“. Für dieses Beispiel haben wir jetzt ~/nn/animals/animals.names.
4. Bearbeiten Sie die Datei Animals.names mit einem Texteditor. Listen Sie die Kategorien auf, die Sie verwenden möchten. Sie benötigen genau einen Eintrag pro Zeile, keine Leerzeilen und keine Kommentare. In diesem Beispiel enthält die .names-Datei genau 4 Zeilen:
`
Hund
Katze
Vogel
Pferd
`
5. Erstellen Sie im selben Ordner eine Textdatei „animals.data“. In diesem Beispiel enthält die .data-Datei Folgendes:
`
Klassen = 4
train = /home/username/nn/animals/animals_train.txt
valid = /home/username/nn/animals/animals_valid.txt
Namen = /home/Benutzername/nn/animals/animals.names
backup = /home/username/nn/animals
`
6. Erstellen Sie einen Ordner zum Speichern Ihrer Bilder und Anmerkungen. Dies könnte beispielsweise ~/nn/animals/dataset sein. Für jedes Bild ist eine entsprechende TXT-Datei erforderlich, die die Anmerkungen für dieses Bild beschreibt. Das Format von TXT-Kommentardateien ist sehr spezifisch. Sie können diese Dateien nicht manuell erstellen, da jede Anmerkung die genauen Koordinaten der Anmerkung enthalten muss. Sehen Sie sich DarkMark oder eine andere ähnliche Software an, um Ihre Bilder mit Anmerkungen zu versehen. Das YOLO-Annotationsformat wird in den Darknet/YOLO-FAQ beschrieben.
7. Erstellen Sie „train“- und „valid“-Textdateien mit den Namen in der .data-Datei. Diese beiden Textdateien müssen alle Bilder separat auflisten, die Darknet zum Training und zur Validierung verwenden muss, um mAP% zu berechnen. Es gibt genau ein Bild pro Zeile. Pfade und Dateinamen können relativ oder absolut sein.
8. Verwenden Sie einen Texteditor, um Ihre .cfg-Datei zu ändern.
* Stellen Sie sicher, dass Batch=64 ist.
* Auf Unterteilungen achten. Abhängig von der Netzwerkgröße und der auf der GPU verfügbaren Speichermenge müssen Sie möglicherweise die Unterteilungen erhöhen. Der optimale Wert ist 1, also beginnen Sie mit 1. Wenn Sie 1 nicht verwenden können, lesen Sie bitte die Darknet/YOLO-FAQ.
Beachten Sie, dass der optimale Wert für maxbatches=.... zunächst das 2000-fache der Anzahl der Klassen ist. Für dieses Beispiel haben wir 4 Tiere, also 4 2000 = 8000. Das bedeutet, dass wir maxbatches=8000 verwenden werden.
* Beachten Sie Schritte=.... Dies sollte auf 80 % und 90 % der maximalen Batches eingestellt werden. Für dieses Beispiel verwenden wir „steps=6400,7200“, da „maxbatches“ auf 8000 festgelegt ist.
* Beachten Sie, dass width=... und height=... Dies sind Netzwerkabmessungen. Die Darknet/YOLO-FAQ erklärt, wie man die optimale Größe berechnet.
* Suchen Sie nach der Zeile „classes=...“ im Abschnitt „[convolutional]“ und ändern Sie sie vor jedem Abschnitt „[yolo]“, um die Anzahl der Klassen aus der .names-Datei einzuschließen. Für dieses Beispiel verwenden wir „classes=4“.
Suchen Sie im Abschnitt [convolutional] vor jedem Abschnitt [yolo] nach der Zeile „filters=...“. Der zu verwendende Wert ist (Anzahl der Kategorien + 5) 3. Das bedeutet, dass für dieses Beispiel (4 + 5) * 3 = 27 ist. Daher verwenden wir filter=27 in den entsprechenden Zeilen.
9. Beginnen Sie mit dem Training! Führen Sie den folgenden Befehl aus:
`
cd ~/nn/animals/
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
Sei geduldig. Die besten Gewichte werden als Animals_best.weights gespeichert. Und Sie können den Trainingsfortschritt verfolgen, indem Sie die Datei chart.png ansehen. Weitere Parameter, die Sie möglicherweise beim Training eines neuen Netzwerks verwenden möchten, finden Sie in den Darknet/YOLO-FAQ.
Wenn Sie während des Trainings weitere Details sehen möchten, fügen Sie den Parameter --verbose hinzu. Zum Beispiel:
`
Darknet-Detektor -map -dont_show --verbose train Animals.data Animals.cfg
`
Informationen zum Verwalten Ihres Darknet/YOLO-Projekts, zum Kommentieren von Bildern, zum Validieren Ihrer Anmerkungen und zum Generieren der erforderlichen Dateien für das Training mit Darknet finden Sie unter DarkMark.
Um eine leistungsstarke Darknet-Alternative-CLI zu erhalten, Bildkacheln zu verwenden, Objektverfolgung in Ihren Videos durchzuführen oder eine leistungsstarke C++-API zu verwenden, die problemlos in kommerziellen Anwendungen verwendet werden kann, siehe DarkHelp.
Bitte schauen Sie sich die Darknet/YOLO-FAQ an, um zu sehen, ob sie Ihnen bei der Beantwortung Ihrer Frage helfen kann.
Sehen Sie sich viele Tutorials und Beispielvideos auf Stéphanes YouTube-Kanal an
Wenn Sie Supportfragen haben oder mit anderen Darknet/YOLO-Benutzern chatten möchten, treten Sie bitte dem Darknet/YOLO Discord-Server bei.
Letzte Aktualisierung: 30.10.2024
qsort(), das während des Trainings verwendet wurde, wurde durch std::sort() ersetzt (einige andere, weniger bekannte sind noch vorhanden)
Beseitigen Sie check_mistakes, getchar() und system()
Konvertieren Sie Darknet zur Verwendung eines C++-Compilers (g++ unter Linux, Visual Studio unter Windows)
Windows-Build reparieren
Korrigieren Sie die Python-Unterstützung
Erstellen Sie eine Darknet-Bibliothek
Vorhergesagte Beschriftungen („Alphabet“-Code) wieder aktivieren
CUDA/GPU-Code erneut aktivieren
Aktivieren Sie CUDNN erneut
Aktivieren Sie die CUDNN-Hälfte erneut
Codieren Sie die CUDA-Architektur nicht fest
Bessere Informationen zur CUDA-Version
Aktivieren Sie AVX erneut
Entfernen Sie die alte Lösung und das Makefile
Machen Sie OpenCV nicht optional
Entfernen Sie die Abhängigkeit von der alten Pthread-Bibliothek
STB löschen
Schreiben Sie CMakeLists.txt neu, um die neue CUDA-Erkennung zu verwenden
Alter „Alphabet“-Code entfernt und über 700 Bilder in Daten/Beschriftungen gelöscht
Erstellen Sie eine externe Quelle
Bessere Ausgabe der Versionsnummer
Trainingsbezogene Leistungsoptimierungen (laufende Aufgaben)
Leistungsoptimierungen im Zusammenhang mit Inferenz (laufende Aufgaben)
Verwenden Sie nach Möglichkeit Referenzen nach Wert
Bereinigen Sie .hpp-Dateien
Darknet.h neu schreiben
Wandeln Sie cv::Mat nicht in void um, sondern verwenden Sie es stattdessen als richtiges C++-Objekt
Korrigieren Sie die internen Bildstrukturen oder behalten Sie diese konsistent bei
Fix-Build für ARM-basierte Jetson-Geräte
* Da NVIDIA keine Original-Jetson-Geräte mehr unterstützt, ist es unwahrscheinlich, dass sie behoben werden (kein C++17-Compiler).
* Neues Jetson Orin-Gerät jetzt in Betrieb
Korrigieren Sie die Python-API in V3
* Benötigen Sie eine bessere Python-Unterstützung (gibt es Python-Entwickler, die bereit sind zu helfen?)
Ersetzen Sie printf() durch std::cout (in Arbeit)
Ich schaue mir die Unterstützung alter Zed-Kameras an
Bessere, konsistentere Befehlszeilenanalyse (in Arbeit)
Entfernen Sie alle Zeichencodes und ersetzen Sie sie durch std::string
Warnungen nicht ausblenden und Compiler-Warnungen bereinigen (in Arbeit)
Besser cv::Mat statt benutzerdefinierter Bildstrukturen in C verwenden (in Arbeit)
Ersetzen Sie alte Listenfunktionen durch std::vector oder std::list
Unterstützung für 1-Kanal-Graustufenbilder behoben
Unterstützung für N-Kanal-Bilder hinzufügen, bei denen N > 3 (z. B. Bilder mit zusätzlicher Tiefe oder Wärmekanäle)
Laufende Codebereinigung (in Bearbeitung)
Beheben Sie CUDA/CUDNN-Probleme für alle GPUs
Schreiben Sie den CUDA+cuDNN-Code neu
Erwägen Sie, Unterstützung für Nicht-NVIDIA-GPUs hinzuzufügen
Gedrehter Begrenzungsrahmen oder eine Art „Winkel“-Unterstützung
Schlüsselpunkte/Skelett
Heatmap (in Arbeit)
Segmentierung