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. Es bietet eine leistungsstarke Grundlage für die Entwicklung und Bereitstellung von Objekterkennungsmodellen.
YOLO (You Only Look Once) ist ein hochmodernes Echtzeit-Objekterkennungssystem, das auf dem Darknet-Framework basiert. Es zeichnet sich durch Geschwindigkeit und Genauigkeit aus und ist daher eine beliebte Wahl für verschiedene Anwendungen.
Möchten Sie mehr darüber erfahren, wie Hank.ai zur Darknet/YOLO-Community beiträgt?
Entdecken Sie die offizielle Darknet/YOLO-Website:
Tauchen Sie ein in die umfassenden Darknet/YOLO-FAQ:
Treten Sie der lebendigen Darknet/YOLO Discord-Community bei:
Papiere
YOLOv7: Link zum Papier
Scaled-YOLOv4: Link zum Papier
YOLOv4: Link zum Papier
YOLOv3: Link zum Papier
Allgemeine Informationen
Das Darknet/YOLO-Framework ist weiterhin führend in der Objekterkennung und bietet durchweg sowohl Geschwindigkeits- als auch Genauigkeitsvorteile gegenüber anderen Frameworks und YOLO-Versionen.
Hauptmerkmale:
1. Open Source und kostenlos: Dieses Framework ist völlig kostenlos und Open Source, sodass Sie es ohne Lizenzbeschränkungen nahtlos in Ihre Projekte integrieren können.
2. Hohe Leistung: Darknet V3 („Jazz“), veröffentlicht im Oktober 2024, erreicht eine beeindruckende Leistung und erreicht bis zu 1000 FPS für den LEGO-Datensatz mit einer NVIDIA RTX 3090 GPU.
3. Vielseitige Bereitstellung: Darknet/YOLO ist mit verschiedenen Geräten kompatibel, von Raspberry Pi und Cloud-Servern bis hin zu Desktops und High-End-Trainingsgeräten.
4. Plattformübergreifende Unterstützung: Es ist bekannt, dass es einwandfrei auf Linux-, Windows- und Mac-Betriebssystemen läuft.
Benötigen Sie Hilfe oder möchten Sie über Darknet/YOLO sprechen? Treten Sie der lebendigen Community auf Discord bei:
Darknet-Version
Die Entwicklung des Darknet lässt sich anhand seiner Versionen verfolgen:
1. Version 0.x (2013–2017): Dem ursprünglichen, von Joseph Redmon entwickelten Darknet-Tool fehlte eine formelle Versionsnummer.
2. Version 1.x (2017–2021): Diese Version wurde von Alexey Bochkovskiy gepflegt und hatte ebenfalls keine Versionsnummer.
3. Version 2.x „OAK“ (2023): Das von Hank.ai gesponserte und von Stéphane Charette verwaltete Darknet-Repository führte einen Versionsbefehl ein. Diese Version brachte erhebliche Verbesserungen, darunter:
* Einheitliche Build-Schritte mit CMake für Windows und Linux.
* Konvertierung zum C++-Compiler.
* Verbesserte chart.png-Visualisierung während des Trainings.
* Fehlerbehebungen und Leistungsoptimierungen für Trainingseffizienz.
4. Version 2.1: Der letzte Zweig der v2-Codebasis.
5. Version 3.x „JAZZ“ (Oktober 2024): Mit dieser neuesten Version wurde Folgendes eingeführt:
* Leistungsoptimierungen sowohl für Training als auch für Inferenz.
* Eine modifizierte Legacy-C-API, die geringfügige Anpassungen für Anwendungen erfordert, die die ursprüngliche Darknet-API verwenden.
* Eine neue Darknet V3 C- und C++-API.
* Neue Apps und Beispielcode im Verzeichnis src-examples.
Aus Kompatibilitätsgründen mit älteren Versionen ist der v2-Zweig weiterhin zugänglich. Wenn Sie bestimmte Befehle aus früheren Versionen verwenden müssen, teilen Sie uns dies mit. Wir prüfen dann, ob wir sie wieder hinzufügen können.
Vortrainierte MSCOCO-Gewichte
Mehrere beliebte Versionen von YOLO sind auf dem MSCOCO-Datensatz vorab trainiert und bieten einen bequemen Ausgangspunkt zum Experimentieren mit dem Framework. MSCOCO enthält 80 Klassen, die in der Datei cfg/coco.names aufgeführt sind.
Vortrainierte Gewichte verfügbar:
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
Denken Sie daran: Während diese vorab trainierten Gewichte für Demonstrationen hilfreich sind, ist es wichtig, Ihre eigenen Netzwerke für maßgeschneiderte Lösungen zu trainieren. MSCOCO wird hauptsächlich zur Überprüfung verwendet, ob Ihr Setup ordnungsgemäß funktioniert.
Beispielbefehle mit vorab trainierten Gewichten:
`Bash
Kommentierte Bilder anzeigen
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
Zeigen Sie Videos mit Anmerkungen an
darknet03display_videos coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
Verwenden Sie die DarkHelp-CLI
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights image1.jpg
DarkHelp coco.names yolov4-tiny.cfg yolov4-tiny.weights video1.avi
`
Gebäude
Darknet nutzt CMake, um den Build-Prozess für Windows und Linux zu optimieren. Es erfordert C++17 oder einen neueren Compiler sowie OpenCV.
Die Build-Anweisungen sind jetzt vereinheitlicht und ersetzen ältere, komplexere Methoden.
Hinweis: Wenn Sie Probleme mit alten Tutorials oder Build-Schritten haben, die nicht mit dieser Anleitung übereinstimmen, lesen Sie bitte die neuesten Anweisungen hier.
Softwareentwicklern wird empfohlen, https://darknetcv.ai/ zu besuchen, um Einblicke in das Innenleben des Darknet/YOLO-Frameworks zu erhalten.
Google Colab
Die Google Colab-Anweisungen spiegeln die Linux-Anweisungen wider.
Erkunden Sie die Notizbücher im Unterverzeichnis „colab“ oder befolgen Sie die nachstehenden Linux-Anweisungen.
Linux CMake-Methode
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
mkdir-Build
CD-Build
`
3. CMake konfigurieren:
`Bash
cmake -DCMAKEBUILDTYPE=Release ..
`
4. Darknet aufbauen:
`Bash
mache -j4
`
5. Paket Darknet:
`Bash
Paket
sudo dpkg -i darknet-VERSION.deb
`
Optional: CUDA oder CUDA+cuDNN für GPU-Beschleunigung
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 auf nvcc und nvidia-smi zugegriffen werden kann. Möglicherweise müssen Sie Ihre PATH-Variable anpassen.
Wenn Sie CUDA oder CUDA+cuDNN später installieren oder die NVIDIA-Software aktualisieren:
Löschen Sie die Datei CMakeCache.txt in Ihrem Darknet-Build-Verzeichnis, um CMake zu zwingen, Abhängigkeiten erneut zu finden.
Darknet neu aufbauen.
So aktualisieren Sie CMake unter Ubuntu:
`Bash
sudo apt-get purge cmake
sudo snap install cmake --classic
`
Fortgeschrittene Benutzer:
Um eine RPM-Installationsdatei anstelle einer DEB-Datei zu erstellen, ändern Sie den CPACKGENERATOR in CMpackage.cmake in „RPM“.
Ändern Sie für Centos und OpenSUSE CPACK_GENERATOR in „RPM“.
Nachdem Sie das Installationspaket erstellt haben, installieren Sie es mit dem entsprechenden Paketmanager.
Überprüfung:
Führen Sie die Darknet-Version über die Befehlszeile aus, um die Installation zu bestätigen.
Windows CMake-Methode
1. Installieren Sie die erforderliche Software:
`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:
* Öffnen Sie „Visual Studio Installer“.
* Klicken Sie auf „Ändern“.
* Wählen Sie „Desktop-Entwicklung mit C++“.
* Klicken Sie auf „Ändern“ und dann auf „Ja“.
3. Öffnen Sie die Entwickler-Eingabeaufforderung für VS 2022:
* Verwenden Sie kein PowerShell.
4. Installieren Sie Microsoft VCPKG:
`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
`
5. Optional: CUDA oder CUDA+cuDNN für GPU-Beschleunigung
* Installieren Sie CUDA gemäß den Anweisungen unter https://developer.nvidia.com/cuda-downloads.
* Installieren Sie cuDNN mithilfe der Anweisungen unter https://developer.nvidia.com/rdp/cudnn-download oder https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html#download-windows.
Stellen Sie nach der Installation sicher, dass auf nvcc.exe und nvidia-smi.exe zugegriffen werden kann. Möglicherweise müssen Sie Ihre PATH-Variable ändern.
Wenn Sie CUDA oder CUDA+cuDNN später installieren oder die NVIDIA-Software aktualisieren:
* Stellen Sie sicher, dass CUDA nach Visual Studio installiert wird.
* Installieren Sie CUDA neu, wenn Visual Studio aktualisiert wird.
6. Darknet klonen und aufbauen:
`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
`
7. Kopieren Sie CUDA-DLLs (falls erforderlich):
* Wenn Sie Fehlermeldungen über fehlende CUDA- oder cuDNN-DLLs erhalten, kopieren Sie diese manuell in das Darknet-Ausgabeverzeichnis. Zum Beispiel:
`Bash
kopieren Sie „C:ProgrammeNVIDIA GPU Computing ToolkitCUDAv12.2bin*.dll“ src-cliRelease
`
8. Führen Sie den Befehl msbuild.exe erneut aus, um das NSIS-Installationspaket zu generieren:
`Bash
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
Fortgeschrittene Benutzer:
Sie können die von CMake generierte Lösungsdatei Darknet.sln in der Visual Studio-GUI anstelle von Befehlszeilentools verwenden.
Überprüfung:
Führen Sie die Version C:srcDarknetbuildsrc-cliReleasedarknet.exe aus, um die Installation zu bestätigen.
Um Darknet zu installieren, führen Sie den NSIS-Installationsassistenten aus:
Suchen Sie im Build-Verzeichnis nach der Datei „darknet-VERSION.exe“.
Führen Sie den Installationsassistenten aus, um die CLI-Anwendung, Bibliotheken, Include-Dateien und erforderlichen DLLs zu installieren.
Nutzung von Darknet
CLI
Hinweis: Die folgenden Befehle erheben keinen Anspruch auf Vollständigkeit.
Erwägen Sie zusätzlich zur Darknet-CLI die Verwendung der DarkHelp-Projekt-CLI, die alternative Funktionen und erweiterte Funktionen bietet.
Die meisten Befehle erfordern die .weights-Datei zusammen mit den entsprechenden .names- und .cfg-Dateien. Sie können entweder Ihr eigenes Netzwerk trainieren oder vorab trainierte Modelle aus dem Internet herunterladen. Beispiele hierfür sind:
LEGO Gears: Objekterkennung in Bildern.
Rolodex: Texterkennung in Bildern.
MSCOCO: Standard-Objekterkennung der 80er-Klasse.
Befehle:
1. Hilfe:
`Bash
Darknet-Hilfe
`
2. Version:
`Bash
Darknet-Version
`
3. Vorhersage anhand eines Bildes:
* 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. Ablesen 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:
`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 ...
`
11. Berechnung von mAP@IoU=75:
`Bash
Darknet-Detektorkarte Animals.data Animals.cfg Animalsbest.weights -iouthresh 0,75
`
12. Anker neu berechnen:
`Bash
Darknet-Detektor calcanchors Animals.data -numof_clusters 6 -width 320 -height 256
`
13. Ein neues Netzwerk trainieren:
`Bash
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
Ausbildung
Für vereinfachte Anmerkungen und Schulungen nutzen Sie DarkMark. Dies ist der empfohlene Ansatz zum Erstellen neuer neuronaler Netze.
Manuelle Trainingseinrichtung (falls gewünscht):
1. Erstellen Sie einen Projektordner:
* Zum Beispiel ~/nn/animals/ zur Tiererkennung.
2. Kopieren Sie eine Darknet-Konfigurationsdatei als Vorlage:
* Zum Beispiel cfg/yolov4-tiny.cfg.
3. Erstellen Sie eine Animals.names-Textdatei:
* Listen Sie jede Klasse auf, einen Eintrag pro Zeile, ohne Leerzeilen oder Kommentare. Beispiel:
`
Hund
Katze
Vogel
Pferd
`
4. Erstellen Sie eine Animals.data-Textdatei:
`
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 einen Ordner für Bilder und Anmerkungen (z. B. ~/nn/animals/dataset).
* Kommentieren Sie Bilder mit DarkMark oder einer ähnlichen Software. Das YOLO-Annotationsformat wird in den Darknet/YOLO-FAQ beschrieben.
6. Erstellen Sie Animalstrain.txt und Animalsvalid.txt:
* Listen Sie alle für Training und Validierung verwendeten Bilder auf, ein Bild pro Zeile.
7. Ändern Sie die .cfg-Datei:
* Setze Batch=64.
* Passen Sie die Unterteilungen basierend auf Ihren Netzwerkabmessungen und Ihrem GPU-Speicher an. Beginnen Sie mit Unterteilungen=1.
* Setzen Sie max_batches auf das 2000-fache der Anzahl der Klassen (z. B. 8000 für 4 Klassen).
* Stellen Sie die Schritte auf 80 % und 90 % von max_batches ein.
* Passen Sie Breite und Höhe an Ihre gewünschten Netzwerkabmessungen an.
* Ändern Sie die Klassen, um die Anzahl der Klassen in Ihrer .names-Datei widerzuspiegeln.
Aktualisieren Sie die Filter in den [convolutional]-Abschnitten vor jedem [yolo]-Abschnitt: (Anzahl der Klassen + 5) 3.
8. Beginnen Sie mit dem Training:
`Bash
cd ~/nn/animals/
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
Weitere Trainingsdetails und erweiterte Parameter finden Sie in den Darknet/YOLO-FAQ.
Andere Tools und Links
DarkMark: Verwalten Sie Darknet/YOLO-Projekte, kommentieren Sie Bilder, überprüfen Sie Anmerkungen und generieren Sie Trainingsdateien.
DarkHelp: Bietet eine alternative CLI für Darknet, die Bildkacheln, Objektverfolgung und eine robuste C++-API für kommerzielle Anwendungen ermöglicht.
Darknet/YOLO-FAQ: Eine umfassende Ressource zur Beantwortung Ihrer Fragen.
Stéphanes YouTube-Kanal: Zugriff auf zahlreiche Tutorials und Beispielvideos.
Darknet/YOLO Discord Server: Vernetzen Sie sich mit anderen Benutzern für Support und Diskussionen.
Roadmap
Letzte Aktualisierung 30.10.2024:
Vollendet:
Während des Trainings wurde qsort() gegebenenfalls durch std::sort() ersetzt.
check_mistakes, getchar() und system() entfernt.
Konvertierte Darknet zur Verwendung des C++-Compilers (g++ unter Linux, VisualStudio unter Windows).
Windows-Build korrigiert.
Beschriftungen für Vorhersagen wieder aktiviert (der „Alphabet“-Code).
CUDA/GPU-Code, CUDNN und CUDNN-Hälfte wurden wieder aktiviert.
Die hartcodierte CUDA-Architektur wurde entfernt.
Verbesserte CUDA-Versionsinformationen.
AVX wieder aktiviert.
Alte Lösungen und Makefiles entfernt.
OpenCV zu einer nicht optionalen Abhängigkeit gemacht.
Die alte Abhängigkeit der pthread-Bibliothek wurde entfernt.
STB entfernt.
CMakeLists.txt wurde für eine verbesserte CUDA-Erkennung neu geschrieben.
Der alte „Alphabet“-Code und die zugehörigen Bilder wurden entfernt.
Out-of-Source-Build implementiert.
Verbesserte Ausgabe der Versionsnummer.
Leistungsoptimierungen während des Trainings (laufend).
Leistungsoptimierungen während der Inferenz (laufend).
Sofern möglich, wurde Pass-by-Reference implementiert.
.hpp-Dateien bereinigt.
Darknet.h neu geschrieben.
Die Umwandlung von cv::Mat in void wurde eliminiert und als C++-Objekt verwendet.
Inkonsistenzen in der internen Bildstruktur behoben.
Build für ARM-basierte Jetson-Geräte korrigiert (neue Jetson Orin-Geräte funktionieren).
Python-API in V3 korrigiert.
Kurzfristige Ziele:
Ersetzen Sie printf() durch std::cout (in Bearbeitung).
Besuchen Sie die alte Zed-Kameraunterstützung noch einmal.
Verbessern Sie die Konsistenz der Befehlszeilenanalyse (in Bearbeitung).
Mittelfristige Ziele:
Entfernen Sie den gesamten Zeichencode und ersetzen Sie ihn durch std::string.
Eliminieren Sie Compiler-Warnungen und verbessern Sie die Klarheit des Codes (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 hinzufügen.
Erweitern Sie die Unterstützung für N-Kanal-Bilder (N > 3, z. B. Tiefen- oder Wärmekanäle).
Laufende Codebereinigung (in Bearbeitung).
Langfristige Ziele:
Beheben Sie CUDA/CUDNN-Probleme auf allen GPUs.
Schreiben Sie den CUDA+cuDNN-Code neu.
Entdecken Sie die Unterstützung für Nicht-NVIDIA-GPUs.
Implementieren Sie gedrehte Begrenzungsrahmen oder „Winkel“-Unterstützung.
Fügen Sie Schlüsselpunkte/Skelette hinzu.
Einführung von Heatmaps (in Bearbeitung).
Entdecken Sie die Segmentierung.
Bleiben Sie dran für Updates und Beiträge zum Darknet/YOLO-Framework!