Neuronale Echtzeitnetze zur Handverfolgung

KĂŒrzlich haben GoogleAI-Forscher ihre Herangehensweise an die Aufgabe gezeigt, HĂ€nde zu verfolgen und Gesten in Echtzeit zu bestimmen. Ich war mit einer Ă€hnlichen Aufgabe beschĂ€ftigt und beschloss daher herauszufinden, wie sie sich der Lösung nĂ€herten, welche Technologien sie verwendeten und wie sie bei der Echtzeitarbeit auf einem mobilen GerĂ€t eine gute Genauigkeit erzielten. Auch startete das Modell auf Android und getestet unter realen Bedingungen.


Warum ist das wichtig?


Handerkennung ist eine eher nicht triviale Aufgabe, die gleichzeitig sehr gefragt ist. Diese Technologie kann in Anwendungen mit zusĂ€tzlicher RealitĂ€t fĂŒr die Interaktion mit virtuellen Objekten verwendet werden. Es kann auch die Grundlage fĂŒr das VerstĂ€ndnis der GebĂ€rdensprache oder fĂŒr die Erstellung gestenbasierter Steuerungsschnittstellen sein.

Bild

Was ist die Schwierigkeit?


Die natĂŒrliche Wahrnehmung von HĂ€nden in Echtzeit ist eine echte Herausforderung fĂŒr das Computer-Sehen. HĂ€nde ĂŒberlappen sich hĂ€ufig selbst oder einander (Daumen drĂŒcken oder HĂ€ndeschĂŒtteln). WĂ€hrend Gesichter kontrastreiche Muster aufweisen, beispielsweise im Bereich der Augen und des Mundes, ermöglicht das Fehlen solcher Zeichen in den HĂ€nden eine zuverlĂ€ssige Erkennung nur anhand ihrer visuellen Zeichen.

HĂ€nde sind stĂ€ndig in Bewegung, Ă€ndern Neigungswinkel und ĂŒberlappen sich. FĂŒr eine akzeptable Benutzererfahrung muss die Erkennung mit hohen FPS (25+) funktionieren. DarĂŒber hinaus sollte dies alles auf mobilen GerĂ€ten funktionieren, was die Geschwindigkeitsanforderungen sowie die RessourcenbeschrĂ€nkungen erhöht.

Was hat GoogleAI getan?


Sie implementierten Technologien zur prĂ€zisen Verfolgung von HĂ€nden und Fingern mithilfe von maschinellem Lernen (ML). Das Programm ermittelt 21 SchlĂŒsselpunkte der Hand im 3D-Raum (Höhe, LĂ€nge und Tiefe) und klassifiziert anhand dieser Daten die Gesten, die die Hand zeigt. All dies auf der Basis von nur einem Videobild, funktioniert in Echtzeit auf MobilgerĂ€ten und skaliert mit mehreren HĂ€nden.

Wie haben sie das gemacht?


Der Ansatz wird mithilfe von MediaPipe implementiert, einem plattformĂŒbergreifenden Open-Source-Framework zum Erstellen von Datenverarbeitungs-Pipelines (Video, Audio, Zeitreihen). So etwas wie Deepstream von Nvidia, aber mit einer Reihe von Funktionen und plattformĂŒbergreifend.

Die Lösung besteht aus 3 Hauptmodellen, die zusammenarbeiten:

Palm Detector (BlazePalm)

  • Nimmt das vollstĂ€ndige Bild vom Video auf
  • gibt orientierten Begrenzungsrahmen zurĂŒck (Begrenzungsrahmen)

Modell zur Bestimmung der wichtigsten Punkte auf der Hand

  • macht ein beschnittenes Bild von einer Hand
  • Gibt 21 wichtige Punkte einer Hand im 3D-Raum + Konfidenzindikator zurĂŒck (weitere Details weiter unten im Artikel).

Gestenerkennungsalgorithmus

  • nimmt wichtige Punkte der Hand
  • Gibt den Namen der Geste zurĂŒck, die die Hand zeigt

Die Architektur Ă€hnelt der in der PosenschĂ€tzungsaufgabe verwendeten . Durch die Bereitstellung eines prĂ€zise zugeschnittenen und ausgerichteten Handbilds wird der Bedarf an Datenerweiterungen (Rotationen, Übersetzungen und Skalierungen) erheblich reduziert. Stattdessen kann sich das Modell auf die Genauigkeit der Koordinatenvorhersage konzentrieren.

Palmendetektor


Um die HandflĂ€che zu finden, wird ein Modell namens BlazePalm verwendet - ein Single Shot Detector (SSD) -Modell, das fĂŒr die Arbeit an einem mobilen GerĂ€t in Echtzeit optimiert ist.

In einer GoogleAI-Studie wurde ein HandflÀchendetektor anstelle eines gesamten Armdetektors trainiert (HandflÀche ist die Basis einer HandflÀche ohne Finger). Der Vorteil dieses Ansatzes besteht darin, dass es einfacher ist, eine HandflÀche oder Faust mit gestikulierenden Fingern zu erkennen als die ganze Hand, und die HandflÀche kann auch mithilfe von quadratischen Begrenzungsrahmen (Ankern) ausgewÀhlt werden, wobei SeitenverhÀltnisse ignoriert werden und somit die Anzahl der erforderlichen Anker um das 3-5-fache reduziert wird

Der Feature- Extraktor " Feature Pyramid Networks for Object Detection" (FPN) wurde auch verwendet, um den Bildkontext auch fĂŒr kleine Objekte besser zu verstehen.

Als Verlustfunktion wurde ein Fokusverlust genommen, der das Ungleichgewicht der Klassen, die beim Erzeugen einer großen Anzahl von Ankern auftreten, gut bewĂ€ltigt.

Klassische Kreuzentropie : CE (pt) = -log (pt)
Fokusverlust: FL (pt) = - (1-pt) log (pt)

Weitere Informationen zum Focall-Verlust finden Sie im ausgezeichneten Pager von Facebook AI Research (empfohlene LektĂŒre).

Unter Verwendung der obigen Techniken wurde eine durchschnittliche Genauigkeit von 95,7% erreicht. Bei Verwendung einer einfachen Kreuzentropie und ohne FPN - 86,22%.

Wichtige Punkte definieren


Nachdem der HandflÀchendetektor die Position der HandflÀche im gesamten Bild bestimmt hat, verschiebt sich der Bereich um einen bestimmten Faktor nach oben und dehnt sich aus, um die gesamte Hand abzudecken. Weiter auf dem zugeschnittenen Bild ist das Regressionsproblem gelöst - die genaue Position von 21 Punkten im 3D-Raum wird bestimmt.

FĂŒr das Training wurden 30.000 reale Bilder manuell markiert. Es wurde auch ein realistisches 3D-Modell der Hand erstellt, mit dessen Hilfe kĂŒnstlichere Beispiele auf verschiedenen HintergrĂŒnden erzeugt wurden.


Oben: Echte Handbilder mit markierten SchlĂŒsselpunkten. Unten: KĂŒnstliche Bilder der Hand, die mit einem 3D-Modell erstellt wurden

Gestenerkennung


FĂŒr die Gestenerkennung wurde ein einfacher Algorithmus verwendet, der den Zustand jedes Fingers (z. B. gekrĂŒmmt oder gerade) anhand der SchlĂŒsselpunkte der Hand bestimmt. Dann werden alle diese Bedingungen mit den vorhandenen Gesten verglichen. Mit dieser einfachen, aber effektiven Methode können Sie grundlegende Gesten mit guter QualitĂ€t erkennen.

Optimierungen


Das Hauptgeheimnis der schnellen Inferenz in Echtzeit ist in einer wichtigen Optimierung verborgen. Der Palmenmelder, der die meiste Zeit in Anspruch nimmt, startet nur bei Bedarf (ziemlich selten). Dies wird erreicht, indem die Position der Hand im nĂ€chsten Frame basierend auf den vorherigen SchlĂŒsselpunkten der Hand berechnet wird.

FĂŒr die Nachhaltigkeit dieses Ansatzes wurde dem Modell ein weiterer Ausweg zur Bestimmung der wichtigsten Punkte hinzugefĂŒgt - ein Skalar, der zeigt, wie sicher das Modell ist, dass die Hand auf dem zugeschnittenen Bild vorhanden ist und korrekt eingesetzt wird. Wenn der Konfidenzwert unter einen bestimmten Schwellenwert fĂ€llt, wird der Palmendetektor gestartet und auf den gesamten Rahmen angewendet.


RealitĂ€tsprĂŒfung


Ich habe diese Lösung auf einem Android-GerĂ€t (Xiaomi Redmi Note 5) fĂŒr einen Test unter realen Bedingungen gestartet. Das Modell verhĂ€lt sich gut, bildet das Skelett der Hand korrekt ab und berechnet die Tiefe mit einer anstĂ€ndigen Anzahl von Bildern pro Sekunde.


Von den Minuspunkten ist zu beobachten, wie Genauigkeit und Geschwindigkeit bei einer konstanten Bewegung der Hand entlang des Rahmens zu sinken beginnen. Dies liegt daran, dass das Modell den Detektor stĂ€ndig neu starten muss, da er beim Bewegen die Position der Hand verliert. Wenn die Geschwindigkeit, mit der Sie eine sich bewegende Hand finden, fĂŒr Sie wichtiger ist als die Definition von Gesten, sollten Sie nach anderen AnsĂ€tzen suchen.


Einige Probleme treten auch auf, wenn sich die Hand mit dem Gesicht oder Ă€hnlichen komplexen HintergrĂŒnden schneidet. Ansonsten ist die großartige Arbeit von GoogleAI ein großer Beitrag zur zukĂŒnftigen Entwicklung der Technologie.

GoogleAI-Blog-Artikel
Github Mediapipe Hand Tracking

Source: https://habr.com/ru/post/de466781/


All Articles