Darknet Object Detection Framework und YOLO
Darknet ist ein Open-Source-Framework für neuronale Netzwerke, das mit C, C++ und CUDA erstellt wurde. Es dient als Grundlage für YOLO (You Only Look Once), ein hochmodernes Echtzeit-Objekterkennungssystem, das für seine Geschwindigkeit und Genauigkeit bekannt ist.
Lesen Sie, wie Hank.ai die Darknet/YOLO-Community stärkt: [Link zum Hank.ai-Blog]
Entdecken Sie die offizielle Darknet/YOLO-Website: [Link zur Darknet-Website]
Tauchen Sie ein in die umfassenden Darknet/YOLO-FAQ: [Link zu FAQ]
Treten Sie mit der lebendigen Darknet/YOLO-Community auf Discord in Kontakt: [Link zum Discord-Server]
Papiere
1. YOLOv7: [Link zum Artikel]
2. Scaled-YOLOv4: [Link zum Artikel]
3. YOLOv4: [Link zum Papier]
4. YOLOv3: [Link zum Artikel]
Allgemeine Informationen
Das Darknet/YOLO-Framework dominiert weiterhin andere Frameworks und YOLO-Versionen in Bezug auf Geschwindigkeit und Genauigkeit. Sein Open-Source-Charakter und die völlige Freiheit von Lizenzgebühren ermöglichen eine nahtlose Integration in bestehende Projekte und kommerzielle Produkte.
Darknet V3 („Jazz“), veröffentlicht im Oktober 2024, erreicht eine bemerkenswerte Leistung und verarbeitet die LEGO-Datensatzvideos mit erstaunlichen 1000 FPS unter Verwendung einer NVIDIA RTX 3090 GPU. Dies entspricht einer Verarbeitungszeit von weniger als 1 Millisekunde pro Videobild.
Treten Sie dem aktiven Darknet/YOLO Discord-Server unter [Link zum Discord-Server] bei, um Unterstützung, Diskussionen und gemeinsames Lernen zu erhalten.
Darknet/YOLO bedient eine breite Palette von Geräten, vom Raspberry Pi bis hin zu High-End-Trainingsgeräten, und unterstützt sowohl CPU- als auch GPU-Versionen. Die GPU-Version erfordert eine CUDA-fähige GPU von NVIDIA.
Darknet/YOLO ist mit den Betriebssystemen Linux, Windows und Mac kompatibel. Nachfolgend finden Sie eine detaillierte Bauanleitung.
Darknet-Version
Dem ursprünglichen Darknet-Tool, das Joseph Redmon zwischen 2013 und 2017 entwickelt hatte, fehlte eine Versionsnummer. Wir bezeichnen diese Version als 0.x.
Alexey Bochkovskiy pflegte das beliebte Darknet-Repository von 2017 bis 2021 weiter, wiederum ohne Versionsnummer. Wir bezeichnen dies als Version 1.x.
Das von Hank.ai gesponserte und seit 2023 von Stéphane Charette verwaltete Darknet-Repository führte den Befehl „version“ ein. Zwischen 2023 und Ende 2024 wurde die Version 2.x „OAK“ zurückgegeben.
Die Entwicklungsziele bestanden darin, Störungen der vorhandenen Funktionalität zu minimieren und uns gleichzeitig mit der Codebasis vertraut zu machen. Zu den wichtigsten Verbesserungen gehören:
Einheitlicher Build-Prozess: Neu geschriebene Build-Schritte für einen konsistenten CMake-basierten Build-Prozess sowohl unter Windows als auch unter Linux.
C++-Codebasis: Konvertierung der Codebasis zur Nutzung des C++-Compilers.
Verbessertes Trainingsdiagramm: Verbesserte chart.png-Visualisierung während des Trainings.
Fehlerbehebungen und Optimierungen: Leistungsbezogene Verbesserungen mit Schwerpunkt auf der Reduzierung der Trainingszeit.
Der letzte Zweig dieser Codebasis ist Version 2.1 und befindet sich im Zweig „v2“.
Die nächste Entwicklungsphase begann Mitte 2024 und gipfelte in der Veröffentlichung der Version 3.x „JAZZ“ im Oktober 2024.
Sie können jederzeit auf den vorherigen Zweig „v2“ zugreifen, um Befehle aus diesen Versionen auszuführen. Bitte informieren Sie uns, wenn Sie auf fehlende Befehle stoßen, und wir werden deren erneute Integration untersuchen.
Zu den wesentlichen Änderungen in Darknet V3 gehören:
Befehlsentfernung: Entfernung veralteter und selten verwendeter Befehle.
Leistungsoptimierungen: Verbesserungen sowohl für die Trainings- als auch für die Inferenzleistung.
Änderung der alten API: Änderung der alten C-API; Anwendungen, die die ursprüngliche Darknet-API verwenden, erfordern möglicherweise geringfügige Anpassungen.
Neue C/C++-API: Einführung einer neuen Darknet V3 C- und C++-API.
Aktualisierter Beispielcode: Aufnahme neuer Anwendungen und Beispielcode in das Verzeichnis „src-examples“.
Detaillierte Informationen zur neuen API: [Link zur Darknet V3 API-Dokumentation]
Entdecken Sie den aktualisierten Beispielcode: [Link zu Darknet V3 API-Dateien]
Vortrainierte MSCOCO-Gewichte
Mehrere beliebte YOLO-Versionen wurden zur Vereinfachung des MSCOCO-Datensatzes vorab trainiert. Dieser Datensatz umfasst 80 Klassen, die in der Textdatei „cfg/coco.names“ leicht identifizierbar sind.
Über MSCOCO hinaus bietet Darknet/YOLO vorab trainierte Gewichte für einfachere Datensätze wie LEGO Gears und Rolodex, sodass Sie mit verschiedenen Szenarien experimentieren können. Ausführliche Informationen finden Sie in den Darknet/YOLO-FAQ.
Auf die vorab trainierten MSCOCO-Gewichte kann aus mehreren Quellen zugegriffen werden, einschließlich dieses Repositorys:
YOLOv2 (November 2016):
YOLOv2-tiny: [Link zu Gewichten]
YOLOv2-full: [Link zu Gewichten]
YOLOv3 (Mai 2018):
YOLOv3-tiny: [Link zu Gewichten]
YOLOv3-full: [Link zu Gewichten]
YOLOv4 (Mai 2020):
YOLOv4-tiny: [Link zu Gewichten]
YOLOv4-full: [Link zu Gewichten]
YOLOv7 (August 2022):
YOLOv7-tiny: [Link zu Gewichten]
YOLOv7-full: [Link zu Gewichten]
Diese vortrainierten Gewichte sind in erster Linie für Demonstrationszwecke gedacht. Die entsprechenden .cfg- und .names-Dateien für MSCOCO befinden sich im Verzeichnis „cfg“. Beispielbefehle:
`
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
`
Denken Sie daran, dass die Schulung Ihrer eigenen Netzwerke gefördert wird. MSCOCO dient in erster Linie als Benchmark, um die korrekte Funktion Ihres Setups zu bestätigen.
Gebäude
Die verschiedenen Build-Methoden, die vor 2023 verwendet wurden, wurden in einer einzigen einheitlichen Lösung konsolidiert. Darknet basiert auf C++17 oder höher, OpenCV und nutzt CMake, um die notwendigen Projektdateien zu generieren.
Für den Aufbau, die Installation und den Betrieb von Darknet/YOLO sind keine C++-Kenntnisse erforderlich, ähnlich wie beim Autofahren ohne Mechanikerkenntnisse.
Google Colab
Die Google Colab-Anweisungen sind identisch mit den Linux-Anweisungen. Mehrere Jupyter-Notebooks demonstrieren verschiedene Aufgaben, beispielsweise das Training eines neuen Netzwerks.
Erkunden Sie die Notizbücher im Unterverzeichnis „colab“ oder befolgen Sie die nachstehenden Linux-Anweisungen.
Linux CMake-Methode
Darknet-Build-Tutorial für Linux
Optional: Wenn Sie über eine moderne NVIDIA-GPU verfügen, können Sie an dieser Stelle entweder 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 Ihrem 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, ist entweder CUDA oder CUDA+cuDNN erforderlich.
1. Voraussetzungen installieren:
`Bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Klonen Sie das Darknet-Repository:
`Bash
mkdir ~/srccd ~/src
Git-Klon https://github.com/hank-ai/darknetcd Darknet
`
3. Erstellen Sie ein Build-Verzeichnis:
`Bash
mkdir buildcd build
`
4. CMake konfigurieren:
`Bash
cmake -DCMAKEBUILDTYPE=Release ..
`
5. Darknet aufbauen:
`Bash
mache -j4
`
6. Paket Darknet:
`Bash
Paket
`
7. Installieren Sie das Paket:
`Bash
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 können. Das Upgrade von CMake unter Ubuntu kann mit den folgenden Befehlen durchgeführt werden:
`Bash
sudo apt-get purge cmake
sudo snap install cmake --classic
`
Wenn Sie Bash als Befehls-Shell verwenden, sollten Sie Ihre Shell an dieser Stelle neu starten. Wenn Sie Fisch verwenden, sollte dieser sofort den neuen Weg einschlagen.
Fortgeschrittene Benutzer:
Wenn Sie ein RPM-Installationspaket anstelle einer DEB-Datei bevorzugen, ändern Sie die entsprechenden Zeilen in „CM_package.cmake“. Bevor Sie „make -j4 package“ ausführen, passen Sie diese Zeilen an:
„cmake
SET (CPACKGENERATOR „DEB“)# SET (CPACKGENERATOR „RPM“)
`
Für Distributionen wie Centos und OpenSUSE ändern Sie diese Zeilen wie folgt:
„cmake
SET (CPACK_GENERATOR „DEB“)
SET (CPACK_GENERATOR „RPM“)
`
Installieren Sie das erstellte Paket mit dem Paketmanager Ihrer Distribution. Für Debian-basierte Systeme wie Ubuntu:
`Bash
sudo dpkg -i darknet-2.0.1-Linux.deb
`
Bei der Installation des .deb-Pakets werden die folgenden Dateien kopiert:
/usr/bin/darknet: Die wichtigste ausführbare Darknet-Datei. Führen Sie „Darknet-Version“ über die CLI aus, um die erfolgreiche Installation zu bestätigen.
/usr/include/darknet.h: Die Darknet-API für C-, C++- und Python-Entwickler.
/usr/include/darknet_version.h: Enthält Versionsinformationen für Entwickler.
/usr/lib/libdarknet.so: Die Bibliothek zum Verlinken für C-, C++- und Python-Entwickler.
/opt/darknet/cfg/...: Speichert alle .cfg-Vorlagen.
Glückwunsch! Darknet wurde in /usr/bin/ erstellt und installiert. Führen Sie „Darknet-Version“ aus, um die Installation zu überprüfen.
Wenn Sie /usr/bin/darknet nicht haben, bedeutet das, dass Sie es nur erstellt und nicht installiert haben. Stellen Sie sicher, dass Sie die .deb- oder .rpm-Datei wie oben beschrieben installieren.
Windows CMake-Methode
Diese Anleitung setzt eine brandneue Installation von Windows 11 22H2 voraus.
1. Installieren Sie die Voraussetzungen mit Winget:
`Bash
Winget installiert Git.Git
Winget installiert Kitware.CMake
Winget installiert nsis.nsis
Winget installiert Microsoft.VisualStudio.2022.Community
`
2. Ändern Sie die Visual Studio-Installation:
- Klicken Sie auf das „Windows-Start“-Menü und führen Sie „Visual Studio Installer“ aus.
- Klicken Sie auf „Ändern“.
- Wählen Sie „Desktop-Entwicklung mit C++“.
- Klicken Sie unten rechts auf „Ändern“ und dann auf „Ja“.
3. Installieren Sie Microsoft VCPKG:
- Sobald die Installation abgeschlossen ist, klicken Sie auf das „Windows-Start“-Menü und wählen Sie „Entwickler-Eingabeaufforderung für VS 2022“. Verwenden Sie für diese Schritte nicht PowerShell, da dies zu Problemen führen kann!
- Fortgeschrittene Benutzer: Anstatt die Entwickler-Eingabeaufforderung zu verwenden, können Sie eine normale Eingabeaufforderung oder SSH auf dem Gerät ausführen und „ProgrammeMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat“ manuell ausführen.
4. Installieren Sie OpenCV mit VCPKG:
`Bash
CDC:
mkdir c:srccd c:src
Git-Klon https://github.com/microsoft/vcpkgcd vcpkg
Bootstrap-vcpkg.bat
.vcpkg.exe integrieren installieren
.vcpkg.exe Powershell integrieren
.vcpkg.exe installiere opencv[contrib,dnn,freetype,jpeg,openmp,png,webp,world]:x64-windows
`
Seien Sie bei diesem Schritt geduldig, da das Herunterladen und Erstellen von Abhängigkeiten viel Zeit in Anspruch nehmen kann.
Fortgeschrittene Benutzer:
– Beachten Sie, dass es viele weitere optionale Module gibt, die Sie beim Erstellen von OpenCV möglicherweise hinzufügen möchten. 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 an dieser Stelle entweder 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 Ihrem 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, ist entweder CUDA oder CUDA+cuDNN erforderlich.
1. CUDA installieren:
Besuchen Sie https://developer.nvidia.com/cuda-downloads, um CUDA herunterzuladen und zu installieren.
2. cuDNN 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.
3. Überprüfen Sie die CUDA-Installation:
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 Ihre PATH-Variable anpassen.
4. cuDNN integrieren:
Entpacken Sie das heruntergeladene cuDNN-Archiv und kopieren Sie die Verzeichnisse „bin“, „include“ und „lib“ nach C:ProgrammeNVIDIA GPU Computing ToolkitCUDA[Version]. Möglicherweise müssen Sie vorhandene Dateien überschreiben.
5. Installieren Sie CUDA nach Visual Studio:
- CUDA muss nach Visual Studio installiert werden. Wenn Sie Visual Studio aktualisieren, denken Sie daran, CUDA neu zu installieren.
6. Darknet klonen und erstellen:
`Bash
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
`
7. Behandeln Sie fehlende CUDA/cuDNN-DLLs:
- Wenn Fehler bezüglich fehlender CUDA- oder cuDNN-DLLs auftreten (z. B. cublas64_12.dll), kopieren Sie die relevanten CUDA-DLL-Dateien manuell in dasselbe Verzeichnis wie Darknet.exe. Zum Beispiel:
`Bash
Kopieren Sie „C:ProgrammeNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll“ src-cliRelease
`
(Dies ist ein Beispiel. Überprüfen Sie Ihre CUDA-Version und führen Sie den entsprechenden Befehl aus.)
– Führen Sie den letzten msbuild.exe-Befehl erneut aus, um das NSIS-Installationspaket zu generieren.
Fortgeschrittene Benutzer:
Die Ausgabe des cmake-Befehls ist eine reguläre Visual Studio-Lösungsdatei (Darknet.sln). Wenn Sie zum Erstellen lieber die Visual Studio-GUI anstelle von msbuild.exe verwenden möchten, können Sie das Darknet-Projekt in Visual Studio laden und die Befehlszeilenschritte ignorieren.
Sie sollten jetzt die ausführbare Datei C:srcDarknetbuildsrc-cliReleasedarknet.exe haben. Führen Sie die Version C:srcDarknetbuildsrc-cliReleasedarknet.exe aus, um die Installation zu testen.
Um Darknet korrekt zu installieren, einschließlich der Bibliotheken, Include-Dateien und erforderlichen DLLs, führen Sie den im letzten Schritt erstellten NSIS-Installationsassistenten aus. Suchen Sie die Datei „darknet-VERSION.exe“ im Build-Verzeichnis, z. B. „darknet-2.0.31-win64.exe“.
Das NSIS-Installationspaket wird:
Erstellen Sie ein Verzeichnis mit dem Namen „Darknet“ (z. B. C:ProgrammeDarknet).
Installieren Sie die CLI-Anwendung (darknet.exe) und andere Beispielanwendungen.
Installieren Sie die erforderlichen DLL-Dateien von Drittanbietern (z. B. von OpenCV).
Installieren Sie die erforderlichen Darknet-Dateien .dll, .lib und .h, um Darknet.dll aus anderen Anwendungen zu verwenden.
Installieren Sie die .cfg-Vorlagendateien.
Sie sind jetzt fertig! Sobald der Installationsassistent abgeschlossen ist, wird Darknet unter C:ProgrammeDarknet installiert. Führen Sie die Version C:ProgrammeDarknetbindarknet.exe aus, um die Installation zu überprüfen.
Wenn Sie C:/Program Files/darknet/bin/darknet.exe nicht haben, bedeutet dies, dass Sie es nur erstellt und nicht installiert haben. Stellen Sie sicher, dass Sie die einzelnen Bereiche des NSIS-Installationsassistenten wie zuvor beschrieben durchgehen.
Nutzung von Darknet
CLI
Dies ist keine vollständige Liste aller von Darknet unterstützten Befehle.
Beachten Sie neben der Darknet-CLI auch die DarkHelp-Projekt-CLI, die eine alternative Schnittstelle für Darknet/YOLO bietet. Es enthält mehrere erweiterte Funktionen, die im Darknet nicht direkt verfügbar sind. Sie können sowohl die Darknet-CLI als auch die DarkHelp-CLI gleichzeitig verwenden; sie schließen sich nicht gegenseitig aus.
Für die meisten der folgenden Befehle benötigen Sie die .weights-Datei zusammen mit den entsprechenden .names- und .cfg-Dateien. Sie können entweder Ihr eigenes Netzwerk trainieren (sehr empfehlenswert!) oder ein vorab trainiertes neuronales Netzwerk aus öffentlich verfügbaren Ressourcen herunterladen. Einige Beispiele sind:
LEGO Gears (Objekterkennung in Bildern)
Rolodex (Texterkennung in Bildern)
MSCOCO (Standardobjekterkennung der 80er-Klasse)
Hier sind einige Beispielbefehle und ihre Verwendung:
Grundbefehle:
Helfen:
`Bash
Darknet-Hilfe
`
Version:
`Bash
Darknet-Version
`
Bildvorhersage:
V2:
`Bash
Darknet-Detektortest car.data car.cfg car_best.weights image1.jpg
`
V3:
`Bash
darknet02displayannotatedimages cars.cfg image1.jpg
`
DarkHelp:
`Bash
DarkHelp „cars.cfg“ „cars.cfg“ „cars_best.weights image1.jpg“.
`
Koordinaten ausgeben:
V2:
`Bash
Darknet-Detektortest Animals.data Animals.cfg Animalsbest.weights -extoutput Dog.jpg
`
V3:
`Bash
darknet01inference_images Tiere Hund.jpg
`
DarkHelp:
`Bash
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Hund.jpg
`
Arbeiten mit Videos:
V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights -extoutput test.mp4
`
V3:
`Bash
darknet03display_videos Animals.cfg test.mp4
`
DarkHelp:
`Bash
DarkHelp Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
`
Webcam-Eingabe:
V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -c 0
`
V3:
`Bash
darknet08display_webcam Tiere
`
Ergebnisse als Video speichern:
V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights test.mp4 -outfilename res.avi
`
V3:
`Bash
darknet05processvideosmultithreaded Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
`
DarkHelp:
`Bash
DarkHelp Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
`
JSON-Ausgabe:
V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
`
V3:
`Bash
darknet06imagestojson Tiere image1.jpg
`
DarkHelp:
`Bash
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
Läuft auf einer bestimmten GPU:
V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
Überprüfung der Netzwerkgenauigkeit:
Karte:
`Bash
Darknet-Detektorkarte fahren.daten fahren.cfg fahren_best.gewichte ...
`
– Dieser Befehl zeigt die durchschnittliche Genauigkeit (AP) für jede Klasse im Datensatz an.
Karte@IoU=75:
`Bash
Darknet-Detektorkarte Animals.data Animals.cfg Animalsbest.weights -iouthresh 0,75
`
– Dieser Befehl berechnet den mAP bei einem IoU-Schwellenwert von 0,75.
Berechnung der Anker:
Die beste Vorgehensweise für die Neuberechnung von Ankern ist die Verwendung von DarkMark, da es 100 aufeinanderfolgende Berechnungen durchführt und die optimalen Anker auswählt. Sie können jedoch die ältere Darknet-Methode verwenden:
`Bash
Darknet-Detektor calcanchors Animals.data -numof_clusters 6 -width 320 -height 256
`
Ein neues Netzwerk trainieren:
Grundausbildung:
`Bash
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
- Die besten Gewichte werden als Animals_best.weights gespeichert und der Trainingsfortschritt ist in chart.png sichtbar.
Ausführliches Training:
`Bash
Darknet-Detektor -map -dont_show --verbose train Animals.data Animals.cfg
`
- Dieser Befehl liefert detailliertere Informationen während des Trainings.
Ausbildung
Schnelle Links zu relevanten Abschnitten der Darknet/YOLO-FAQ:
Datei- und Verzeichniseinrichtung: [Link zum FAQ-Bereich]
Auswahl der richtigen Konfigurationsdatei: [Link zum FAQ-Bereich]
Trainingsbefehl: [Link zum FAQ-Bereich]
Der einfachste Weg zum Kommentieren und Trainieren besteht darin, DarkMark zum Erstellen aller erforderlichen Darknet-Dateien zu verwenden. Dies ist der empfohlene Ansatz zum Trainieren eines neuen neuronalen Netzwerks.
Manuelle Trainingseinrichtung:
1. Ordner erstellen: Erstellen Sie einen neuen Ordner zum Speichern Ihrer Trainingsdateien. Zum Beispiel ~/nn/animals/.
2. Konfigurationsdatei kopieren: Kopieren Sie eine Darknet-Konfigurationsdatei als Vorlage (z. B. cfg/yolov4-tiny.cfg) in Ihren Ordner. Sie haben jetzt ~/nn/animals/animals.cfg.
3. Erstellen Sie die .names-Datei: Erstellen Sie eine Animals.names-Textdatei im selben Ordner.
- Bearbeiten Sie die Datei, um die Klassen aufzulisten, die Sie erkennen möchten. Jede Klasse muss in einer separaten Zeile ohne Leerzeilen oder Kommentare stehen. Zum Beispiel:
`
Hund
Katze
Vogel
Pferd
`
4. Erstellen Sie die .data-Datei: Erstellen Sie eine Animals.data-Textdatei im selben Ordner.
– Die .data-Datei definiert die Trainings- und Validierungsdatensätze, Klassennamen und das Sicherungsverzeichnis. Zum Beispiel:
`
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
`
5. Erstellen Sie den Bild- und Anmerkungsordner: Erstellen Sie einen Ordner (z. B. ~/nn/animals/dataset), um Ihre Bilder und Anmerkungen zu speichern.
- Für jedes Bild ist eine entsprechende TXT-Datei mit Anmerkungen erforderlich. Das Anmerkungsformat ist spezifisch; Es kann nicht manuell erstellt werden. Verwenden Sie DarkMark oder eine ähnliche Software, um Bilder mit Anmerkungen zu versehen.
– Das YOLO-Annotationsformat wird in den Darknet/YOLO-FAQ erläutert.
6. Erstellen Sie die Dateien „train“ und „valid“: Erstellen Sie die in der .data-Datei genannten Textdateien „train“ und „valid“.
– In diesen Dateien werden die Bilder aufgelistet, die für das Training bzw. die Validierung verwendet werden. Jedes Bild sollte in einer separaten Zeile stehen. Sie können relative oder absolute Pfade verwenden.
7. Ändern Sie die Konfigurationsdatei:
- Öffnen Sie Ihre .cfg-Datei mit einem Texteditor und nehmen Sie die folgenden Anpassungen vor:
- Batch=64: Dieser Wert ist normalerweise in Ordnung.
- Unterteilungen: Beginnen Sie mit Unterteilungen=1. Abhängig vom Arbeitsspeicher und den Netzwerkabmessungen Ihrer GPU müssen Sie diesen Wert möglicherweise erhöhen. Weitere Informationen finden Sie in den Darknet/YOLO-FAQ.
- maxbatches: Stellen Sie dies auf 2000 * Anzahl der Klassen ein. Beispiel: Bei 4 Klassen gilt maxbatches=8000.
- Schritte: Stellen Sie dies auf 80 % und 90 % der maximalen Batches ein. Beispiel: mit maxbatches=8000, Schritte=6400,7200.
- Breite und Höhe: Dies sind die Netzwerkabmessungen. Konsultieren Sie die Darknet/YOLO-FAQ für Ratschläge zur Dimensionsberechnung.
- Klassen: Ändern Sie die Zeile „classes=...“ so, dass sie der Anzahl der Klassen in Ihrer .names-Datei entspricht (in diesem Beispiel „classes=4“).
- Filter: Ändern Sie die Zeile „filters=...“ in jedem [convolutional]-Abschnitt vor jedem [yolo]-Abschnitt. Der Wert wird als (Anzahl der Klassen + 5) * 3 berechnet. Bei 4 Klassen sind beispielsweise Filter = 27.
8. Beginnen Sie mit dem Training:
`Bash
cd ~/nn/animals/
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
- Das Training kann eine Weile dauern. Die besten Gewichte werden als Animals_best.weights gespeichert. Der Trainingsfortschritt ist in der Datei chart.png sichtbar. Weitere Trainingsparameter finden Sie in den Darknet/YOLO-FAQ.
– Wenn Sie detailliertere Trainingsinformationen wünschen, fügen Sie den Parameter --verbose hinzu:
`Bash
Darknet-Detektor -map -dont_show --verbose train Animals.data Animals.cfg
`
Andere Tools und Links
DarkMark: Dieses Tool unterstützt Sie bei der Verwaltung Ihrer Darknet-/YOLO-Projekte, beim Kommentieren von Bildern, beim Überprüfen von Anmerkungen und beim Generieren der erforderlichen Dateien für das Darknet-Training.
DarkHelp: Eine robuste alternative CLI für Darknet, die Funktionen wie Bildkacheln, Objektverfolgung in Videos und eine robuste C++-API für kommerzielle Anwendungen bietet.
Darknet/YOLO-FAQ: Eine wertvolle Ressource zur Beantwortung Ihrer Fragen zu Darknet/YOLO.
Stéphanes YouTube-Kanal: Hier finden Sie zahlreiche Tutorials und Beispielvideos.
Darknet/YOLO Discord-Server: Treten Sie dem Server bei, um Support-Fragen zu stellen und sich mit anderen Darknet/YOLO-Benutzern zu vernetzen.
Roadmap
Letzte Aktualisierung: 30.10.2024
Vollendet
qsort() austauschen: qsort() wurde in relevanten Teilen der Codebasis durch std::sort() ersetzt. (Einige verbleibende Instanzen verwenden immer noch qsort())
Veraltete Funktionen entfernen: check_mistakes, getchar() und system() entfernt.
C++-Codebasis: Darknet zur Verwendung des C++-Compilers konvertiert (g++ unter Linux, VisualStudio unter Windows).
Windows-Build: Der Windows-Build-Prozess wurde korrigiert.
Python-Unterstützung: Python-Integration behoben.
Darknet-Bibliothek: Die Darknet-Bibliothek wurde erstellt.
Vorhersagebeschriftungen: Beschriftungen für Vorhersagen wieder aktiviert (der „Alphabet“-Code).
CUDA/GPU-Code: CUDA/GPU-Funktionalität wieder aktiviert.
CUDNN: CUDNN-Unterstützung wieder aktiviert.
CUDNN halb: CUDNN-Unterstützung für halbe Genauigkeit wieder aktiviert.
CUDA-Architektur: Hartcodierung der CUDA-Architektur entfernt.
CUDA-Versionsinformationen: Verbesserte CUDA-Versionsinformationen.
AVX: AVX-Unterstützung wieder aktiviert.
Legacy-Dateien entfernt: Alte Lösungen und Makefile entfernt.
OpenCV-Abhängigkeit: OpenCV zu einer erforderlichen Abhängigkeit gemacht.
pthread-Bibliothek: Abhängigkeit von der alten pthread-Bibliothek entfernt.
STB: STB-Abhängigkeit entfernt.
CMakeLists.txt: CMakeLists.txt neu geschrieben, um die neue CUDA-Erkennungsmethode zu verwenden.
Veraltete Dateien entfernt: Alter „Alphabet“-Code entfernt und die über 700 Bilder in Daten/Beschriftungen gelöscht.
Out-of-Source-Build: Out-of-Source-Builds aktiviert.
Versionsnummer: Verbesserte Ausgabe der Versionsnummer.
Trainingsleistung: Leistungsoptimierungen für das Training (laufende Aufgabe).
Inferenzleistung: Leistungsoptimierungen für Inferenz (laufende Aufgabe).
Pass-by-Reference: Zur Verbesserung der Effizienz wird nach Möglichkeit Pass-by-Reference verwendet.
Codebereinigung: .hpp-Dateien bereinigt.
Darknet.h neu geschrieben: Die Darknet-API-Header-Datei wurde aktualisiert.
cv::Mat-Verwendung: cv::Mat wurde als richtiges C++-Objekt verwendet, anstatt es in void* umzuwandeln.
Bildstruktur: Inkonsistenzen und Probleme im Zusammenhang mit der internen Bildstruktur behoben.
Jetson-Unterstützung: Builds für ARM-basierte Jetson-Geräte korrigiert.
- Es ist unwahrscheinlich, dass ältere Jetson-Geräte repariert werden, da NVIDIA die Unterstützung einstellt (kein C++17-Compiler).
- Neue Jetson Orin-Geräte funktionieren.
Python-API in V3: Die Python-API in Darknet V3 wurde korrigiert.
Kurzfristige Ziele
printf() austauschen: Ersetzen Sie printf() durch std::cout (in Bearbeitung).
Unterstützung der Zed-Kamera: Überarbeiten und verbessern Sie die Unterstützung für die Zed-Kamera.
Befehlszeilenanalyse: Implementieren Sie eine robustere und konsistentere Befehlszeilenanalyse (in Bearbeitung).
Mittelfristige Ziele
Zeichencode entfernen: Entfernen Sie den gesamten Zeichencode und ersetzen Sie ihn durch std::string.
Compiler-Warnungen: Warnungen nicht ausblenden und Compiler-Warnungen beheben (in Bearbeitung).
Verwendung von cv::Mat: Verbessern Sie die Verwendung von cv::Mat anstelle der benutzerdefinierten Bildstruktur in C (in Bearbeitung).
Listenfunktionalität: Ersetzen Sie die alte Listenfunktionalität durch std::vector oder std::list.
Unterstützung für Graustufenbilder: Unterstützung für 1-Kanal-Graustufenbilder behoben.
Unterstützung für N-Kanal-Bilder: Unterstützung für Bilder mit mehr als 3 Kanälen (z. B. Tiefen- oder Wärmekanäle) hinzufügen.
Laufende Codebereinigung: Fahren Sie mit der laufenden Codebereinigung fort (in Bearbeitung).
Langfristige Ziele
CUDA/CUDNN-Probleme: Beheben Sie CUDA/CUDNN-Kompatibilitätsprobleme zwischen verschiedenen GPUs.
CUDA/CUDNN-Code neu schreiben: Schreiben Sie den CUDA/CUDNN-Code neu, um die Leistung und Kompatibilität zu verbessern.
Nicht-NVIDIA-GPU-Unterstützung: Untersuchen Sie die Unterstützung für Nicht-NVIDIA-GPUs.
Gedrehte Begrenzungsrahmen: Implementieren Sie die Unterstützung für gedrehte Begrenzungsrahmen oder Winkelinformationen.
Schlüsselpunkte/Skelette: Unterstützung für Schlüsselpunkte und Skelette hinzufügen.
Heatmaps: Heatmap-Unterstützung implementieren (in Bearbeitung).
Segmentierung: Unterstützung für Segmentierung hinzufügen.