Virtual Reality ist einfach nur cool und wenn man es mal erlebt hat fühlen sich Anwendungen auf dem 2D Monitor irgendwie unbefriedigend an. Einer der aktuell stärksten Einschränkungen von VR-Erlebnissen ist aber noch die Haptik, also die fehlende Möglichkeit die virtuellen Dinge anfassen und fühlen zu können. Das Vibrationsfeedback der Controller ist dafür nur ein kleines Trostpflaster. Tobias Wirth hat in seiner Masterarbeit daher daran geforscht reale Ersatzobjekte über Kameras zu erkennen und ihre Position an die VR-App zu übermitteln, so dass dort die virtuelle Entsprechung des Objekts an der richtigen Stelle angezeigt werden kann.
Leider ist das Ganze komplizierter als es aussieht und man vermuten würde. Man könnte annehmen, dass 2D Objekterkennung in Bildern mithilfe tiefer neuronaler Netze sehr gut funktioniert und daher die Erweiterung auf die dritte Dimension kein großes Problem sein sollte.

Leider sieht die Praxis anders aus. Das kann man schon am Namen des wissenschaftlichen Teilgebiets des maschinellen Sehens erkennen: 6D Pose Estimation. Man braucht nämlich neben der Position im dreidimensionalen Raum auch noch die Rotation des Objekts entlang seiner drei Achsen. Daher 6D. Das kann man erreichen, indem man zwei neuronale Netze miteinander kombiniert, so wie das der AugmentedAutoencoder (AAE) von Sundermeyer et al. (2018) tut, den ihr oben im Video schon in action gesehen habt. Er ermittelt mit einem Netz die Position und mit dem anderen die Rotation. Man kann aber auch beides in einem Modell abfackeln, wie z.B. bei Singleshotpose von Tekin et al. (2018). In jedem Fall braucht man aber jede Menge Trainingsdaten. Die sind wie bei jedem KI-Projekt das A und O und gar nicht so leicht zu beschaffen. Daher haben wir uns mit Kamera und Tracking-Ausrüstung bewaffnet und selbst Trainingsdaten erstellt.

Dann braucht man natürlich noch passende 3D-Modelle dazu, damit man die Objekte auch in der VR-App darstellen kann. Für die ausgewählten Objekte war das mit Blender kein großes Problem. Wasserwaage, Ratsche und Bügelsäge hatte ich in wenigen Stunden erstellt. Etwas problematischer war es beim Akkuschrauber. Der zeichnet sich durch viele „organische“ Rundungen aus und lässt sich nicht ohne weiteres aus 3D Grundbausteinen zusammensetzen. Auch das „Abfotografieren“ von Texturen gestaltet sich bei dem verwinkelten Ding reichlich schwierig. Daher hat Tobias das 3D Modell des Akkuschraubers schließlich mittels Photogrammetrie erstellt.

Man sieht an der Rückseite des Akkus noch ein paar Unebenheiten, die da nicht hingehören, aber insgesamt war das Ergebnis absolut brauchbar. Das sieht man auch auf den folgenden Bildern, die wir als zusätzliches Trainingsmaterial synthetisch erzeugt haben, also photorealistisch gerenderte 3D Modelle.

Dazu haben wir das bekannte 3D Modellierungsprogramm Blender genutzt und ein Addon namens BlenderProc, was automatisiert die konfigurierten Modelle lädt, sie zufallsgesteuert im Raum platziert, „fallen lässt“ und dann eine Ansicht des Bildes rendert. Da ist der Rechner zwar auch ganz schön beschäftigt, aber wir haben schnelle Hardware, die damit schon klar kommt.
Zum Schluss hat uns leider noch ein Problem einen Strich durch die Rechnung gemacht. Unser Netzwerk benötigt für die Positionserkennung eine 2D-Boundingbox, also das kleinste Rechteck, was sich um das Objekt im Bild herum malen lässt, ohne mit dem Objekt zu überlappen. Diese lässt sich leider nicht automatisch aus der 3D-Boundingbox ableiten, so dass wir die Daten nicht zum Training des Augmented Autoencoders verwenden konnten. Das war ein kleiner Wermutstropfen, der einer hervorragenden Masterarbeit aber nicht die Show stehlen konnte. Man sieht mal wieder, bloß weil Google es kann, heißt es nicht, dass es einfach ist.
