Darknet Object Detection Framework und YOLO
!darknet- und hank.ai-Logos
Darknet ist ein Open-Source-Framework für neuronale Netzwerke, das in C, C++ und CUDA geschrieben ist.
YOLO (You Only Look Once) ist ein hochmodernes Echtzeit-Objekterkennungssystem, das im Darknet-Framework läuft.
Lesen Sie, wie Hank.ai der Darknet/YOLO-Community hilft: https://hank.ai/
Ankündigung von Darknet V3 „Jazz“: https://darknetcv.ai/
Bitte lesen Sie die Darknet/YOLO-FAQ durch: https://darknetcv.ai/faq/
Treten Sie dem Darknet/YOLO Discord-Server bei: https://discord.gg/zSq8rtW
Papiere
1. Papier YOLOv7: https://arxiv.org/abs/2207.02670
2. Paper Scaled-YOLOv4: https://arxiv.org/abs/2103.05293
3. Papier YOLOv4: https://arxiv.org/abs/2004.10934
4. Papier YOLOv3: https://pjreddie.com/media/files/papers/YOLOv3.pdf
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 Zahlung einer Gebühr 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 ausführen. Das bedeutet, dass jedes Videobild von Darknet/YOLO in 1 Millisekunde oder weniger gelesen, in der Größe geändert und verarbeitet wird.
Die CPU-Version von Darknet/YOLO kann auf einfachen Geräten wie Raspberry Pi, Cloud- und Colab-Servern, Desktops, Laptops und High-End-Trainingsgeräten ausgeführt werden. 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
1. Version 0.x: Das ursprüngliche Darknet-Tool, das 2013–2017 von Joseph Redmon geschrieben wurde.
2. Version 1.x: Das nächste beliebte Darknet-Repo, das von Alexey Bochkovskiy zwischen 2017 und 2021 verwaltet wird.
3. Version 2.x „OAK“: Das von Hank.ai gesponserte und ab 2023 von Stéphane Charette gepflegte Darknet-Repo. Es war das erste mit einem Versionsbefehl. Diese Version brachte folgende Änderungen mit sich:
– Die Build-Schritte wurden für einen einheitlichen CMake-Ansatz unter Windows und Linux neu geschrieben.
– Die Codebasis wurde für die Verwendung des C++-Compilers konvertiert.
- Verbesserte Generierung von chart.png während des Trainings.
- Fehlerbehebungen und Leistungsoptimierungen im Zusammenhang mit der Trainingszeit.
4. Version 2.1: Der letzte Zweig der 2.x-Codebasis, zu finden im v2-Zweig.
5. Version 3.x „JAZZ“: Die nächste Entwicklungsphase, veröffentlicht im Oktober 2024.
- Viele alte und nicht gepflegte Befehle entfernt.
- Leistungsoptimierungen für Training und Inferenz implementiert.
– Die alte C-API wurde geändert. Für Anwendungen, die die ursprüngliche Darknet-API verwenden, sind geringfügige Änderungen erforderlich. https://darknetcv.ai/api/api.html
- Einführung einer neuen Darknet V3 C- und C++-API: https://darknetcv.ai/api/api.html
– Neue Apps und Beispielcode in src-examples hinzugefügt: https://darknetcv.ai/api/files.html
Sie können jederzeit den vorherigen v2-Zweig auschecken, wenn Sie einen der Befehle dieser Version ausführen müssen. Teilen Sie uns mit, wenn Sie auf fehlende Befehle stoßen, damit wir prüfen können, ob diese wieder hinzugefügt werden.
Vortrainierte MSCOCO-Gewichte
Mehrere beliebte Versionen von YOLO wurden zur Vereinfachung auf dem MSCOCO-Datensatz vorab trainiert. Dieser Datensatz verfügt über 80 Klassen, die in der Textdatei cfg/coco.names eingesehen werden können.
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.weights
yolov2-full.weights
YOLOv3 (Mai 2018):
yolov3-tiny.weights
yolov3-full.weights
YOLOv4 (Mai 2020):
yolov4-tiny.weights
yolov4-full.weights
YOLOv7 (August 2022):
yolov7-tiny.weights
yolov7-full.weights
Die vortrainierten MSCOCO-Gewichte werden nur zu Demozwecken bereitgestellt. Die entsprechenden .cfg- und .names-Dateien für MSCOCO befinden sich im cfg-Verzeichnis. Beispielbefehle:
`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
`
Beachten Sie, dass Sie dazu 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.
Google Colab
Die Google Colab-Anweisungen sind dieselben wie die Linux-Anweisungen. Es stehen mehrere Jupyter-Notebooks zur Verfügung, die zeigen, wie verschiedene Aufgaben ausgeführt werden, beispielsweise das Training eines neuen Netzwerks.
Sehen Sie sich die Notizbücher im Unterverzeichnis „colab“ an oder befolgen Sie die nachstehenden Linux-Anweisungen.
Linux CMake-Methode
Darknet-Build-Tutorial für Linux
1. 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.
2. Installieren Sie die erforderlichen Pakete:
`Bash
sudo apt-get install build-essential git libopencv-dev cmake
`
3. Klonen Sie das Darknet-Repository:
`Bash
mkdir ~/srccd ~/src
Git-Klon https://github.com/hank-ai/darknet
`
4. Erstellen Sie ein Build-Verzeichnis:
`Bash
CD Darknet
mkdir-Build
CD-Build
`
5. CMake-Projektdateien generieren:
`Bash
cmake -DCMAKEBUILDTYPE=Release ..
`
Wichtig: Sie müssen die Datei CMakeCache.txt aus Ihrem Darknet-Build-Verzeichnis löschen, um CMake zu zwingen, alle erforderlichen Dateien erneut zu finden.
6. Darknet aufbauen:
`Bash
Erstellen Sie ein -j4-Paket
`
7. Darknet-Paket installieren:
`Bash
sudo dpkg -i darknet-VERSION.deb
`
CUDA und cuDNN installieren (optional)
Darknet kann ohne CUDA laufen, 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.
- Stellen Sie sicher, dass Sie nvcc und nvidia-smi ausführen können. Möglicherweise müssen Sie Ihre PATH-Variable ändern.
2. cuDNN 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 Laden Sie cuDNN herunter und installieren Sie es.
CUDA oder cuDNN aktualisieren
Wenn Sie CUDA oder CUDA+cuDNN zu einem späteren Zeitpunkt installieren oder auf eine neuere Version der NVIDIA-Software aktualisieren:
1. Darknet neu aufbauen:
- Löschen Sie die Datei CMakeCache.txt aus Ihrem Darknet-Build-Verzeichnis.
- Führen Sie cmake aus und geben Sie die Befehle erneut ein.
Fortgeschrittene Benutzer
Um eine RPM-Installationsdatei anstelle einer DEB-Datei zu erstellen, bearbeiten Sie die relevanten Zeilen in CM_package.cmake, bevor Sie make -j4 package ausführen.
„cmake
# SET (CPACK_GENERATOR „DEB“)
SET (CPACK_GENERATOR „RPM“)
`
Um das Installationspaket nach Abschluss der Erstellung zu installieren, verwenden Sie den für Ihre Distribution üblichen Paketmanager. Beispielsweise auf Debian-basierten Systemen wie Ubuntu:
`Bash
sudo dpkg -i darknet-2.0.1-Linux.deb
`
Testen der Installation
Nach der Installation sollten Sie über die folgenden Dateien verfügen:
/usr/bin/darknet: Die 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: 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/...: Hier werden alle .cfg-Vorlagen gespeichert.
Führen Sie den folgenden Befehl aus, um die Installation zu testen:
`Bash
Darknet-Version
`
Windows CMake-Methode
Darknet-Build-Tutorial für Windows
1. Erforderliche Software installieren:
- Öffnen Sie ein normales cmd.exe-Eingabeaufforderungsfenster und führen Sie die folgenden Befehle aus:
`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 alles heruntergeladen und installiert ist, klicken Sie erneut auf das „Windows-Start“-Menü und wählen Sie „Entwickler-Eingabeaufforderung für VS 2022“. Verwenden Sie für diese Schritte nicht PowerShell!
- Führen Sie die folgenden Befehle aus:
`Bash
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
`
Wichtig: Seien Sie bei diesem letzten Schritt geduldig, da die Ausführung lange dauern kann. Es müssen viele Dinge heruntergeladen und erstellt werden.
4. Optional: Installieren Sie CUDA und cuDNN
– 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.
5. CUDA installieren:
- Besuchen Sie https://developer.nvidia.com/cuda-downloads, um CUDA herunterzuladen und zu installieren.
- Stellen Sie sicher, dass Sie nvcc.exe und nvidia-smi.exe ausführen können. Möglicherweise müssen Sie Ihre PATH-Variable ändern.
6. 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.
- Sobald Sie cuDNN heruntergeladen haben, entpacken Sie die Verzeichnisse bin, include und lib und kopieren Sie sie nach C:/Programme/NVIDIA GPU Computing Toolkit/CUDA/[Version]/. Möglicherweise müssen Sie einige Dateien überschreiben.
7. Klonen Sie das Darknet-Repository und erstellen Sie:
`Bash
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
`
8. CUDA-DLLs kopieren (optional):
- Wenn Sie eine Fehlermeldung zu fehlenden CUDA- oder cuDNN-DLLs erhalten, z. B. cublas64_12.dll, kopieren Sie die CUDA-DLL-Dateien manuell in dasselbe Ausgabeverzeichnis wie darknet.exe. Zum Beispiel:
`Bash
kopieren Sie „C:ProgrammeNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll“ src-cliRelease
`
9. Führen Sie msbuild.exe erneut aus, um das NSIS-Installationspaket zu generieren:
`Bash
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
Fortgeschrittene Benutzer
Anstatt die Developer-Eingabeaufforderung auszuführen, können Sie eine normale Eingabeaufforderung oder SSH auf das Gerät verwenden und ProgrammeFilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat manuell ausführen.
Sie können beim Erstellen von OpenCV viele weitere optionale Module hinzufügen. Führen Sie „.vcpkg.exe search opencv“ aus, um die vollständige Liste anzuzeigen.
Die Ausgabe des Befehls cmake ist eine normale Visual Studio-Lösungsdatei, Darknet.sln. Sie können die Befehlszeile ignorieren und das Darknet-Projekt in Visual Studio laden, wenn Sie ein Softwareentwickler sind, der regelmäßig die Visual Studio-GUI verwendet.
Testen der Installation
Sie sollten jetzt die folgende Datei haben: C:srcDarknetbuildsrc-cliReleasedarknet.exe. Führen Sie den folgenden Befehl aus, um die Installation zu testen:
`Bash
C:srcDarknetbuildsrc-cliReleasedarknet.exe-Version
`
Um Darknet, die Bibliotheken, die Include-Dateien und die erforderlichen DLLs korrekt zu installieren, führen Sie den NSIS-Installationsassistenten aus, der im letzten Schritt erstellt wurde. Sehen Sie sich die Datei darknet-VERSION.exe im Build-Verzeichnis an. Zum Beispiel:
`Bash
darknet-2.0.31-win64.exe
`
Die Installation des NSIS-Installationspakets führt zu Folgendem:
Erstellen Sie ein Verzeichnis mit dem Namen Darknet, z. B. C:ProgrammeDarknet.
Installieren Sie die CLI-Anwendung darknet.exe und andere Beispiel-Apps.
Installieren Sie die erforderlichen DLL-Dateien von Drittanbietern, beispielsweise 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.
Führen Sie den folgenden Befehl aus, um die Installation zu testen, nachdem Sie den NSIS-Assistenten ausgeführt haben:
`Bash
C:ProgrammeDarknetbindarknet.exe-Version
`
Nutzung von Darknet
CLI
Im Folgenden finden Sie keine vollständige Liste aller von Darknet unterstützten Befehle.
Beachten Sie zusätzlich zur Darknet-CLI die DarkHelp-Projekt-CLI, die eine alternative CLI zu Darknet/YOLO bereitstellt. Die 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 zusammen verwenden; sie schließen sich nicht gegenseitig aus.
Für die meisten der unten gezeigten Befehle benötigen Sie die .weights-Datei mit den entsprechenden .names- und .cfg-Dateien. Sie können entweder Ihr eigenes Netzwerk trainieren (sehr empfehlenswert!) oder ein neuronales Netzwerk herunterladen, das bereits jemand trainiert und kostenlos im Internet zur Verfügung gestellt hat. Beispiele für vorab trainierte Datensätze sind:
LEGO Gears (Objekte in einem Bild finden)
Rolodex (Text in einem Bild finden)
MSCOCO (Standardobjekterkennung der 80er-Klasse)
Befehle zum Ausführen
1. Holen Sie sich Hilfe:
`Bash
Darknet-Hilfe
`
2. Version prüfen:
`Bash
Darknet-Version
`
3. 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“.
`
4. 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
`
5. 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
`
6. Lesen von einer Webcam:
- V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -c 0
`
- V3:
`Bash
darknet08display_webcam Tiere
`
7. 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
`
8. 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
`
9. Ausführung auf einer bestimmten GPU:
- V2:
`Bash
Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
10. Überprüfung der Genauigkeit des neuronalen Netzwerks:
`Bash
Darknet-Detektorkarte fahren.daten fahren.cfg fahren_best.gewichte ...
`
Ausgabe:
`
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
`
11. Überprüfung der Genauigkeit mAP@IoU=75:
`Bash
Darknet-Detektorkarte Animals.data Animals.cfg Animalsbest.weights -iouthresh 0,75
`
12. Anker neu berechnen:
- DarkMark: Es ist am besten, Anker in DarkMark neu zu berechnen, da es 100 Mal hintereinander ausgeführt wird und aus allen berechneten Ankern die besten auswählt.
- Darknet: Wenn Sie die alte Methode im Darknet verwenden möchten:
`Bash
Darknet-Detektor calcanchors Animals.data -numof_clusters 6 -width 320 -height 256
`
13. Trainieren Sie ein neues Netzwerk:
`Bash
cd ~/nn/animals/
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
Ausbildung
Schnelle Links zu relevanten Abschnitten der Darknet/YOLO-FAQ
1. Wie soll ich meine Dateien und Verzeichnisse einrichten?
2. Welche Konfigurationsdatei soll ich verwenden?
3. Welchen Befehl sollte ich beim Training meines eigenen Netzwerks verwenden?
Verwendung von DarkMark für Anmerkungen und Schulungen (empfohlen)
Der einfachste Weg zum Annotieren und Trainieren ist DarkMark, das alle notwendigen Darknet-Dateien erstellt. Dies wird dringend für das Training eines neuen neuronalen Netzwerks empfohlen.
Manuelles Einrichten von Dateien zum Trainieren eines benutzerdefinierten Netzwerks
Wenn Sie die manuelle Einrichtung bevorzugen, gehen Sie folgendermaßen vor:
1. Erstellen Sie einen neuen Ordner:
- Erstellen Sie einen neuen Ordner zum Speichern Ihrer Trainingsdateien. Sie könnten beispielsweise ~/nn/animals/ erstellen, um ein Netzwerk für die Tiererkennung zu trainieren.
2. Kopieren Sie eine Konfigurationsdateivorlage:
- Kopieren Sie eine der Darknet-Konfigurationsdateien aus cfg/ als Vorlage. Sie könnten beispielsweise cfg/yolov4-tiny.cfg verwenden. Platzieren Sie dies in dem von Ihnen erstellten Ordner. Jetzt sollten Sie ~/nn/animals/animals.cfg haben.
3. Erstellen Sie eine Animals.names-Datei:
- Erstellen Sie eine Textdatei mit dem Namen Animals.names im selben Ordner wie die Konfigurationsdatei.
4. Bearbeiten Sie die Datei Animals.names:
- Listen Sie die Klassen auf, die Sie erkennen möchten, einen Eintrag pro Zeile, ohne Leerzeilen oder Kommentare. Zum Beispiel:
`
Hund
Katze
Vogel
Pferd
`
5. Erstellen Sie eine Animals.data-Datei:
- Erstellen Sie im selben Ordner eine Textdatei mit dem Namen Animals.data.
- Die Datei Animals.data könnte beispielsweise Folgendes enthalten:
`
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 Datensatzordner:
- Erstellen Sie einen Ordner zum Speichern Ihrer Bilder und Anmerkungen. Sie könnten beispielsweise ~/nn/animals/dataset erstellen.
7. Bilder kommentieren:
- Jedes Bild benötigt eine entsprechende TXT-Datei mit Anmerkungen. Das Format dieser TXT-Dateien ist spezifisch und erfordert die genauen Koordinaten für die Anmerkungen. Verwenden Sie DarkMark oder eine ähnliche Software, um Ihre Bilder mit Anmerkungen zu versehen.
8. Erstellen Sie Animalstrain.txt und Animalsvalid.txt:
– Diese Textdateien listen die Bilder auf, die für das Training bzw. die Validierung verwendet werden. Jedes Bild sollte in einer separaten Zeile mit relativen oder absoluten Pfaden stehen.
9. Ändern Sie die Konfigurationsdatei:
- Öffnen Sie Animals.cfg mit einem Texteditor und nehmen Sie die folgenden Änderungen vor:
- Batch=64: Stellen Sie sicher, dass dieser Wert festgelegt ist.
- Unterteilungen: Der beste Wert ist 1. Je nach GPU-Speicher und Netzwerkabmessungen müssen Sie diesen Wert möglicherweise erhöhen.
- maxbatches: Stellen Sie dies auf einen angemessenen Wert ein, normalerweise das 2000-fache der Anzahl der Klassen. Verwenden Sie für dieses Beispiel maxbatches=8000 (4 Klassen * 2000).
- Schritte: Stellen Sie diese auf 80 % und 90 % der maximalen Batches ein. Verwenden Sie für dieses Beispiel „steps=6400,7200“ (da maxbatches=8000).
- Breite und Höhe: Stellen Sie diese auf die gewünschten Netzwerkabmessungen ein. Hinweise zur Auswahl der besten Größe finden Sie in den Darknet/YOLO-FAQ.
- Klassen: Suchen Sie nach allen Instanzen dieser Zeile und ändern Sie sie so, dass sie der Anzahl der Klassen in Ihrer .names-Datei entspricht (in diesem Beispiel klassen=4).
- Filter: Suchen Sie nach allen Instanzen dieser Zeile in den [convolutional]-Abschnitten vor jedem [yolo]-Abschnitt. Der zu verwendende Wert ist (Anzahl der Klassen + 5) 3. Für dieses Beispiel verwenden Sie filter=27 (4 + 5 3).
10. Training beginnen:
`Bash
cd ~/nn/animals/
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
11. Überwachung des Schulungsfortschritts:
- Sei geduldig! Die besten Gewichte werden als Animals_best.weights gespeichert.
- Sie können den Trainingsfortschritt überwachen, indem Sie die Datei chart.png anzeigen.
- Weitere Parameter, die Sie möglicherweise während des Trainings verwenden möchten, finden Sie in den Darknet/YOLO-FAQ.
12. Ausführlichkeit zur Trainingsausgabe hinzufügen:
`Bash
Darknet-Detektor -map -dont_show --verbose train Animals.data Animals.cfg
`
Andere Tools und Links
DarkMark: Zum Verwalten von Darknet/YOLO-Projekten, zum Kommentieren von Bildern, zum Überprüfen von Anmerkungen und zum Generieren von Dateien für Darknet-Schulungen.
DarkHelp: Für eine robuste alternative CLI zu Darknet, die Bildkacheln, Objektverfolgung in Videos und eine robuste C++-API verwendet, die in kommerziellen Anwendungen verwendet werden kann.
Darknet/YOLO-FAQ: https://darknetcv.ai/faq/
Stéphanes YouTube-Kanal: https://www.youtube.com/channel/UCYQ2k0L3X0c56l9gE2r1RQ
Darknet/YOLO Discord-Server: https://discord.gg/zSq8rtW
Roadmap
Letzte Aktualisierung 30.10.2024:
Vollendet
qsort() wurde gegen std::sort() ausgetauscht, wo es während des Trainings verwendet wurde (einige unklare bleiben bestehen).
check_mistakes, getchar() und system() entfernt.
Konvertierte Darknet zur Verwendung des C++-Compilers (g++ unter Linux, VisualStudio unter Windows).
Windows-Build korrigiert.
Python-Unterstützung behoben.
Erstellte Darknet-Bibliothek.
Beschriftungen für Vorhersagen („Alphabet“-Code) wieder aktiviert.
CUDA/GPU-Code wieder aktiviert.
CUDNN erneut aktiviert.
CUDNN-Hälfte wieder aktiviert.
Codieren Sie die CUDA-Architektur nicht hart.
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.
Außerhalb der Quelle erstellt.
Verbesserte Ausgabe der Versionsnummer.
Leistungsoptimierungen im Zusammenhang mit dem Training (laufende Aufgabe).
Leistungsoptimierungen im Zusammenhang mit Inferenz (laufende Aufgabe).
Wo möglich, wird Pass-by-Reference verwendet.
.hpp-Dateien bereinigt.
Darknet.h neu geschrieben.
Wandeln Sie cv::Mat nicht in void* um, sondern verwenden Sie es als richtiges C++-Objekt.
Die Verwendung der internen Bildstruktur wurde korrigiert oder konsistent gemacht.
Build 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.
Python-API in V3 korrigiert.
Verbesserte Unterstützung für Python. (Möchten irgendwelche Python-Entwickler dabei helfen?)
Kurzfristige Ziele
Tauschen Sie printf() gegen std::cout aus (in Bearbeitung).
Informieren Sie sich über die Unterstützung alter ZED-Kameras.
Verbessern und konsistentes Parsen der Befehlszeile durchführen (in Bearbeitung).
Mittelfristige Ziele
Entfernen Sie den gesamten char*-Code und ersetzen Sie ihn durch std::string.
Warnungen nicht ausblenden und Compiler-Warnungen bereinigen (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ärmekanal).
Laufende Codebereinigung (in Bearbeitung).
Langfristige Ziele
Beheben Sie CUDA/CUDNN-Probleme mit allen GPUs.
Schreiben Sie den CUDA+cuDNN-Code neu.
Erwägen Sie die Hinzufügung von Unterstützung für Nicht-NVIDIA-GPUs.
Gedrehte Begrenzungsrahmen oder eine Art „Winkel“-Unterstützung.
Schlüsselpunkte/Skelette.
Heatmaps (in Bearbeitung).
Segmentierung.