Ceci est une ancienne révision du document !
Table des matières
Activity Recognition from Single Chest-Mounted Accelerometer Data Set
Votre mission: Reconnaître l'activité du porteur d'un Accéléromètre.
Cette page fait suite à Detecting Heavy Drinking qui n'avait pas abouti.
Source des datas
Activités
- Working at Computer
- Standing Up, Walking and Going updown stairs
- Standing
- Walking
- Going UpDown Stairs
- Walking and Talking with Someone
- Talking while Standing
Documentation
Source sur GitHub
sudo pip3 install numpy matplotlib scipy tensorflow
Sur xubuntu 20.04, pb avec cublas (qui n'est pas là où il faudrait, erreur nvidia), dans le dossier du projet:
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} python3 main_keras_clean_smooth.py
Installation et matériel requis
Une carte graphique n'est pas nécessaire, au contraire une carte augmente de beaucoup le temps de epochs de keras.
Il faut installer au moins: numpy, matplotlib, scipy, tensorflow
Ce projet a été développé sur Debian 10 Buster Mate, et testé aussi sur Xubuntu 18.04 avec Cuda.
Représentation des datas
Recherche des zones valable en Input de Keras
Quelle est la zone des datas à conserver en Input ?
Définition des bornes avec des sliders
Application d'un filtre: Algorithme de Savitzky-Golay
Comparaison avant et après le filtre
Après correction
Activité 1 : Working at Computer
Activité 5: Going UpDown Stairs
Activité 6: Walking and Talking with Someone
Conclusion après analyse des courbes
Une seule personne a fait 15 fois le même parcours avec les mêmes activités, en portant toujours le même accéléromètre.
Apprentissage / Test avec les données nettoyées
Création des fichiers de données
Par exemle, les paquets de 900 array de 3 soit:
[[1012 2047 3089] [1082 2077 3012] [1096 2055 3078] ... 900 fois ...]
sont créés en décalant la 1ère valeur de “gliss” tous les paquets, gliss peut varier de 20 à la taille du paquet. Avec gliss, le fichier de datas obtenu est très gros (quelques Giga Octects) et provoque un dépassement de mémoire dans Keras. Un bon compromis est entre 50 et 100.
Apprentissage / Test
Les labels de sortie sont un array de shape=(32100, ) soit [ 0, 5, 4, 1, 2, 4, 6, …] avec 32100 valeurs.
Il faut ABSOLUMENT les transformer en vecteurs “one-hot”
[ 1 0 0 0 0 0 0] [ 0 0 0 1 0 0 0] [ 0 0 0 0 1 0 0] [ 0 0 0 0 0 0 0] [ 0 0 1 0 0 1 0] [ 0 1 0 0 0 0 0] [ 0 0 0 0 0 0 1] … jusqu'au 32100 ème
one-hot-encoding
Le one-hot-encoding est obtenu avec
train_label = utils.to_categorical(data["train_label"], 7)
Build Model
Inspiré de www.tensorflow.org tutorials keras classification build_the_model et
# Choix du model self.model = Sequential() # Input layer self.model.add(layers.Dense(units=4, input_shape=(self.PAQUET, 3))) self.model.add(layers.Flatten()) # Hidden layer self.model.add(layers.Dense(64, activation='relu')) # Output self.model.add(layers.Dense(7, activation='softmax'))
Compile Model
self.model.compile( loss=self.loss, optimizer=self.optimizer, metrics=self.metrics) "loss": 'categorical_crossentropy', # 'binary_crossentropy' ne va pas "optimizer": 'adam', # 'SGD' ne change que peu "metrics": 'accuracy'}
Résultats
Conclusion
Les courbes d'une activité à l'autre sont ressemblantes, l'apprentissage ne peut pas pallier à ce fait.
Construction de mon propre capteur
Application Android
Pour Roulez Bourrez: création d'une application Android avec Kivy pour capter une marche de 10 secondes et en déduire l'alcoolémie.
Capture de datas pour l'apprentissage
Des testeurs cobayes seront chargés de picoler, enregister les verres bus et capturer leur marche !
Roulez Bourrez
C'est le fameux projet: Roulez Bourrez
Autres idées
La personne utilise son téléphone normalement, et ne change rien à ces habitudes. Pour créer les datas d'apprentissage, enregistrement en permanence de ACC (en optimisant au max), + un gadget en dehors du téléphone qui permet d'enregistrer le type d'activité.