2013-08-27 7 views
16

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

  1. 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.
  2. 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.
+0

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. –

+0

Die Filterfaltung ist der teuerste Teil in DPM. Wie verwalten Sie diesen Teil? –

+1

@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

Antwort

1

Werfen Sie einen Blick auf die folgende Umsetzung HoG SSE

Es ist Ihre Zeit Anforderungen passen.Es ist in C geschrieben und verwendet 128 Bit lange SIMD-Befehle.

Der Code kann je nach Normalisierungsstrategie und Ausgabetyp, die Sie benötigen, weiter angepasst werden.

Ich würde mich freuen, Ihr Feedback zu hören und in der Lage zu sein, diesen Code zu verbessern.

+0

Interessant! Ich werde es versuchen. Ist es eine Multiskalen-Extraktion (eine "HOG-Pyramide", wie manche Leute es nennen)? – solvingPuzzles

+1

@solvingPuzzles, hat der HoG SEE Ihre Zeitanforderungen erfüllt? Welche Lösung hast du gefunden? – Tin

+0

@ivan_a könntest du bitte erklären, wie man diesen Code benutzt? Ich sehe, dass es nur 16 Bins verwendet und es steht geschrieben, dass Sie das nicht ändern können? Was bedeutet das? –

Verwandte Themen