Darknet Object Detection Framework und YOLO
Darknet ist ein Open-Source-Framework für neuronale Netzwerke, das hauptsächlich in C und C++ geschrieben ist und etwas CUDA-Code für die GPU-Beschleunigung enthält. Es ist für seine Geschwindigkeit und Effizienz bekannt und daher eine beliebte Wahl für Echtzeit-Objekterkennungsanwendungen.
YOLO (You Only Look Once) ist ein leistungsstarkes Echtzeit-Objekterkennungssystem, das für die Ausführung im Darknet-Framework entwickelt wurde. Es zeichnet sich durch Geschwindigkeit und Genauigkeit aus und übertrifft andere Objekterkennungssysteme in Benchmarks durchweg.
Tauchen Sie tiefer in die Darknet/YOLO-Welt ein:
Beiträge von Hank.ai: Entdecken Sie, wie Hank.ai die Darknet/YOLO-Community aktiv unterstützt.
Offizielle Website: Entdecken Sie die offizielle Darknet/YOLO-Website für umfassende Informationen.
Häufig gestellte Fragen: Finden Sie Antworten auf häufig gestellte Fragen zu Darknet/YOLO.
Discord-Server: Treten Sie der lebendigen Darknet/YOLO Discord-Community für Diskussionen und Unterstützung bei.
Papiere
Die Entwicklung von YOLO ist in mehreren Forschungsarbeiten dokumentiert:
1. YOLOv7: Die Grenzen des Deep Learning für die Objekterkennung erweitern
2. Scaled-YOLOv4: Skalierung von YOLOv4 für industrielle Anwendungen
3. YOLOv4: Optimale Geschwindigkeit und Genauigkeit der Objekterkennung
4. YOLOv3: Eine schrittweise Verbesserung
Allgemeine Informationen
Das Darknet/YOLO-Framework ist nach wie vor führend bei der Objekterkennung und zeichnet sich durch Geschwindigkeit und Genauigkeit aus. Dieses Framework ist völlig kostenlos und Open Source, sodass Entwickler es ohne Lizenz- oder Gebührenbeschränkungen nahtlos in ihre Projekte integrieren können.
Darknet V3 mit dem Codenamen „Jazz“, veröffentlicht im Oktober 2024, erreicht mit einer NVIDIA RTX 3090 GPU eine bemerkenswerte Leistung. Es kann die LEGO-Datensatzvideos mit bis zu 1000 FPS verarbeiten, was bedeutet, dass jedes Bild in nur 1 Millisekunde oder weniger analysiert wird.
Bleiben Sie in Verbindung:
Discord: Treten Sie dem Darknet/YOLO Discord-Server für Support und Diskussionen bei: https://discord.gg/zSq8rtW.
Darknet/YOLO ist anpassungsfähig und läuft auf verschiedenen Plattformen, vom Raspberry Pi und Cloud-Servern bis hin zu Desktops und High-End-Trainingssystemen. Während die CPU-Version auf einer Vielzahl von Geräten läuft, erfordert die GPU-Version eine CUDA-fähige GPU von NVIDIA.
Darknet-Version
Das Darknet-Framework hat sich seit seiner Einführung erheblich weiterentwickelt und es gibt mehrere Schlüsselversionen:
1. Version 0.x: Dieser Originalversion, die zwischen 2013 und 2017 von Joseph Redmon entwickelt wurde, fehlte eine spezifische Versionsnummer.
2. Version 1.x: Diese Version wurde von 2017 bis 2021 von Alexey Bochkovskiy gepflegt und hatte ebenfalls keine Versionsnummer.
3. Version 2.x „OAK“: Gesponsert von Hank.ai und ab 2023 von Stéphane Charette gepflegt, war dies die erste Version mit einem Versionsbefehl. Diese Version lief bis Ende 2024.
4. Version 3.x „JAZZ“: Die neueste Version, veröffentlicht im Oktober 2024, führt wesentliche Verbesserungen und eine neue API ein.
Darknet aufbauen
Für den Aufbau von Darknet sind ein C++17-Compiler oder neuer, OpenCV und das CMake-Build-System erforderlich. Obwohl der Prozess komplex erscheinen mag, müssen Sie kein C++-Experte sein, um Darknet/YOLO zu erstellen, zu installieren und auszuführen.
Bauoptionen:
1. Google Colab: Die Google Colab-Anleitung ist identisch mit der Linux-Anleitung.
2. Linux CMake-Methode: Diese Methode bietet eine detaillierte Anleitung für Linux-Benutzer.
3. Windows CMake-Methode: Befolgen Sie diese Anweisungen zum Erstellen von Darknet unter Windows.
Hinweis: Wenn Sie alte Tutorials verwenden, können deren Erstellungsschritte von dem unten beschriebenen neuen, einheitlichen Ansatz abweichen.
Softwareentwickler: Besuchen Sie https://darknetcv.ai/, um Einblicke in das Innenleben des Darknet/YOLO-Objekterkennungs-Frameworks zu erhalten.
Google Colab
Die Google Colab-Anweisungen spiegeln weitgehend die Linux CMake-Methode wider. Im Unterverzeichnis „colab“ gibt es mehrere Jupyter-Notebooks, die bestimmte Aufgaben wie das Trainieren eines neuen Netzwerks veranschaulichen.
Linux CMake-Methode
Befolgen Sie diese Anweisungen zum Aufbau von Darknet unter Linux:
1. Voraussetzungen: Installieren Sie die erforderlichen Tools:
`Bash
sudo apt-get install build-essential git libopencv-dev cmake
`
2. Darknet klonen: Laden Sie das Darknet-Repository herunter:
`Bash
mkdir ~/srccd ~/src
Git-Klon https://github.com/hank-ai/darknet
CD Darknet
`
3. Build-Verzeichnis erstellen: Erstellen Sie ein Verzeichnis für den Build-Prozess:
`Bash
mkdir-Build
CD-Build
`
4. Mit CMake konfigurieren: Build-Dateien generieren:
`Bash
cmake -DCMAKEBUILDTYPE=Release ..
`
5. Darknet erstellen: Erstellen Sie die ausführbaren Darknet-Dateien:
`Bash
mache -j4
`
6. Paket zur Installation: Erstellen Sie ein DEB-Paket zur einfachen Installation (optional):
`Bash
Paket machen
sudo dpkg -i darknet-VERSION.deb
`
7. CUDA/cuDNN (optional): Für GPU-Beschleunigung installieren Sie CUDA oder CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
8. Installation überprüfen: Überprüfen Sie nach der Installation die Darknet-Version:
`Bash
Darknet-Version
`
Windows CMake-Methode
Diese Anweisungen gelten für den Aufbau von Darknet auf einer sauberen Windows 11 22H2-Installation.
1. Installationsvoraussetzungen:
`Bash
Winget-Installation Git.Git Winget-Installation Kitware.CMake Winget-Installation nsis.nsis Winget-Installation Microsoft.VisualStudio.2022.Community
`
2. Visual Studio C++-Unterstützung:
* Öffnen Sie das Visual Studio-Installationsprogramm und wählen Sie „Ändern“.
* Aktivieren Sie die Desktop-Entwicklung mit C++ und klicken Sie auf „Ändern“.
3. Entwickler-Eingabeaufforderung für VS 2022: Öffnen Sie die Entwickler-Eingabeaufforderung für VS 2022.
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. CUDA/cuDNN (optional): Für GPU-Beschleunigung installieren Sie CUDA oder CUDA+cuDNN:
* CUDA: https://developer.nvidia.com/cuda-downloads
* cuDNN: https://developer.nvidia.com/rdp/cudnn-download
6. Darknet klonen:
`Bash
cd c:src
Git-Klon https://github.com/hank-ai/darknet.git
CD Darknet
mkdir-Build
CD-Build
`
7. Mit CMake konfigurieren:
`Bash
cmake -DCMAKEBUILDTYPE=Release -DCMAKETOOLCHAINFILE=C:/src/vcpkg/scripts/buildsystems/vcpkg.cmake ..
`
8. Erstellen Sie Darknet mit MSBuild:
`Bash
msbuild.exe /property:Platform=x64;Configuration=Release /target:Build -maxCpuCount -verbosity:normal -detailedSummary darknet.sln
msbuild.exe /property:Platform=x64;Configuration=Release PACKAGE.vcxproj
`
9. Installation überprüfen: Führen Sie die ausführbare Darknet-Datei aus und überprüfen Sie die Version:
`Bash
C:srcdarknetbuildsrc-cliReleasedarknet.exe-Version
`
10. NSIS-Paket installieren: Führen Sie die Datei „darknet-VERSION.exe“ im Build-Verzeichnis aus, um Darknet, Bibliotheken, Include-Dateien und DLLs zu installieren.
Nutzung von Darknet
Darknet bietet eine Befehlszeilenschnittstelle (CLI) für die Interaktion mit dem Framework.
Hinweis: Zusätzlich zur Darknet-CLI bietet das DarkHelp-Projekt eine alternative CLI mit erweiterten Funktionen. Sie können sowohl Darknet CLI als auch DarkHelp CLI zusammen verwenden.
Allgemeine Darknet-CLI-Befehle:
Hilfe: Verfügbare Befehle auflisten:
`Bash
Darknet-Hilfe
`
Version: Überprüfen Sie die Darknet-Version:
`Bash
Darknet-Version
`
Vorhersage (Bild): Führen Sie eine Objekterkennung für ein Bild durch:
`Bash
# Version 2
Darknet-Detektortest car.data car.cfg car_best.weights image1.jpg
# Version 3
darknet02displayannotatedimages cars.cfg image1.jpg
# DarkHelp
DarkHelp „cars.cfg“ „cars.cfg“ „cars_best.weights image1.jpg“.
`
Ausgabekoordinaten (Bild): Objektkoordinaten abrufen:
`Bash
# Version 2
Darknet-Detektortest Animals.data Animals.cfg Animalsbest.weights -extoutput Dog.jpg
# Version 3
darknet01inference_images Tiere Hund.jpg
# DarkHelp
DarkHelp --json Animals.cfg Animals.names Animals_best.weights Hund.jpg
`
Videoverarbeitung:
`Bash
# Version 2
# Auf Videodatei ausführen
Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights -extoutput test.mp4
# Vor der Webcam ausführen
Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -c 0
# Version 3
# Auf Videodatei ausführen
darknet03display_videos Animals.cfg test.mp4
# Vor der Webcam ausführen
darknet08display_webcam Tiere
# DarkHelp
# Auf Videodatei ausführen
DarkHelp Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
`
Ergebnisse als Video speichern:
`Bash
# Version 2
Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights test.mp4 -outfilename res.avi
# Version 3
darknet05processvideosmultithreaded Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
# DarkHelp
DarkHelp Animals.cfg Animals.Names Animals_Best.Weights Test.mp4
`
JSON-Ausgabe:
`Bash
# Version 2
Darknet-Detektor-Demo Animals.data Animals.cfg Animalsbest.weights test50.mp4 -jsonport 8070 -mjpegport 8090 -extoutput
# Version 3
darknet06imagestojson Tiere image1.jpg
# DarkHelp
DarkHelp --json Animals.names Animals.cfg Animals_best.weights image1.jpg
`
Spezifische GPU: Auf einer bestimmten GPU ausführen:
`Bash
# Version 2
Darknet-Detektor-Demo Animals.data Animals.cfg Animals_best.weights -i 1 test.mp4
`
Genauigkeitsprüfung: Bewerten Sie die Genauigkeit des Netzwerks:
`Bash
Darknet-Detektorkarte fahren.daten fahren.cfg fahren_best.gewichte
`
Anker berechnen:
`Bash
Darknet-Detektor calcanchors Animals.data -numof_clusters 6 -width 320 -height 256
`
Ein neues Netzwerk trainieren
DarkMark: Für einen intuitiven und optimierten Ansatz zum Kommentieren und Trainieren verwenden Sie DarkMark.
Manuelle Einrichtung:
1. Verzeichnis erstellen: Richten Sie einen Ordner für Ihre Trainingsdaten ein.
2. Konfiguration kopieren: Wählen Sie eine Konfigurationsdatei als Vorlage, z. B. cfg/yolov4-tiny.cfg, und kopieren Sie sie in Ihr Verzeichnis.
3. Erstellen Sie eine .names-Datei: Erstellen Sie eine Textdatei (z. B. Animals.names), in der Ihre Klassen aufgeführt sind, eine pro Zeile.
4. .data-Datei erstellen: Erstellen Sie eine Textdatei (z. B. Animals.data) mit der folgenden Struktur:
`
Klassen = 4
train = /path/to/animals_train.txt
valid = /path/to/animals_valid.txt
Namen = /path/to/animals.names
backup = /path/to/backup_directory
`
5. Datensatz vorbereiten: Bilder und entsprechende Anmerkungsdateien in einem Verzeichnis organisieren.
6. Trainieren/gültige Textdateien erstellen: Erstellen Sie zwei Textdateien (animalstrain.txt, Animalsvalid.txt), die die Pfade zu Bildern für Training und Validierung auflisten.
7. Konfiguration ändern:
* Setze Batch=64.
* Passen Sie die Unterteilungen basierend auf dem Speicher Ihrer GPU an.
Setzen Sie max_batches auf einen geeigneten Wert (z. B. 2000 Klassenanzahl).
* Stellen Sie die Schritte auf 80 % und 90 % von max_batches ein.
* Passen Sie Breite und Höhe entsprechend Ihren Netzwerkabmessungen an.
* Aktualisieren Sie die Klassen, um sie an die Anzahl der Klassen anzupassen.
* Ändern Sie die Filter in den Abschnitten [convolutional] vor den Abschnitten [yolo].
8. Beginnen Sie mit dem Training:
`Bash
cd /pfad/zu/tiere
Darknet-Detektor -map -dont_show train Animals.data Animals.cfg
`
9. Fortschritt anzeigen: Überwachen Sie den Trainingsfortschritt mithilfe der Datei chart.png.
Andere Tools und Links
DarkMark: Dieses Tool vereinfacht die Bildanmerkung, Überprüfung und Dateigenerierung für das Training mit Darknet.
DarkHelp: Eine robuste alternative CLI für Darknet mit Funktionen wie Bildkacheln und Objektverfolgung.
Darknet/YOLO-FAQ: Finden Sie Antworten auf häufig gestellte Fragen.
Stéphanes YouTube-Kanal: Zugriff auf Tutorials und Beispielvideos.
Darknet/YOLO Discord Server: Treten Sie der Community für Support und Diskussionen bei.
Roadmap
Vollendet:
Aus Effizienzgründen wurde qsort() durch std::sort() ersetzt.
Veralteter Code entfernt (z. B. check_mistakes, getchar(), system()).
Darknet auf den C++-Compiler migriert.
Probleme beim Windows-Build behoben.
Python-Unterstützung wiederhergestellt.
Erstellte die Darknet-Bibliothek.
CUDA/GPU-Code, CUDNN und CUDNN-Hälfte wurden wieder aktiviert.
Verbesserte CUDA-Versionsinformationen.
AVX-Befehlssatz wieder aktiviert.
Alte Lösungen und Makefile entfernt.
OpenCV zu einer obligatorischen Abhängigkeit gemacht.
Veraltete Bibliotheksabhängigkeiten (z. B. pthread, STB) entfernt.
CMakeLists.txt wurde für eine verbesserte CUDA-Erkennung neu geschrieben.
Out-of-Source-Builds aktiviert.
Verbesserte Ausgabe der Versionsnummer.
Leistungsoptimierungen für Training und Inferenz implementiert.
Bereinigter Code zur besseren Lesbarkeit.
Darknet.h für verbesserte API neu geschrieben.
Verbesserte Unterstützung für ARM-basierte Jetson-Geräte.
Python-API in V3 korrigiert.
Kurzfristige Ziele:
Tauschen Sie printf() durch std::cout aus.
Untersuchen Sie die ZED-Kameraunterstützung.
Verbessern Sie das Parsen der Befehlszeile.
Mittelfristige Ziele:
Ersetzen Sie den gesamten Zeichencode durch std::string.
Beheben Sie Compiler-Warnungen.
Verbessern Sie die Verwendung von cv::Mat anstelle benutzerdefinierter Bildstrukturen.
Aktualisieren Sie die Listenfunktionalität auf std::vector oder std::list.
Unterstützt 1-Kanal-Graustufenbilder.
Unterstützung für N-Kanal-Bilder hinzufügen (N > 3).
Laufende Codebereinigung.
Langfristige Ziele:
Beheben Sie CUDA/CUDNN-Probleme auf verschiedenen GPUs.
Schreiben Sie den CUDA+cuDNN-Code neu, um die Effizienz zu verbessern.
Entdecken Sie die Unterstützung für Nicht-NVIDIA-GPUs.
Implementieren Sie gedrehte Begrenzungsrahmen und „Winkel“-Unterstützung.
Fügen Sie Schlüsselpunkte, Skelette und Heatmaps hinzu.
Führen Sie Segmentierungsfunktionen ein.