Darknet Object Detection Framework und YOLO
Papiere
Allgemeine Informationen
Darknet-Version
Vortrainierte MSCOCO-Gewichte
Gebäude
Google Colab
Linux CMake-Methode
Windows CMake-Methode
Nutzung von Darknet
CLI
Ausbildung
Andere Tools und Links
Roadmap
Kurzfristige Ziele
Mittelfristige Ziele
Langfristige Ziele
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
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
Papier YOLOv7
Papierskaliert-YOLOv4
Papier YOlov4
Papier YOlov3
Das Darknet/YOLO-Framework ist weiterhin schneller und genauer als andere Frameworks und Versionen von YOLO.
Dieses Framework ist sowohl völlig kostenlos als auch Open Source . Sie können Darknet/YOLO in bestehende Projekte und Produkte – auch kommerzielle – integrieren, ohne eine Lizenz oder eine Gebühr zu zahlen.
Darknet V3 („Jazz“), das im Oktober 2024 veröffentlicht wurde, kann die LEGO-Datensatzvideos bei Verwendung einer NVIDIA RTX 3090-GPU präzise mit bis zu 1000 FPS ausführen, was bedeutet, dass jedes Videobild von Darknet/YOLO in 1 Millisekunde gelesen, in der Größe geändert und verarbeitet wird weniger.
Bitte treten Sie dem Darknet/YOLO Discord-Server bei, wenn Sie Hilfe benötigen oder über Darknet/YOLO diskutieren möchten: https://discord.gg/zSq8rtW
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.
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 version
. 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.
Wir haben die Build-Schritte neu geschrieben, sodass wir eine einheitliche Möglichkeit haben, mit CMake sowohl unter Windows als auch unter Linux zu erstellen.
Konvertierte die Codebasis, um den C++-Compiler zu verwenden.
Verbessertes chart.png während des Trainings.
Fehlerbehebungen und leistungsbezogene Optimierungen, hauptsächlich im Zusammenhang mit der Verkürzung der Zeit, die zum Trainieren eines Netzwerks benötigt wird.
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 version
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. Lassen Sie es uns wissen, damit wir prüfen können, ob fehlende Befehle wieder hinzugefügt werden können.
Viele alte und nicht gepflegte Befehle wurden entfernt.
Viele Leistungsoptimierungen, sowohl beim Training als auch bei der Inferenz.
Die Legacy-C-API wurde geändert; Anwendungen, die die ursprüngliche Darknet-API verwenden, benötigen geringfügige Änderungen: https://darknetcv.ai/api/api.html
Neue Darknet V3 C- und C++-API: https://darknetcv.ai/api/api.html
Neue Apps und Beispielcode in src-examples
: https://darknetcv.ai/api/files.html
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
zu sehen 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 und stehen auch in diesem Repo zum Download bereit:
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 werden nur zu Demozwecken bereitgestellt. 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 darknet_02_display_annotated_images coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg darknet_03_display_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 von den Menschen erwartet wird, dass sie ihre eigenen Netzwerke trainieren. MSCOCO wird normalerweise verwendet, um zu bestätigen, dass alles ordnungsgemäß funktioniert.
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 weder C++ beherrschen, um Darknet/YOLO zu erstellen, zu installieren noch auszuführen, noch müssen Sie Mechaniker sein, um ein Auto zu fahren.
Google Colab
Linux
Windows
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.
Die Google Colab-Anweisungen sind dieselben wie die Linux-Anweisungen. Es sind mehrere Jupyter-Notebooks verfügbar, die zeigen, wie bestimmte Aufgaben ausgeführt werden, beispielsweise das Training eines neuen Netzwerks.
Sehen Sie sich die Notizbücher im Unterverzeichnis colab
an und/oder befolgen Sie die folgenden Linux-Anweisungen.
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 .
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 Sie nvcc
und nvidia-smi
ausführen können. Möglicherweise müssen Sie Ihre PATH
Variable ändern.
Wenn Sie CUDA oder CUDA+cuDNN zu einem späteren Zeitpunkt 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!). Passen Sie es bei Bedarf an, wenn Sie eine andere Distribution verwenden.
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 -DCMAKE_BUILD_TYPE=Freigeben .. Erstellen Sie ein -j4-Paket sudo dpkg -i darknet-<INSERT-VERSION-YOU-BUILT-HERE>.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:
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 fish
verwenden, sollte es 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 Siemake -j4 package
ausführen, müssen Sie diese beiden Zeilen bearbeiten:
SET (CPACK_GENERATOR „DEB“)# SET (CPACK_GENERATOR „RPM“)
Für Distributionen wie Centos und OpenSUSE müssen Sie diese beiden Zeilen in
CM_package.cmake
wie folgt ändern:
# 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:
sudo dpkg -i darknet-2.0.1-Linux.deb
Durch die Installation des .deb
Pakets werden die folgenden Dateien kopiert:
/usr/bin/darknet
ist die übliche ausführbare Darknet-Datei. Führen Sie 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 Versionsinformationen für Entwickler.
/usr/lib/libdarknet.so
ist die Bibliothek zum Verlinken für C-, C++- und Python-Entwickler.
/opt/darknet/cfg/...
ist der Ort, an dem alle .cfg
-Vorlagen gespeichert sind.
Sie sind jetzt fertig! Darknet wurde in /usr/bin/
erstellt und installiert. Führen Sie dies zum Testen aus: darknet version
.
Wenn Sie
/usr/bin/darknet
nicht haben , bedeutet das, dass Sie es nicht installiert, sondern nur erstellt haben! Stellen Sie sicher, dass Sie die.deb
oder.rpm
Datei wie oben beschrieben installieren.
Diese Anleitung setzt eine brandneue Installation von Windows 11 22H2 voraus.
Öffnen Sie ein normales cmd.exe
Eingabeaufforderungsfenster und führen Sie die folgenden Befehle 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:
Klicken Sie auf das „Windows-Start“-Menü und führen Sie „Visual Studio Installer“ aus.
Klicken Sie auf Modify
Wählen Sie Desktop Development With C++
Klicken Sie unten rechts auf Modify
und dann auf Yes
. Sobald alles heruntergeladen und installiert ist, klicken Sie erneut auf das „Windows-Start“-Menü und wählen Sie Developer Command Prompt for VS 2022
. Verwenden Sie für diese Schritte nicht PowerShell, da sonst Probleme auftreten werden!
Fortgeschrittene Benutzer:
Anstatt die
Developer Command Prompt
auszuführen, können Sie eine normale Eingabeaufforderung oder SSH auf dem Gerät verwenden und"Program FilesMicrosoft Visual Studio2022CommunityCommon7ToolsVsDevCmd.bat"
manuell ausführen.
Viele Leute machen den gleichen Fehler und denken, sie könnten den vorherigen Schritt überspringen. Bitte überspringen Sie diesen Schritt nicht! Verwenden Sie weder eine normale Eingabeaufforderung noch PowerShell! Lesen Sie die obigen Schritte noch einmal durch, um zu sehen, welche Art von Fenster Sie verwenden müssen . Wann immer Sie Visual Studio über die Eingabeaufforderung zum Kompilieren von C++-Code verwenden möchten, müssen Sie die Entwickler-Eingabeaufforderung von Visual Studio wie oben beschrieben verwenden.
Sobald Sie die Entwickler-Eingabeaufforderung wie oben beschrieben ausgeführt haben, führen Sie die folgenden Befehle aus, um Microsoft VCPKG zu installieren, das dann zum Erstellen von OpenCV verwendet wird:
cd c:mkdir c:srccd c:src Git-Klon https://github.com/microsoft/vcpkgcd vcpkg Bootstrap-vcpkg.bat .vcpkg.exe integrieren installieren .vcpkg.exe integrieren Powershell.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.
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 .
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 Ihre PATH
Variable ändern.
Sobald Sie cuDNN heruntergeladen haben, entpacken Sie die Verzeichnisse bin, include und lib und kopieren Sie sie nach C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/[version]/
. Möglicherweise müssen Sie einige Dateien überschreiben.
Wenn Sie CUDA oder CUDA+cuDNN zu einem späteren Zeitpunkt 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. Während dieses Schritts 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 darknetmkdir buildcd build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=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 fehlende CUDA- oder cuDNN-DLLs wie cublas64_12.dll
erhalten, kopieren Sie die CUDA .dll
Dateien manuell in dasselbe Ausgabeverzeichnis wie Darknet.exe
. Zum Beispiel:
kopieren Sie „C:ProgrammeNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll“ src-cliRelease
(Das ist ein Beispiel! Überprüfen Sie, welche Version Sie verwenden, und führen Sie den Befehl aus, der für das, was Sie installiert haben, geeignet ist.)
Nachdem die Dateien kopiert wurden, führen Sie den letzten msbuild.exe
Befehl erneut aus, um das NSIS-Installationspaket zu generieren:
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
Fortgeschrittene Benutzer:
Beachten Sie, dass die Ausgabe des Befehls
cmake
eine normale Visual Studio-LösungsdateiDarknet.sln
ist. Wenn Sie ein Softwareentwickler sind, der regelmäßig die Visual Studio-GUI anstelle vonmsbuild.exe
zum Erstellen von Projekten verwendet, können Sie die Befehlszeile ignorieren und das Darknet-Projekt in Visual Studio laden.
Sie sollten jetzt diese Datei haben, die Sie ausführen können: C:srcDarknetbuildsrc-cliReleasedarknet.exe
. Führen Sie dies zum Testen aus: 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-<INSERT-VERSION-YOU-BUILT-HERE>-win64.exe
im build
-Verzeichnis an. Zum Beispiel:
darknet-<INSERT-VERSION-YOU-BUILT-HERE>-win64.exe
Die Installation des NSIS-Installationspakets führt zu Folgendem:
Erstellen Sie ein Verzeichnis mit dem Namen Darknet
, z. B. C:Program FilesDarknet
.
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.
Sie sind jetzt fertig! Sobald der Installationsassistent abgeschlossen ist, ist Darknet unter C:Program FilesDarknet
installiert. Führen Sie dies zum Testen aus: C:Program FilesDarknetbindarknet.exe version
.
Wenn Sie
C:/Program Files/darknet/bin/darknet.exe
nicht haben, bedeutet das, dass Sie es nicht installiert, sondern nur erstellt haben! Stellen Sie sicher, dass Sie im vorherigen Schritt alle Bereiche des NSIS-Installationsassistenten durchgehen.
Im Folgenden finden Sie nicht die vollständige Liste aller von Darknet unterstützten Befehle.
Beachten Sie neben der Darknet-CLI auch die DarkHelp-Projekt-CLI, die eine alternative CLI zu Darknet/YOLO bietet. 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)
Zu den auszuführenden Befehlen gehören:
Listen Sie einige mögliche auszuführende Befehle und Optionen auf:
darknet help
Überprüfen Sie die Version:
darknet version
Mithilfe eines Bildes vorhersagen:
V2: darknet detector test cars.data cars.cfg cars_best.weights image1.jpg
V3: darknet_02_display_annotated_images cars.cfg image1.jpg
DarkHelp: DarkHelp cars.cfg cars.cfg cars_best.weights image1.jpg
Ausgabekoordinaten:
V2: darknet detector test animals.data animals.cfg animals_best.weights -ext_output dog.jpg
V3: darknet_01_inference_images animals dog.jpg
DarkHelp: DarkHelp --json animals.cfg animals.names animals_best.weights dog.jpg
Arbeiten mit Videos:
V2: darknet detector demo animals.data animals.cfg animals_best.weights -ext_output test.mp4
V3: darknet_03_display_videos animals.cfg test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
Lesen von einer Webcam:
V2: darknet detector demo animals.data animals.cfg animals_best.weights -c 0
V3: darknet_08_display_webcam animals
Ergebnisse in einem Video speichern:
V2: darknet detector demo animals.data animals.cfg animals_best.weights test.mp4 -out_filename res.avi
V3: darknet_05_process_videos_multithreaded animals.cfg animals.names animals_best.weights test.mp4
DarkHelp: DarkHelp animals.cfg animals.names animals_best.weights test.mp4
JSON:
V2: darknet detector demo animals.data animals.cfg animals_best.weights test50.mp4 -json_port 8070 -mjpeg_port 8090 -ext_output
V3: darknet_06_images_to_json animals image1.jpg
DarkHelp: DarkHelp --json animals.names animals.cfg animals_best.weights image1.jpg
Läuft auf einer bestimmten GPU:
V2: darknet detector demo animals.data animals.cfg animals_best.weights -i 1 test.mp4
So ü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
So überprüfen Sie die Genauigkeit mAP@IoU=75:
darknet detector map animals.data animals.cfg animals_best.weights -iou_thresh 0.75
Die Neuberechnung der Anker erfolgt am besten in DarkMark, da es 100 Mal hintereinander ausgeführt wird und aus allen berechneten Ankern die besten auswählt. Wenn Sie jedoch die alte Version im Darknet ausführen möchten:
Darknet-Detektor calc_anchors Animals.data -num_of_clusters 6 -width 320 -height 256
Trainieren Sie ein neues Netzwerk:
darknet detector -map -dont_show train animals.data animals.cfg
(siehe auch den Trainingsabschnitt unten)
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 Kommentieren und Trainieren ist die Verwendung von DarkMark zum Erstellen aller erforderlichen Darknet-Dateien. Dies ist definitiv die empfohlene Methode, ein neues neuronales Netzwerk zu trainieren.
Wenn Sie die verschiedenen Dateien lieber manuell einrichten möchten, um ein benutzerdefiniertes Netzwerk zu trainieren:
Erstellen Sie einen neuen Ordner, in dem die Dateien gespeichert werden. In diesem Beispiel wird ein neuronales Netzwerk zur Erkennung von Tieren erstellt, daher wird das folgende Verzeichnis erstellt: ~/nn/animals/
.
Kopieren Sie eine der Darknet-Konfigurationsdateien, die Sie als Vorlage verwenden möchten. Siehe beispielsweise cfg/yolov4-tiny.cfg
. Platzieren Sie dies in dem von Ihnen erstellten Ordner. Für dieses Beispiel haben wir jetzt ~/nn/animals/animals.cfg
.
Erstellen Sie eine Textdatei animals.names
in demselben Ordner, in dem Sie die Konfigurationsdatei abgelegt haben. Für dieses Beispiel haben wir jetzt ~/nn/animals/animals.names
.
Bearbeiten Sie die Datei animals.names
mit Ihrem Texteditor. Listen Sie die Klassen auf, die Sie verwenden möchten. Sie benötigen genau 1 Eintrag pro Zeile, ohne Leerzeilen und ohne Kommentare. In diesem Beispiel enthält die .names
Datei genau 4 Zeilen:
Hund Katze Vogel Pferd
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
Erstellen Sie einen Ordner, in dem Sie Ihre Bilder und Anmerkungen speichern. 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 der .txt
Anmerkungsdateien ist sehr spezifisch. Sie können diese Dateien nicht manuell erstellen, da jede Anmerkung die genauen Koordinaten für die 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.
Erstellen Sie die Textdateien „train“ und „valid“, die in der .data
Datei benannt sind. Diese beiden Textdateien müssen alle Bilder einzeln auflisten, die Darknet zum Training und zur Validierung bei der Berechnung des mAP% verwenden muss. Genau ein Bild pro Zeile. Der Pfad und die Dateinamen können relativ oder absolut sein.
Ändern Sie Ihre .cfg
Datei mit einem Texteditor.
Stellen Sie sicher, dass batch=64
.
Beachten Sie die Unterteilungen. Abhängig von den Netzwerkabmessungen und der auf Ihrer GPU verfügbaren Speichermenge müssen Sie möglicherweise die Unterteilungen erhöhen. Der beste Wert ist 1
also beginnen Sie damit. Sehen Sie sich die Darknet/YOLO-FAQ an, wenn 1
für Sie nicht funktioniert.
Beachten Sie max_batches=...
. Ein guter Anfangswert ist 2000 x die Anzahl der Kurse. In diesem Beispiel haben wir 4 Tiere, also 4 * 2000 = 8000. Das heißt, wir verwenden max_batches=8000
.
Beachten Sie steps=...
. Dies sollte auf 80 % und 90 % von max_batches
eingestellt werden. Für dieses Beispiel würden wir steps=6400,7200
verwenden, da max_batches
auf 8000 festgelegt wurde.
Beachten Sie width=...
und height=...
. Dies sind die Netzwerkdimensionen. Die Darknet/YOLO-FAQ erklärt, wie man die beste Größe berechnet.
Suchen Sie nach allen Instanzen der Zeile classes=...
und ändern Sie sie mit der Anzahl der Klassen in Ihrer .names
Datei. Für dieses Beispiel würden wir classes=4
verwenden.
Suchen Sie nach allen Instanzen der Zeile filters=...
im Abschnitt [convolutional]
vor jedem Abschnitt [yolo]
. Der zu verwendende Wert ist (Anzahl_der_Klassen + 5) * 3. Das bedeutet für dieses Beispiel (4 + 5) * 3 = 27. Wir würden also filters=27
in den entsprechenden Zeilen verwenden.
Beginnen Sie mit dem Training! Führen Sie die folgenden Befehle 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 der Fortschritt des Trainings kann durch Betrachten der Datei chart.png
beobachtet werden. 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 Ihrer Darknet/YOLO-Projekte, zum Kommentieren von Bildern, zum Überprüfen Ihrer Anmerkungen und zum Generieren der erforderlichen Dateien für das Training mit Darknet finden Sie unter DarkMark.
Eine robuste alternative CLI zu Darknet, zur Verwendung von Bildkacheln, zur Objektverfolgung in Ihren Videos oder eine robuste C++-API, die problemlos in kommerziellen Anwendungen verwendet werden kann, finden Sie unter DarkHelp.
Sehen Sie nach, ob die Darknet/YOLO-FAQ Ihnen bei der Beantwortung Ihrer Fragen helfen kann.
Sehen Sie sich die zahlreichen Tutorials und Beispielvideos auf Stéphanes YouTube-Kanal an
Wenn Sie eine Supportfrage haben oder mit anderen Darknet/YOLO-Benutzern chatten möchten, treten Sie dem Darknet/YOLO-Discord-Server bei.
Zuletzt aktualisiert am 02.11.2024:
Tauschen Sie qsort() gegen std::sort() aus, wenn es während des Trainings verwendet wird (einige andere unklare bleiben bestehen)
check_mistakes, getchar() und system() loswerden
Konvertieren Sie Darknet, um den C++-Compiler zu verwenden (g++ unter Linux, VisualStudio unter Windows)
Windows-Build reparieren
Korrigieren Sie die Python-Unterstützung
Erstellen Sie eine Darknet-Bibliothek
Beschriftungen für Vorhersagen wieder aktivieren („Alphabet“-Code)
CUDA/GPU-Code erneut aktivieren
CUDNN erneut aktivieren
Aktivieren Sie die CUDNN-Hälfte erneut
Codieren Sie die CUDA-Architektur nicht hart
bessere CUDA-Versionsinformationen
AVX erneut aktivieren
Entfernen Sie alte Lösungen und Makefile
Machen Sie OpenCV nicht optional
Entfernen Sie die Abhängigkeit von der alten pthread-Bibliothek
STB entfernen
Schreiben Sie CMakeLists.txt neu, um die neue CUDA-Erkennung zu verwenden
Entfernen Sie den alten „Alphabet“-Code und löschen Sie die über 700 Bilder in Daten/Beschriftungen
Out-of-Source erstellen
haben eine bessere Ausgabe der Versionsnummer
Leistungsoptimierungen im Zusammenhang mit dem Training (laufende Aufgabe)
Leistungsoptimierungen im Zusammenhang mit Inferenz (laufende Aufgabe)
Pass-by-Reference, wenn möglich
Bereinigen Sie .hpp-Dateien
Darknet.h neu schreiben
Wandeln Sie cv::Mat
nicht in void*
um, sondern verwenden Sie es als richtiges C++-Objekt
Korrigieren Sie die Art und Weise, wie die interne image
verwendet wird, oder seien Sie konsistent
Fix-Build für ARM-basierte Jetson-Geräte
Original-Jetson-Geräte (eine Reparatur ist unwahrscheinlich, da sie von NVIDIA nicht mehr unterstützt werden und keinen C++17-Compiler haben)
Neue Jetson Orin-Geräte funktionieren
Korrigieren Sie die Python-API in V3
Eine bessere Unterstützung für Python ist erforderlich (möchten Python-Entwickler dabei helfen?)
printf() gegen std::cout austauschen (in Bearbeitung)
Sehen Sie sich die Unterstützung für alte ZED-Kameras an
besseres und konsistenteres Befehlszeilen-Parsing (in Bearbeitung)
Entfernen Sie den gesamten char*
-Code und ersetzen Sie ihn durch std::string
Warnungen nicht ausblenden und Compiler-Warnungen bereinigen (in Bearbeitung)
Bessere Verwendung von cv::Mat
anstelle der benutzerdefinierten image
in C (in Bearbeitung)
Ersetzen Sie die alte list
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ärmekanal)
Laufende Codebereinigung (in Bearbeitung)
Beheben Sie CUDA/CUDNN-Probleme mit allen GPUs
CUDA+cuDNN-Code neu schreiben
Versuchen Sie, Unterstützung für Nicht-NVIDIA-GPUs hinzuzufügen
gedrehte Begrenzungsrahmen oder eine Art „Winkel“-Unterstützung
Schlüsselpunkte/Skelette
Heatmaps (in Bearbeitung)
Segmentierung