[Update]: Dieses Repo dient als Treibercode für meine Forschung. Ich habe gerade das College abgeschlossen und bin sehr beschäftigt mit der Suche nach Forschungspraktikums- / Stipendienfunktionen, bevor ich mich schließlich für einen Master beantragte. Ich werde vorerst nicht die Zeit haben, Probleme zu prüfen. Danke schön.
Dieses Repository enthält Code für einen Objektdetektor basierend auf YOLOV3: Eine inkrementelle Verbesserung, implementiertes Pytorch. Der Code basiert auf dem offiziellen Code von Yolo V3 sowie einem Pytorch -Port des ursprünglichen Code von Marvis. Eines der Ziele dieses Codes ist es, den ursprünglichen Port zu verbessern, indem redundante Teile des Codes entfernt werden (der offizielle Code ist im Grunde eine vollständig geblasene Deep -Learning -Bibliothek und enthält Dinge wie Sequenzmodelle, die in Yolo nicht verwendet werden). Ich habe auch versucht, den Code minimal zu halten und ihn so gut wie möglich zu dokumentieren.
Wenn Sie verstehen möchten, wie Sie diesen Detektor selbst von Grund auf neu implementieren können, können Sie diese sehr detaillierte 5-teilige Tutorial-Serie durchlaufen, die ich in Papersspace geschrieben habe. Perfekt für jemanden, der von Anfänger zu intermediären Pytorch -Fähigkeiten übergehen möchte.
Implementieren Sie Yolo V3 von Grund auf neu
Der Code enthält ab sofort nur das Erkennungsmodul, aber Sie sollten das Trainingsmodul bald erwarten. :)
Die Verwendung von Pytorch 0,3 brechen den Detektor.
Klon und cd in das Repo -Verzeichnis. Das erste, was Sie tun müssen, ist, diesmal die Gewichtsdatei zu erhalten, für V3 haben die Autoren hier nur eine Gewichtsfile geliefert
Die Gewichtsdatei in Ihr Repo -Verzeichnis. Oder Sie können einfach eingeben (wenn Sie sich unter Linux befinden)
wget https://pjreddie.com/media/files/yolov3.weights
python detect.py --images imgs --det det
--images FAG wird das Verzeichnis zum Laden von Bildern oder einer einzelnen Bilddatei (es ermittelt es heraus) definiert, und --det ist das Verzeichnis zum Speichern von Bildern. Eine andere Einstellung wie die Stapelgröße (mit --bs -Flag), das Objektschwellenwertvertrauen kann mit Flaggen optimiert werden, mit denen sie nachgeschlagen werden können.
python detect.py -h
Sie können die Auflösungen des Eingabebildes durch das Flag --reso -Flag ändern. Der Standardwert beträgt 416. Egal welcher Wert, den Sie ausgewählt haben, erinnern sich , dass er ein Vielfaches von 32 und mehr als 32 sein sollte . Seltsame Dinge werden passieren, wenn Sie es nicht tun. Du bist gewarnt.
python detect.py --images imgs --det det --reso 320
Dafür sollten Sie die Datei Video_Demo.py mit -VIDEO -Flag ausführen, in dem die Videodatei angegeben wird. Die Videodatei sollte im .AVI -Format vorliegen, da OpenCV OpenCV nur als Eingabeformat akzeptiert.
python video_demo.py --video video.avi
Optimierbare Einstellungen sind mit -H -Flaggen zu sehen.
Um die Videoinferenz zu beschleunigen, können Sie versuchen, die Datei Video_Demo_Half.py zu verwenden, in der die gesamte Inferenz mit 16-Bit-Halbgenauigkeit anstelle von 32-Bit-Float führt. Ich habe keine großen Verbesserungen gesehen, aber ich schreibe dies auf eine ältere Karte (Tesla K80, Kepler Arch). Wenn Sie eine Karten mit schnellem Float16 -Support haben, probieren Sie sie aus und beachten Sie, wenn möglich.
Gleich wie das Video -Modul, aber Sie müssen die Videodatei nicht angeben, da der Feed von Ihrer Kamera entnommen wird. Um genau zu sein, wird der Feed aus dem OpenCV entnommen, das als Kamera 0 reso .
python cam_demo.py
Sie können den Code problemlos für die Verwendung verschiedener Gewichtsfiles anpassen, die auf der Yolo -Website verfügbar sind
Hinweis: Die Skalenfunktionen wurden für ein besseres Refactoring deaktiviert.
YOLO V3 erfasst Erkennungen in verschiedenen Skalen, von denen jede beim Erkennen von Objekten unterschiedlicher Größen abhängt, je nachdem, ob sie grobe Merkmale, feinkörnige Merkmale oder etwas dazwischen erfassen. Sie können mit diesen Skalen mit der Flagge --scales experimentieren.
python detect.py --scales 1,3