Computer VisionMachine LearningTutorial

Kaskadierende Klassifikation – Verkürzen der Laufzeit von Klassifikationen

In vielen Anwendungen ist eine Echtzeit-Bildanalyse zwingend erforderlich. Ein Industrieroboter, der fünf Sekunden benötigt, um Objekte auf einem Bild zu erkennen, ist meist nur sehr eingeschränkt einsetzbar. Andererseits erfordern moderne Anwendungen eine möglichst genaue Erkennung von Objekten und Positionen. Durch die Verwendung einiger Hochleistungs-GPUs, die für Deep Learning optimiert sind, und durch neueste Forschungsergebnisse wie YOLO könnten diese Probleme umgangen werden. Diese Lösungsmöglichkeiten haben jedoch zwei wesentliche Nachteile, die je nach Anwendungsfall von Bedeutung sein können.

  • Der Stromverbrauch und die Größe der Rechner ist für Embedded Systems nicht ausreichend
  • GPUs sind im Allgemeinen recht teuer im Vergleich zu kleinen Embedded Systemen

Industrieroboter leiden offensichtlich nicht unter diesen Punkten, da ihr Stromverbrauch und ihre Größe meist keine Rolle spielen. Die Preise für hochwertige Industrieroboter beginnen bei einigen Tausend Dollar bis zu Millionen von Dollar. Das bedeutet im Allgemeinen, dass ein 400€ Rechner als Verarbeitungseinheit niemanden stört.

Bei kleinen Systemen wie Smartphones oder Embedded Systems in Kameras spielt die Größe, der Zeit- und Stromverbrauch eine große Rolle. Daher können wir Objekterkennungen auf dem Smartphone nicht allein durch den Einsatz von tiefen neuronalen Netzen lösen, zumindest nicht, wenn wir eine zeitnahe Verarbeitung wünschen. Hier setzt eine Methode an, die schon viele Jahre vor der “Entdeckung” von CNNs und Deep Learning angewandt wurde. Anstatt nur einen Klassifikator zu trainieren, trainieren wir eine Kaskade von Klassifikatoren.

Stellt euch vor, wir verwenden einen sehr einfachen Ansatz der Sliding-Window-Suche, um Objekte zu erkennen. Dies würde dazu führen, dass viele Bereiche durch das CNN bewertet werden müssen. Wenn wir keine modernen GPUs verwenden, würde unser CNN-Ansatz ewig brauchen. An dieser Stelle würde sogar Faster R-CNN und ähnliches scheitern, da die Beschleunigung hauptsächlich durch die Verschiebung der Regionsvorschläge auf die GPU erreicht wird. Die YOLO-Architektur kann dieses Problem lösen, hat aber schlechtere Erkennungsraten als R-CNN. Durch die Verwendung einer Kaskade von Klassifikatoren kann dieses Problem möglicherweise gelöst werden.

Wir trainieren unsere CNN, wie wir es früher getan haben, und wir machen auch die Sliding-Window-Suche, wie wir es früher getan haben. Jetzt werten wir das CNN nicht bei jedem Regionsvorschlag aus, sondern evaluieren die Regionen stufenweise. In der ersten Stufe benutzen wir einen sehr einfachen Klassifikator wie AdaBoost mit ein paar hundert Entscheidungsstümpfen, die nur mit schnell berechenbaren Merkmalen wie Standardabweichung und Mittelwert trainiert wurden (dies kann schnell mit Hilfe von Integralbildern berechnet werden). Wir trainieren den schwachen Klassifikator auf die Unterscheidung von Vorder- und Hintergrund oder Gesicht und Nicht-Gesicht oder Schild und Nicht-Schild (wie genau das aussieht, hängt vom konkreten Anwendungsfall ab). Wir stellen jedoch sicher, dass der Klassifikator dazu neigt, Objekte/Gesichter/Schilder zu sehen, auch wenn die Region keine enthält. Auf diese Weise können wir in der ersten Stufe etwa 50% der Nicht-Objekt-Regionen filtern ohne Objekt-Regionen zu verwerfen. Nun können wir die restlichen Regionen durch einen weiteren Klassifikator filtern, der erweiterte Features wie LBP-Histogramme verwendet. Nach einigen Etappen haben wir genügend Regionen gefiltert, um unser CNN direkt auf sie anzuwenden und die endgültige Klassifizierung zu bekommen.

Ein sehr populäres Framework, das diese Kaskade von Klassifikatoren verwendet, ist der Viola-Jones Objekterkennungs-Framework. Diese Arbeit wurde 2001 vorgestellt, also ein paar Jahre bevor CNNs populär wurden. Das Framework war in der Lage, Gesichter auf Bildern in Echtzeit mit hoher Genauigkeit zu erkennen. Sie benutzten einen 32-stufigen Kaskadenk-Klassifikator und fügten in jeder Stufe neue Features hinzu. Die Geschwindigkeit dieses Systems ist unglaublich, wenn man sieht, welche Hardware die Autoren für ihren Test verwendet haben:

On a 700 Mhz Pentium III processor, the face detector can process a 384 by 288
pixel image in about 0.067 seconds (using a starting scale of 1.25 and a step size of 1.5 described below).
This is roughly 15 times faster than the Rowley-Baluja-Kanade detector and about 600 times faster than
the Schneiderman-Kanade detector.

Fast jedes moderne Smartphone hat mindestens die vierfache Rechenleistung dieses alten Pentium III-Prozessors. Daher kann der exakt gleiche Algorithmus auf einem modernen Handy in ca. 0,01675 Sekunden durchlaufen, d.h. mit einer Framerate von ~60 FPS.

Auch wenn dieser Ansatz heute nur noch selten verwendet wird, kann er sicherlich in manchen Fällen die Laufzeit und Genauigkeit verbessern, wenn er mit CNNs und Deep Learning kombiniert wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.