Frage
Was ist der schnellste Open-Source-HOG-Extraktionscode für Multicore-CPUs?Schnellste Implementierung von HOG Feature Extraction?
Motivation
ich auf einer Echtzeit-Objekterkennung Anwendung arbeite. Insbesondere habe ich eine Variante von Deformable Parts Model cascades entwickelt, die 30fps Objekterkennung abzielt. Ich habe einen Punkt erreicht, an dem das Extrahieren von HOG-Funktionen teurer ist als der Rest meiner Pipeline, kombiniert. Ich verwende die Parameter [Felzenzwalb, Girshick, et al] für die HOG-Extraktion. Das heißt, eine Multiauflösungspyramide von HOG-Deskriptoren, und jeder Deskriptor hat insgesamt 32 Bins zur Orientierung und einige andere Hinweise.
Tore
Ich mag würde mehrere Maßstäbe HOG Merkmalsextraktion bei 60fps (16ms) für 640x480 Bilder auf einem Multi-Core-CPU zu tun.
Verwandte Arbeiten
Ich habe ein paar off-the-shelf mehreren Maßstäben HOG-Implementierungen auf einem 6-Core Intel 3930k CPU gebenchmarkt. Für ein 640x480 Bild, beobachte ich die folgenden Leistungsnummern:
- HOG in Dubout ‚s FFLD DPM Code: 19 fps (52ms) - C++ mit OpenMP, aber keine Vektorisierung
- HOG in voc-release5 DPM Code: 2.4fps (410ms) - singlethreaded C++, sowie ein Matlab-Wrapper
ich auch mit dem OpenCV HOG extraction code experimentiert haben. Die OpenCV-Version funktioniert, aber sie scheint für das HOG-Setup von Dalal-Triggs fest codiert zu sein, und OpenCV scheint mir nicht zu erlauben, die gleichen HOG-Parameter (Normalisierungsschema, binäre Positionsmerkmale usw.) als [Felzenzzwalb, Girshick, et al]. Die OpenCV-Version unterstützt auch nicht nativ Multiskalen-HOG, obwohl Sie das Downsampling selbst durchführen und OpenCV HOG für jede Skalierung aufrufen können. Ich kann mich nicht erinnern, wie die OpenCV HOG-Performance aussah.
Final Thoughts
- Der schnellst HOG Implementierung - FFLD - scheinen eine Menge Leistung auf dem Tisch zu verlassen. Ich habe keine GFLOP/s-Schätzung gemacht, aber ich stelle fest, dass der HOG-Code von FFLD keine SSE/AVX-Vektorisierung verwendet. Es gibt nicht so viel Kontrollfluss, so dass die Vektorisierung hier wie eine billige Beschleunigung erscheint.
- Ich habe GPU HOG Implementierungen hier nicht erwähnt. Ich habe mit groundHOG/CUHOG und fasthog experimentiert. Die CUHOG-Autoren beanspruchen 20fps (50ms) HOG-Extraktion auf einer NVIDIA GTX560. Aber Intel-CPUs sind die Zielplattform für meine Anwendung, und das Kopieren einer vollständigen HOG-Pyramide von der GPU zur CPU ist unerschwinglich teuer.
OpenCV enthält die Dalal Implementierung von HOG sowohl in CPU- als auch in GPU-Versionen. Sie funktionieren meiner Meinung nach ziemlich gut und können mit dem CvSVM von OpenCV leicht zur Objekterkennung verwendet werden. –
Die Filterfaltung ist der teuerste Teil in DPM. Wie verwalten Sie diesen Teil? –
@MickeyShine das übliche Zeug ... massiv quantisieren die Funktionen und Kaskaden zu tun. Ich mache heutzutage mehr tiefes Lernen und weniger HOG-basierte DPMs. Aber ich erreichte einen Punkt, an dem ich die Windungen für ein HOG-basiertes 3-Komponenten-, 8-teiliges-pro-Komponenten-Modell in deutlich unter 50ms konnte. – solvingPuzzles