Darknet Object Detection Framework und YOLO
!darknet- und hank.ai-Logos
Darknet ist ein Open-Source-Framework für neuronale Netzwerke, das hauptsächlich in C und CUDA geschrieben ist.
YOLO (You Only Look Once) ist ein Echtzeit-Objekterkennungssystem, das im Darknet-Framework arbeitet.
Lesen Sie, wie Hank.ai der Darknet/YOLO-Community hilft
Ankündigung von Darknet V3 „Jazz“
Siehe die Darknet/YOLO-Website
Bitte lesen Sie die Darknet/YOLO-FAQ durch
Treten Sie dem Darknet/YOLO-Discord-Server bei
Papiere
1. Papier YOLOv7
2. Papierskalierung-YOLOv4
3. Papier YOlov4
4. Papier YOlov3
Allgemeine Informationen
Das Darknet/YOLO-Framework ist weiterhin schneller und genauer als andere Frameworks und Versionen von YOLO.
Dieses Framework ist völlig kostenlos und Open Source. Sie können Darknet/YOLO ohne Lizenz oder Bezahlung in bestehende Projekte und Produkte, auch kommerzielle, integrieren.
Darknet V3 („Jazz“), veröffentlicht im Oktober 2024, kann die LEGO-Datensatzvideos bei Verwendung einer NVIDIA RTX 3090-GPU mit bis zu 1000 FPS präzise verarbeiten. Das bedeutet, dass jedes Videobild von Darknet/YOLO in höchstens 1 Millisekunde gelesen, in der Größe geändert und verarbeitet wird.
Treten Sie dem Darknet/YOLO Discord-Server bei, um Hilfe oder Diskussionen zu erhalten: https://discord.gg/zSq8rtW
Die CPU-Version von Darknet/YOLO läuft auf verschiedenen Geräten, darunter Raspberry Pi, Cloud- und Colab-Servern, Desktops, Laptops und High-End-Trainingsgeräten. Die GPU-Version von Darknet/YOLO erfordert eine CUDA-fähige GPU von NVIDIA.
Darknet/YOLO funktioniert bekanntermaßen unter Linux, Windows und Mac. Siehe die Bauanleitung unten.
Darknet-Version
Das ursprüngliche Darknet-Tool, das 2013–2017 von Joseph Redmon geschrieben wurde, hatte keine Versionsnummer. Wir betrachten diese Version als 0.x.
Auch das nächste beliebte Darknet-Repo, das zwischen 2017 und 2021 von Alexey Bochkovskiy gepflegt wurde, hatte keine Versionsnummer. Wir betrachten diese Version als 1.x.
Das von Hank.ai gesponserte und ab 2023 von Stéphane Charette gepflegte Darknet-Repo war das erste mit einem Versionsbefehl. Von 2023 bis Ende 2024 gab es Version 2.x „OAK“ zurück.
Das Ziel bestand darin, so wenig wie möglich von der vorhandenen Funktionalität zu beeinträchtigen und sich gleichzeitig mit der Codebasis vertraut zu machen.
Zu den wichtigsten Änderungen in Darknet 2.x gehören:
Die Build-Schritte wurden für einen einheitlichen CMake-basierten Build unter Windows und Linux neu geschrieben.
Konvertierte die Codebasis, um den C++-Compiler zu verwenden.
Die chart.png-Visualisierung während des Trainings wurde verbessert.
Fehlerbehebungen und Leistungsoptimierungen, die sich hauptsächlich auf die Reduzierung der Trainingszeit konzentrieren.
Der letzte Zweig dieser Codebasis ist Version 2.1 im v2-Zweig.
Die nächste Entwicklungsphase begann Mitte 2024 und wurde im Oktober 2024 veröffentlicht. Der Versionsbefehl gibt nun 3.x „JAZZ“ zurück.
Sie können jederzeit den vorherigen v2-Zweig auschecken, wenn Sie einen dieser Befehle ausführen müssen. Teilen Sie uns mit, wenn Ihnen fehlende Befehle auffallen.
Zu den wichtigsten Änderungen in Darknet 3.x gehören:
Entfernung vieler alter und nicht gepflegter Befehle.
Erhebliche Leistungsoptimierungen sowohl für Training als auch für Inferenz.
Änderung der alten C-API, die geringfügige Änderungen für Anwendungen erfordert, die die ursprüngliche Darknet-API verwenden. Die aktualisierte API-Dokumentation finden Sie hier: https://darknetcv.ai/api/api.html
Einführung einer neuen Darknet V3 C- und C++-API: https://darknetcv.ai/api/api.html
Neue Anwendungen und Beispielcode im Verzeichnis src-examples: https://darknetcv.ai/api/files.html
Vortrainierte MSCOCO-Gewichte
Mehrere beliebte Versionen von YOLO wurden zur Vereinfachung auf dem MSCOCO-Datensatz vorab trainiert. Dieser Datensatz enthält 80 Klassen, die in der Textdatei cfg/coco.names zu finden sind.
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.
Die vorab trainierten MSCOCO-Gewichte können von verschiedenen Orten heruntergeladen werden, einschließlich dieses Repositorys:
YOLOv2 (November 2016)
YOLOv2-tiny
YOLOv2-voll
YOLOv3 (Mai 2018)
YOLOv3-tiny
YOLOv3-voll
YOLOv4 (Mai 2020)
YOLOv4-tiny
YOLOv4-voll
YOLOv7 (August 2022)
YOLOv7-tiny
YOLOv7-voll
Die vortrainierten MSCOCO-Gewichte dienen nur zu Demonstrationszwecken. Die entsprechenden .cfg- und .names-Dateien für MSCOCO befinden sich im cfg-Verzeichnis. 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 Sie ermutigt werden, Ihre eigenen Netzwerke zu trainieren. MSCOCO wird in erster Linie verwendet, um zu bestätigen, dass alles ordnungsgemäß funktioniert.
Gebäude
Die verschiedenen in der Vergangenheit (vor 2023) verfügbaren Build-Methoden wurden zu einer einzigen einheitlichen Lösung zusammengeführt. Darknet erfordert C++17 oder neuer, 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.
Seien Sie vorsichtig, wenn Sie alten Tutorials mit komplizierteren Build-Schritten folgen oder Build-Schritte erstellen, die nicht mit dem Inhalt dieser Readme-Datei übereinstimmen. Die unten beschriebenen neuen Bauschritte begannen im August 2023.
Softwareentwicklern wird empfohlen, https://darknetcv.ai/ zu besuchen, um Informationen über die Interna des Darknet/YOLO-Objekterkennungs-Frameworks zu erhalten.
Google Colab
Die Google Colab-Anweisungen sind dieselben wie die Linux-Anweisungen. Es stehen mehrere Jupyter-Notebooks zur Verfügung, die Aufgaben wie das Training eines neuen Netzwerks demonstrieren.
Sehen Sie sich die Notizbücher im Unterverzeichnis colab an und/oder befolgen Sie die folgenden Linux-Anweisungen.
Linux CMake-Methode
Darknet-Build-Tutorial für Linux
1. Installieren Sie die erforderlichen Pakete:
`Bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Klonen Sie das Darknet-Repository:
`Bash
mkdir ~/src
cd ~/src
Git-Klon https://github.com/hank-ai/darknet
CD Darknet
`
3. Erstellen Sie ein Build-Verzeichnis und führen Sie CMake aus:
`Bash
mkdir-Build
CD-Build
cmake -DCMAKEBUILDTYPE=Release ..
`
4. Darknet aufbauen:
`Bash
mache -j4
`
5. Optional: Installieren Sie CUDA oder CUDA+cuDNN
Wenn Sie über eine moderne NVIDIA-GPU verfügen, können Sie entweder CUDA oder CUDA+cuDNN installieren. Dadurch kann Darknet Ihre GPU für eine schnellere Bild- und Videoverarbeitung nutzen.
- Laden Sie CUDA von https://developer.nvidia.com/cuda-downloads herunter und installieren Sie es.
- Laden Sie cuDNN von https://developer.nvidia.com/rdp/cudnn-download oder https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#cudnn-package-manager herunter und installieren Sie es. Installationsübersicht.
Wichtig: Wenn Sie CUDA oder CUDA+cuDNN nach dem Erstellen von Darknet installieren, müssen Sie die Datei CMakeCache.txt in Ihrem Build-Verzeichnis löschen und cmake erneut ausführen, um sicherzustellen, dass CMake die erforderlichen Dateien finden kann.
Hinweis: Darknet kann ohne CUDA ausgeführt werden. Wenn Sie jedoch ein benutzerdefiniertes Netzwerk trainieren möchten, ist entweder CUDA oder CUDA+cuDNN erforderlich.
6. Packen und installieren Sie Darknet:
`Bash
Paket machen
sudo dpkg -i darknet-VERSION.deb
`
Wichtig: Wenn Sie eine ältere Version von CMake verwenden, müssen Sie diese möglicherweise aktualisieren, bevor Sie den Befehl cmake ausführen. Aktualisieren Sie CMake unter Ubuntu mit:
`Bash
sudo apt-get purge cmake
sudo snap install cmake --classic
`
Fortgeschrittene Benutzer:
– Wenn Sie eine RPM-Installationsdatei anstelle einer DEB-Datei erstellen möchten, bearbeiten Sie die folgenden zwei Zeilen in CM_package.cmake, bevor Sie make package ausführen:
„cmake
# SET (CPACK_GENERATOR „DEB“)
SET (CPACK_GENERATOR „RPM“)
`
- Um das Installationspaket nach Abschluss der Erstellung zu installieren, verwenden Sie den Paketmanager Ihrer Distribution. Beispielsweise auf Debian-basierten Systemen wie Ubuntu:
`Bash
sudo dpkg -i darknet-2.0.1-Linux.deb
`
– Durch die Installation des .deb-Pakets werden die folgenden Dateien kopiert:
- /usr/bin/darknet: Die ausführbare Darknet-Datei.
- /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/...: Speicherort aller .cfg-Vorlagen.
- Jetzt sind Sie fertig! Darknet wurde in /usr/bin/ erstellt und installiert. Führen Sie die Darknet-Version über die CLI aus, um die Installation zu bestätigen.
Windows CMake-Methode
Diese Anleitung setzt eine brandneue Installation von Windows 11 22H2 voraus.
1. Installieren Sie die erforderliche Software:
„Powershell
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:
- Öffnen Sie 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:
- Öffnen Sie das „Windows-Start“-Menü und wählen Sie „Entwickler-Eingabeaufforderung für VS 2022“. Verwenden Sie für diese Schritte nicht PowerShell.
- Fortgeschrittene Benutzer: Anstatt die Entwickler-Eingabeaufforderung auszuführen, können Sie eine normale Eingabeaufforderung oder eine SSH-Verbindung zum Gerät verwenden und ProgrammeDateienMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat manuell ausführen.
- Führen Sie die folgenden Befehle aus:
„Powershell
CDC:
mkdir c:src
cd c:src
Git-Klon https://github.com/microsoft/vcpkg
cd 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 letzten Schritt geduldig, da die Ausführung lange dauern kann. Es müssen viele Dinge heruntergeladen und erstellt werden.
- Fortgeschrittene Benutzer: Beachten Sie, dass Sie beim Erstellen von OpenCV möglicherweise viele weitere optionale Module hinzufügen möchten. Führen Sie „.vcpkg.exe search opencv“ aus, um die vollständige Liste anzuzeigen.
4. Optional: Installieren Sie CUDA oder CUDA+cuDNN
Wenn Sie über eine moderne NVIDIA-GPU verfügen, können Sie entweder CUDA oder CUDA+cuDNN installieren. Dadurch kann Darknet Ihre GPU für eine schnellere Bild- und Videoverarbeitung nutzen.
- Laden Sie CUDA von https://developer.nvidia.com/cuda-downloads herunter und installieren Sie es.
- Laden Sie cuDNN von https://developer.nvidia.com/rdp/cudnn-download oder https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows herunter und installieren Sie es.
Wichtig: Wenn Sie CUDA oder CUDA+cuDNN nach dem Erstellen von Darknet installieren, müssen Sie die Datei CMakeCache.txt in Ihrem Build-Verzeichnis löschen und cmake erneut ausführen, um sicherzustellen, dass CMake die erforderlichen Dateien finden kann.
Hinweis: Darknet kann ohne CUDA ausgeführt werden. Wenn Sie jedoch ein benutzerdefiniertes Netzwerk trainieren möchten, ist entweder CUDA oder CUDA+cuDNN erforderlich.
5. Darknet klonen und aufbauen:
„Powershell
cd c:src
Git-Klon https://github.com/hank-ai/darknet.git
CD Darknet
mkdir-Build
CD-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
`
Wichtig:
- CUDA-Installation: CUDA muss nach Visual Studio installiert werden. Wenn Sie Visual Studio aktualisieren, denken Sie daran, CUDA neu zu installieren.
- Fehlende DLLs: Wenn Fehler bezüglich fehlender CUDA- oder cuDNN-DLLs (z. B. cublas64_12.dll) auftreten, kopieren Sie die CUDA-DLL-Dateien manuell in dasselbe Ausgabeverzeichnis wie darknet.exe. Zum Beispiel:
„Powershell
Kopieren Sie „C:ProgrammeNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll“ src-cliRelease
`
(Dies ist ein Beispiel; überprüfen Sie die von Ihnen ausgeführte CUDA-Version und passen Sie den Pfad entsprechend an.)
- Führen Sie msbuild.exe erneut aus: Führen Sie nach dem Kopieren der DLL-Dateien den letzten msbuild.exe-Befehl erneut aus, um das NSIS-Installationspaket zu generieren:
„Powershell
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
- Fortgeschrittene Benutzer: Beachten Sie, dass die Ausgabe des cmake-Befehls eine normale Visual Studio-Lösungsdatei (darknet.sln) ist. Wenn Sie regelmäßig die Visual Studio-GUI anstelle von msbuild.exe verwenden, können Sie die Befehlszeilenschritte ignorieren und das Darknet-Projekt in Visual Studio laden.
- Sie sollten jetzt eine Datei haben, die Sie ausführen können: C:srcDarknetbuildsrc-cliReleasedarknet.exe. Führen Sie dies aus, um die Version C:srcDarknetbuildsrc-cliReleasedarknet.exe zu testen.
6. Darknet installieren:
- Führen Sie den NSIS-Installationsassistenten aus, der im letzten Schritt erstellt wurde. Suchen Sie im Build-Verzeichnis nach der Datei darknet-VERSION.exe. Zum Beispiel:
`
darknet-2.0.31-win64.exe
`
- Das NSIS-Installationspaket wird:
- Erstellen Sie ein Verzeichnis mit dem Namen Darknet, zum Beispiel C:ProgrammeDarknet.
- Installieren Sie die CLI-Anwendung (darknet.exe) und andere Beispiel-Apps.
- Installieren Sie die erforderlichen 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-Vorlagendateien.
- Jetzt sind Sie fertig! Sobald der Installationsassistent abgeschlossen ist, ist Darknet unter C:ProgrammeDarknet installiert. Führen Sie dies aus, um die Version C:ProgrammeDarknetbindarknet.exe zu testen.
Nutzung von Darknet
CLI
Im Folgenden finden Sie keine vollständige Liste aller von Darknet unterstützten Befehle.
Ziehen Sie neben der Darknet-CLI auch die DarkHelp-Projekt-CLI in Betracht, die eine alternative CLI zu Darknet/YOLO mit erweiterten Funktionen bietet, die nicht direkt im Darknet verfügbar sind. Sie können sowohl die Darknet-CLI als auch die DarkHelp-CLI zusammen verwenden.
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 Netzwerk aus dem Internet herunterladen. Beispiele für vorab trainierte Datensätze sind:
LEGO Gears (zum Finden von Objekten in einem Bild)
Rolodex (zum Suchen von Text in einem Bild)
MSCOCO (Standardobjekterkennung der 80er-Klasse)
Befehle zum Ausführen:
Holen Sie sich Hilfe:
`Bash
Darknet-Hilfe
`
Überprüfen Sie die Version:
`Bash
Darknet-Version
`
Mithilfe eines Bildes vorhersagen:
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“.
`
Ausgabekoordinaten:
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
`
Lesen von einer Webcam:
V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -c 0
`
V3:
`Bash
darknet08display_webcam Tiere
`
Ergebnisse in einem 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 Genauigkeit des neuronalen Netzwerks:
`Bash
Darknet-Detektorkarte fahren.daten fahren.cfg fahren_best.gewichte ...
`
Beispielausgabe:
`
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 Person 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 30 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 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
`
Prüfgenauigkeit mAP@IoU=75:
`Bash
Darknet-Detektorkarte Animals.data Animals.cfg Animalsbest.weights -iouthresh 0,75
`
Anker neu berechnen:
Es ist am besten, Anker in DarkMark neu zu berechnen, da es 100 Mal hintereinander ausgeführt wird und die besten Anker auswählt. Wenn Sie jedoch die ältere Version im Darknet verwenden möchten:
`Bash
Darknet-Detektor calcanchors Animals.data -numof_clusters 6 -width 320 -height 256
`
Ein neues Netzwerk trainieren:
`Bash
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
(Siehe auch den Abschnitt „Schulung“ unten)
Ausbildung
Schnelle Links zu relevanten Abschnitten der Darknet/YOLO-FAQ:
Wie soll ich meine Dateien und Verzeichnisse einrichten?
Welche Konfigurationsdatei soll ich verwenden?
Welchen Befehl sollte ich beim Training meines eigenen Netzwerks verwenden?
Der einfachste Weg zum Annotieren und Trainieren ist DarkMark, das alle notwendigen Darknet-Dateien erstellt. Dies ist die empfohlene Methode zum Trainieren eines neuen neuronalen Netzwerks.
Wenn Sie die verschiedenen Dateien lieber manuell einrichten möchten, um ein benutzerdefiniertes Netzwerk zu trainieren:
1. Erstellen Sie einen neuen Ordner:
- Wählen Sie einen Ordner zum Speichern Ihrer Dateien. In diesem Beispiel erstellen wir ein neuronales Netzwerk zur Erkennung von Tieren. Das Verzeichnis lautet also ~/nn/animals/.
2. Kopieren Sie eine Darknet-Konfigurationsdatei:
- Kopieren Sie eine Darknet-Konfigurationsdatei als Vorlage. Verwenden Sie beispielsweise cfg/yolov4-tiny.cfg. Platzieren Sie dies in dem von Ihnen erstellten Ordner. Jetzt sollten Sie ~/nn/animals/animals.cfg haben.
3. Erstellen Sie eine Animals.names-Textdatei:
- Erstellen Sie eine Textdatei „animals.names“ im selben Ordner wie die Konfigurationsdatei. Sie haben jetzt ~/nn/animals/animals.names.
4. Bearbeiten Sie die Datei Animals.names:
- Bearbeiten Sie die Datei Animals.names mit einem Texteditor. Listen Sie die Klassen auf, die Sie erkennen möchten, mit genau einem Eintrag pro Zeile, ohne Leerzeilen und ohne Kommentare. In diesem Beispiel enthält die .names-Datei vier Zeilen:
`
Hund
Katze
Vogel
Pferd
`
5. Erstellen Sie eine Animals.data-Textdatei:
- Erstellen Sie eine Animals.data-Textdatei im selben Ordner. 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 für Bilder und Anmerkungen:
- 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 dieser TXT-Anmerkungsdateien ist sehr spezifisch. Sie können sie nicht manuell erstellen, da für jede Anmerkung die genauen Koordinaten erforderlich sind. Verwenden Sie DarkMark oder eine ähnliche Software, um Ihre Bilder mit Anmerkungen zu versehen. Das YOLO-Annotationsformat wird in den Darknet/YOLO-FAQ beschrieben.
7. Erstellen Sie „train“- und „valid“-Textdateien:
- Erstellen Sie die in der .data-Datei genannten Textdateien „train“ und „valid“.
– Diese beiden Textdateien sollten alle Bilder auflisten, die Darknet zum Training und zur Validierung (zur Berechnung von mAP%) verwendet.
- Jede Zeile sollte genau einen Bildpfad und Dateinamen enthalten. Sie können relative oder absolute Pfade verwenden.
8. Ändern Sie die .cfg-Datei:
- Verwenden Sie einen Texteditor, um Ihre .cfg-Datei zu ändern:
- Stellen Sie sicher, dass Batch=64 ist.
- Unterteilungen: Abhängig von den Netzwerkabmessungen und dem GPU-Speicher müssen Sie möglicherweise die Unterteilungen anpassen. Beginnen Sie mit subdivisions=1 und lesen Sie die Darknet/YOLO-FAQ, wenn es nicht funktioniert.
- Maxbatches: Legen Sie einen guten Startwert für Maxbatches auf das 2000-fache der Anzahl der Klassen fest. In diesem Beispiel haben wir 4 Tiere, also max_batches=8000.
- Schritte: Stellen Sie die Schritte auf 80 % und 90 % von max_batches ein. In diesem Fall würden wir Schritte=6400,7200 verwenden.
- Breite und Höhe: Dies sind die Netzwerkabmessungen. Die Darknet/YOLO-FAQ erklärt, wie man die beste Größe berechnet.
- Klassen: Suchen Sie nach allen Instanzen von „classes=...“ und aktualisieren Sie sie mit der Anzahl der Klassen in Ihrer .names-Datei. In diesem Beispiel würden wir „classes=4“ verwenden.
- Filter: Suchen Sie nach allen Instanzen von filter=... in den [convolutional]-Abschnitten vor jedem [yolo]-Abschnitt. Der zu verwendende Wert ist (Anzahl der Klassen + 5) 3. In diesem Beispiel ist (4 + 5) 3 = 27. Wir würden also filter=27 in den entsprechenden Zeilen verwenden.
9. Beginnen Sie mit dem Training:
- Navigieren Sie zum Verzeichnis ~/nn/animals/:
`Bash
cd ~/nn/animals/
`
- Führen Sie den folgenden Befehl aus, um mit dem Training zu beginnen:
`Bash
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
- Sei geduldig. Die besten Gewichte werden als Animals_best.weights gespeichert. Sie können den Trainingsfortschritt verfolgen, indem Sie die Datei chart.png beobachten. Weitere Parameter, die Sie möglicherweise während des Trainings verwenden möchten, 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: Zum Verwalten Ihrer Darknet/YOLO-Projekte, zum Kommentieren von Bildern, zum Überprüfen von Anmerkungen und zum Generieren von Dateien für das Training mit Darknet.
DarkHelp: Für eine robuste alternative CLI zu Darknet, die Bildkacheln, Objektverfolgung in Videos und eine robuste C++-API verwendet, die für kommerzielle Anwendungen geeignet ist.
Darknet/YOLO-FAQ: Eine umfassende Ressource zur Beantwortung Ihrer Fragen.
Stéphanes YouTube-Kanal: Zahlreiche Tutorials und Beispielvideos.
Darknet/YOLO Discord-Server: Treten Sie der Community für Support und Diskussionen bei.
Roadmap
Letzte Aktualisierung 30.10.2024:
Vollendet:
Qsort() wurde während des Trainings gegen std::sort() ausgetauscht (einige andere unklare sind noch übrig).
check_mistakes, getchar() und system() entfernt.
Konvertierte Darknet zur Verwendung des C++-Compilers (g++ unter Linux, VisualStudio unter Windows).
Der Windows-Build wurde korrigiert.
Python-Unterstützung behoben.
Habe die Darknet-Bibliothek aufgebaut.
Beschriftungen für Vorhersagen („Alphabet“-Code) wieder aktiviert.
CUDA/GPU-Code wieder aktiviert.
CUDNN erneut aktiviert.
CUDNN-Hälfte wieder aktiviert.
Die hartcodierte CUDA-Architektur wurde entfernt.
Verbesserte CUDA-Versionsinformationen.
AVX wieder aktiviert.
Alte Lösungen und Makefile entfernt.
OpenCV nicht optional gemacht.
Abhängigkeit von der alten pthread-Bibliothek entfernt.
STB entfernt.
CMakeLists.txt wurde neu geschrieben, um die neue CUDA-Erkennung zu verwenden.
Alter „Alphabet“-Code entfernt und die über 700 Bilder in Daten/Beschriftungen gelöscht.
Out-of-Source-Builds aktiviert.
Verbesserte Ausgabe der Versionsnummer.
Implementierung von Leistungsoptimierungen im Zusammenhang mit Schulungen (laufend).
Leistungsoptimierungen im Zusammenhang mit Inferenz implementiert (fortlaufend).
Wo möglich, wird Pass-by-Reference verwendet.
.hpp-Dateien bereinigt.
Darknet.h neu geschrieben.
Es wurde vermieden, cv::Mat in void* umzuwandeln und es als richtiges C++-Objekt zu verwenden.
Die Konsistenz bei der Verwendung der internen Bildstruktur wurde korrigiert oder verbessert.
Builds für ARM-basierte Jetson-Geräte korrigiert. (Es ist unwahrscheinlich, dass Original-Jetson-Geräte repariert werden, da sie von NVIDIA nicht mehr unterstützt werden – kein C++17-Compiler. Neue Jetson-Orin-Geräte funktionieren).
Die Python-API in V3 wurde korrigiert.
Verbesserte Unterstützung für Python. (Sind Python-Entwickler bereit, dabei zu helfen?)
Kurzfristige Ziele
Ersetzen Sie printf() durch std::cout (in Bearbeitung).
Untersuchen Sie die Unterstützung für alte Zed-Kameras.
Verbessern und konsistenteres Befehlszeilen-Parsing (in Bearbeitung).
Mittelfristige Ziele
Entfernen Sie den gesamten char*-Code und ersetzen Sie ihn durch std::string.
Vermeiden Sie das Ausblenden von Warnungen und bereinigen Sie Compiler-Warnungen (in Bearbeitung).
Verbessern Sie die Verwendung von cv::Mat anstelle der benutzerdefinierten Bildstruktur in C (in Bearbeitung).
Ersetzen Sie die alte Listenfunktionalität durch std::vector oder std::list.
Unterstützung für 1-Kanal-Graustufenbilder behoben.
Fügen Sie Unterstützung für N-Kanal-Bilder hinzu, bei denen N > 3 ist (z. B. Bilder mit zusätzlicher Tiefe oder Wärmekanäle).
Setzen Sie die laufende Codebereinigung fort (in Bearbeitung).
Langfristige Ziele
Beheben Sie CUDA/CUDNN-Probleme mit allen GPUs.
Schreiben Sie den CUDA+cuDNN-Code neu.
Erwägen Sie, Unterstützung für Nicht-NVIDIA-GPUs hinzuzufügen.
Fügen Sie gedrehte Begrenzungsrahmen oder „Winkel“-Unterstützung hinzu.
Implementieren Sie Schlüsselpunkte/Skelette.
Heatmaps hinzufügen (in Bearbeitung).
Segmentierung implementieren.