Dieser Artikel ist der 18. Tag des Adventskalenders des DoCoMo Advanced Technology Research Institute. Ich bin Ishioka, ein Mitarbeiter im zweiten Jahr des NTT Docomo Advanced Technology Research Institute. In diesem Artikel bin ich ein Anfänger des KI / maschinellen Lernens und erkläre ein Modell, das menschliche Bewegungen anhand von Sensordaten vorhersagt, die als Hobby erstellt wurden.
――Erkennen Sie die Bewegung einer Person anhand der vom Beschleunigungs- / Kreiselsensor und vom neuronalen Netzwerk (CNN) erfassten Daten. ――In den letzten Jahren scheint die Sporterkennung sehr beliebt zu sein. Lassen Sie uns also die Bewegung des Harki-Schritts erkennen.
Es ist eine der Trainingsmethoden im Sport. Sie haben es vielleicht einmal in einem Sportunterricht gemacht. Senken Sie im Stehen den Schwerpunkt und treten Sie fein mit den Füßen (dies ist der Harki-Schritt). In diesem Zustand macht der Ausbilder (Sportlehrer oder Clubaktivitätstrainer) oben rechts und unten links eine Ansage. Ich habe jeden Tag trainiert, als ich Student war, aber ich weiß nicht, wofür es funktioniert. Wenn ich nachschaue, scheint es, dass Beweglichkeit (?) Und Schnelligkeit (?) Trainiert werden können.
Das Bild des von mir gekauften Sensors sieht wie folgt aus. Weil es billig ist, müssen Sie es selbst löten. Der Abstand von Stift zu Stift ist groß genug, dass selbst Leute wie ich, die nicht gut löten können, dies problemlos tun können. Ich bin auch froh, dass es zwei Arten von Pin-Headern enthält.
Die Methode zum Erfassen von Sensordaten von der MPU6050 wurde in verschiedenen Artikeln vorgestellt, daher werde ich diesmal darauf verzichten. Es sind jedoch zwei Punkte zu beachten. Das erste ist, dass die MPU6050 Sensorwerte über die I2C-Kommunikation erfasst. Möglicherweise wissen Sie zunächst nicht, um was es sich handelt, da der vom Sensor ausgegebene Spannungswert nicht direkt als analoges Signal gelesen wird. Grob gesagt kommuniziert die Empfängerseite (Raspberry pi, Arduino usw.) nur mit dem angegebenen Block (Adressspezifikation) auf der Sensorseite (MPU6050 usw.). Es gibt nur Datenbus und Taktbus, aber es ist möglich, Daten von 3 Achsen des Beschleunigungssensors und 3 Achsen des Kreiselsensors zu lesen.
Die zweite ist die Eingangs- / Ausgangsspannung der MPU6050. Die maximale Eingangs- / Ausgangsspannung der MPU6050 beträgt im Datenblatt 3,46 V. Auf der anderen Seite verfügt Arduino über einen 5-V-Ein- und Ausgang. Wenn Sie also die Eingangs- und Ausgangspins von Arduino direkt an die MPU6050 anschließen, funktioniert dies nicht ordnungsgemäß. Da der Eingangs- / Ausgangspin von Raspberry pi 3,3 V beträgt, ist es kein Problem, wenn Sie ihn direkt an die MPU6050 anschließen.
Bei der Erstellung der Daten haben wir drei Personen vom Institute of Advanced Technology gebeten, ein Haki durchzuführen, und 300 Daten erstellt (Beschleunigung für 1 Sekunde, Werte für die Kreisel-3-Achsen). Die folgende Abbildung zeigt die Ergebnisse jeder Operation des Harki-Schritts, wobei der Sensor an der Taillenposition befestigt ist. Irgendwie scheint es Bewegung darzustellen, aber um ehrlich zu sein, sehen alle wie Geräuschdaten aus ...
Dieses Mal möchte ich diese Sensordaten in das neuronale Netzwerk eingeben und die Bewegung des menschlichen Körpers vorhersagen.
Dieses Mal habe ich CNN (Convolutional Neural Network) verwendet. Dafür gibt es zwei Gründe. ――Ich weiß nicht, was es ist, auch wenn ich jeden Moment der Bewegung ausschneide, also möchte ich es zu einem Zeitraffer machen und es lernen. ――Wenn ich versuchte, die Matrix so zu setzen, wie sie war, dachte ich, dass der CNN-Code so verwendet werden könnte, wie er ist.
Beschleunigungsdaten $ a = [a_x, a_y, a_z] $, die von MPU6050 erhalten wurden, und Kreiseldaten $ g = [g_x, g_y, g_z] $ werden mit einer Abtastrate von 40 Hz abgetastet. Verwenden Sie dies als 6x40-Eingabedaten.
Im Harki-Schritt wird es grundsätzlich in 4 Bewegungen klassifiziert, aber dieses Mal wird es unter Berücksichtigung von "nur Schritt" in 5 Bewegungen klassifiziert (5 Bewegungen ohne oben, unten, rechts, links).
Der Umriss des gesamten Programms und das Netzwerkkonfigurationsdiagramm sind unten dargestellt. Im Allgemeinen hat es dieselbe Netzwerkkonfiguration wie das in CNN-Tutorials verwendete Bildklassifizierungsmodell. Als Eingabedaten werden 6x40 Beschleunigungs- / Kreiselsensordaten wie Bilddaten in CNN eingegeben, und für jede der fünf Operationen werden Werte von 0 bis 1 ausgegeben. Je näher es an 1 liegt, desto höher ist die Wahrscheinlichkeit der Aktion, und je näher es an 0 liegt, desto geringer ist die Wahrscheinlichkeit der Aktion. Schätzen Sie die Bewegung des menschlichen Körpers aus dem Maximum der fünf Werte.
Die folgende Abbildung zeigt die Ergebnisse des Trainings durch Validierung von 2: 1 für 300 Betriebsdaten für 3 Personen. Die Genauigkeit ist ungewöhnlich hoch. Vielleicht war das Ergebnis derselben Person, die dasselbe tat, sowohl in den Trainings- als auch in den Testdaten enthalten, sodass es zu lecken schien. Bei der Aufteilung in Trainingsdaten und Testdaten war es möglicherweise erforderlich, Methoden wie die Aufteilung nach Personen anstatt nach dem Zufallsprinzip zu entwickeln (da wir keine Personen aufgezeichnet haben, um sie anonym zu machen, werden wir dies auch weiterhin tun. Ich werde es überprüfen).
Ich habe ein Modell zur Vorhersage menschlicher Bewegungen mit einem Ein-Münzen-Sensor erstellt, der bei Amazon erhältlich ist. Es gab ein Stereotyp, dass "CNN = Bilderkennung", aber es könnte auch für Sensordaten verwendet werden. Andererseits sind die für das Training verwendeten Daten klein, und es ist sehr wahrscheinlich, dass die Genauigkeit offensichtlich hoch ist. Dieses Modell wurde verwendet, indem ein Sensor an den Raspberry Pi angeschlossen wurde. Da es jedoch möglich ist, anhand der vom Smartphone erfassten Beschleunigung und des Kreisels Vorhersagen zu treffen, möchte ich eine Anwendung entwickeln, die dieses Bewegungsvorhersagemodell verwendet.