Outils pour utilisateurs

Outils du site


activity_recognition_from_accelerometer_data_set

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
activity_recognition_from_accelerometer_data_set [2020/10/14 09:10] – [Représentation des datas] sergeactivity_recognition_from_accelerometer_data_set [2021/12/14 09:50] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. 62.210.73.184
Ligne 2: Ligne 2:
  
 <WRAP center round box 60% centeralign> <WRAP center round box 60% centeralign>
-**{{tagpage>ia|Intelligence Artificielle}}**+**[[intelligence_artificielle|Intelligence Artificielle]]**
 </WRAP> </WRAP>
 +
 Votre mission: **Reconnaître l'activité du porteur d'un Accéléromètre.** Votre mission: **Reconnaître l'activité du porteur d'un Accéléromètre.**
    
 +Cette page fait suite à [[detecting_heavy_drinking|Detecting Heavy Drinking]] qui n'avait pas abouti.
 +
 =====Source des datas===== =====Source des datas=====
   * **[[https://archive.ics.uci.edu/ml/datasets/Activity+Recognition+from+Single+Chest-Mounted+Accelerometer#|Activity Recognition from Single Chest-Mounted Accelerometer Data Set]]**   * **[[https://archive.ics.uci.edu/ml/datasets/Activity+Recognition+from+Single+Chest-Mounted+Accelerometer#|Activity Recognition from Single Chest-Mounted Accelerometer Data Set]]**
Ligne 28: Ligne 31:
   * **[[https://github.com/sergeLabo/activity| sergeLabo/activity ]]**   * **[[https://github.com/sergeLabo/activity| sergeLabo/activity ]]**
  
 +  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 [[compilation_de_oepncv_avec_cuda_sur_ubuntu|Cuda]].
 =====Représentation des datas===== =====Représentation des datas=====
  
 {{ :media_10:activity_1.png?600 |}} {{ :media_10:activity_1.png?600 |}}
 {{:media_10:activity_2.png?120|}}{{:media_10:activity_3.png?120|}}{{:media_10:activity_4.png?120|}}{{:media_10:activity_5.png?120|}}{{:media_10:activity_6.png?120|}}{{:media_10:activity_7.png?120|}}{{:media_10:activity_8.png?120|}}{{:media_10:activity_9.png?120|}}{{:media_10:activity_10.png?120|}}{{:media_10:activity_11.png?120|}}{{:media_10:activity_12.png?120|}}{{:media_10:activity_13.png?120|}}{{:media_10:activity_14.png?120|}}{{:media_10:activity_15.png?120|}} {{:media_10:activity_2.png?120|}}{{:media_10:activity_3.png?120|}}{{:media_10:activity_4.png?120|}}{{:media_10:activity_5.png?120|}}{{:media_10:activity_6.png?120|}}{{:media_10:activity_7.png?120|}}{{:media_10:activity_8.png?120|}}{{:media_10:activity_9.png?120|}}{{:media_10:activity_10.png?120|}}{{:media_10:activity_11.png?120|}}{{:media_10:activity_12.png?120|}}{{:media_10:activity_13.png?120|}}{{:media_10:activity_14.png?120|}}{{:media_10:activity_15.png?120|}}
- 
-===== Apprentissage avec les données brutes ===== 
- 
- 
  
 =====Recherche des zones valable en Input de Keras===== =====Recherche des zones valable en Input de Keras=====
Ligne 64: Ligne 74:
 </WRAP> </WRAP>
 </WRAP> </WRAP>
- 
- 
- 
  
 ====Après correction==== ====Après correction====
Ligne 80: Ligne 87:
 **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.  **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. 
  
-Cet appareil est probablement un Rasberry Pi alimenté par batterie 5v USB. Un sélecteur permet de définir le numéro d'activitéPas cher, facile à construire !+===== Apprentissage / Test avec les données nettoyées===== 
 +====Création des fichiers de données==== 
 +  * [[https://github.com/sergeLabo/activity/blob/main/create_clean_smooth_paquets.py|create_clean_smooth_paquets.py]]
  
-Ou un téléphone avec une application fixé sur la poitrine+Par exemle, les paquets de 900 array de 3 soit: 
 +<code> 
 +[[1012 2047 3089] 
 +[1082 2077 3012] 
 +[1096 2055 3078] 
 +... 
 +900 fois 
 +...] 
 +</code> 
 +sont créés en décalant la 1ère valeur de "gliss" tous les paquets, gliss peut varier de 20 à la taille du paquet. 
 +{{ :media_11:glissant.png?400 |}} 
 +Avec gliss, le fichier de datas obtenu peut être très gros (quelques Giga Octects) et provoque un dépassement de mémoire dans Keras. Un bon compromis est entre 50 et 100. On transforme en fait des datas de 5 Mo en des datas de 50 Mo à quelques centaines de Mo.
  
-===== Apprentissage / Test ===== +==== Apprentissage / Test ==== 
-====Modèle==== +  * [[https://github.com/sergeLabo/activity/blob/main/main_keras_clean_smooth.py|main_keras_clean_smooth.py]]
-<code python> +
-    model = Sequential()+
  
-    # Input layer +Les labels de sortie sont un array de shape=(32100, ) soit\\  
-    model.add(layers.Dense(units=4, input_shape=(PAQUET3))+[ 0\\ 5\\ 4\\ 1\\ 2\\ 4\\ 6\\ ...] avec 32100 valeurs.
-    model.add(layers.Flatten())+
  
-    # Hiiden layer +Il faut ABSOLUMENT les transformer en vecteurs "one-hot"
-    model.add(layers.Dense(64))+
  
-    # Output +[ 1 0 0 0 0 0 0]\\ 
-    model.add(layers.Dense(7))+[ 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 0 0]\\ 
 +[ 0 1 0 0 0 0 0]\\ 
 +[ 0 0 0 0 0 0 1]\\ 
 +... jusqu'au 32100 ème 
 + 
 +===one-hot-encoding=== 
 +{{:media_11:label_endoding.jpeg?400|}} à [[https://medium.com/@michaeldelsole/what-is-one-hot-encoding-and-how-to-do-it-f0ae272f1179|medium.com/@michaeldelsole/]] 
 + 
 +Le one-hot-encoding est obtenu avec  
 +<code lang=python> 
 +train_label = utils.to_categorical(data["train_label"], 7)
 </code> </code>
  
-====Résultats==== +====Build Model==== 
-<code csv> +Inspiré de [[https://www.tensorflow.org/tutorials/keras/classification#build_the_model|www.tensorflow.org tutorials keras classification build_the_model]] 
-Paquets,51,window,41,polyorder,1,Efficacité,"38,9",Epochs,5 +et 
-Paquets,251,window,81,polyorder,9,Efficacité,"38,1",Epochs,10 +  * [[comment_configurer_le_nombre_de_couches_et_de_nœuds_dans_un_reseau_neuronal|Comment configurer le nombre de couches et de nœuds dans un réseau neuronal]] 
-Paquets,251,window,31,polyorder,7,Efficacité,"37,6",Epochs,20 +  * [[keras_input_explanation|Keras input explanation: input_shapeunitsbatch_sizedimetc]] 
-Paquets,151,window,51,polyorder,1,Efficacité,"37,5",Epochs,10 + 
-Paquets,301,window,81,polyorder,7,Efficacité,"37,4",Epochs,5 +<code python> 
-Paquets,125,window,61,polyorder,9,Efficacité,"37,2",Epochs,5 +        # Choix du model 
-Paquets,75,window,21,polyorder,1,Efficacité,"36,9",Epochs,10 +        self.model = Sequential() 
-Paquets,151,window,61,polyorder,3,Efficacité,"36,9",Epochs,10 +        # Input layer 
-Paquets,301,window,21,polyorder,9,Efficacité,"36,8",Epochs,10 +        self.model.add(layers.Dense(units=4input_shape=(self.PAQUET, 3))) 
-Paquets,301,window,61,polyorder,9,Efficacité,"36,8",Epochs,10 +        self.model.add(layers.Flatten()) 
-Paquets,251,window,71,polyorder,7,Efficacité,"36,6",Epochs,20 + 
-Paquets,101,window,81,polyorder,1,Efficacité,"36,5",Epochs,10 +        # Hidden layer 
-Paquets,151,window,51,polyorder,5,Efficacité,"36,5",Epochs,10 +        self.model.add(layers.Dense(64activation='relu')) 
-Paquets,51,window,61,polyorder,5,Efficacité,"36,3",Epochs,20 + 
-Paquets,301,window,51,polyorder,9,Efficacité,"36,3",Epochs,20 +        # Output 
-Paquets,301,window,81,polyorder,5,Efficacité,"36,3",Epochs,20 +        self.model.add(layers.Dense(7, activation='softmax'))
-Paquets,25,window,51,polyorder,9,Efficacité,"36,2",Epochs,20 +
-Paquets,251,window,61,polyorder,3,Efficacité,36,Epochs,5 +
-Paquets,51,window,71,polyorder,3,Efficacité,"35,9",Epochs,10 +
-Paquets,301,window,51,polyorder,9,Efficacité,"35,6",Epochs,10 +
-Paquets,125,window,51,polyorder,5,Efficacité,"35,5",Epochs,+
-Paquets,51,window,31,polyorder,9,Efficacité,"35,4",Epochs,10 +
-Paquets,101,window,31,polyorder,5,Efficacité,"35,4",Epochs,20 +
-Paquets,101,window,51,polyorder,7,Efficacité,"35,4",Epochs,+
-Paquets,101,window,41,polyorder,1,Efficacité,"35,2",Epochs,+
-Paquets,251,window,31,polyorder,3,Efficacité,"35,2",Epochs,10 +
-Paquets,151,window,21,polyorder,9,Efficacité,"35,1",Epochs,10 +
-Paquets,151,window,31,polyorder,7,Efficacité,"35,1",Epochs,20 +
-Paquets,251,window,81,polyorder,3,Efficacité,"35,1",Epochs,+
-Paquets,301,window,51,polyorder,5,Efficacité,"35,1",Epochs,20 +
-Paquets,101,window,81,polyorder,1,Efficacité,35,Epochs,+
-Paquets,125,window,21,polyorder,1,Efficacité,35,Epochs,20+
 </code> </code>
 +
 +====Compile Model====
 +
 +<code python>
 +        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'              
 +</code>
 +                            
 +                            
 +                            
 +====Résultats====
 +Les meilleurs
 +
 +{{:media_11:meilleurs_activity.png?800|}}
 +
 +mais aussi les plus mauvais
 +
 +{{:media_11:bad_activity.png?800|}}
 +
 +====Conclusion====
 +Les courbes d'une activité à l'autre sont ressemblantes, l'apprentissage ne peut pas pallier à ce fait.
 =====Construction de mon propre capteur===== =====Construction de mon propre capteur=====
 ====Application Android==== ====Application Android====
Ligne 141: Ligne 180:
 Des testeurs cobayes seront chargés de picoler, enregister les verres bus et capturer leur marche ! 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|Roulez Bourrez]]**
 +
 +=====Vision artistique des datas d'apprentissage=====
 +Du son et des images avec [[https://github.com/sergeLabo/activity/blob/main/paquet_to_image.py|paquet_to_image.py]]
 +  sudo pip3 install opencv-python sounddevice
 +
 +{{ :media_01:activity_artist.png?700 |}}
 +=====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é. 
  
 {{tag> ia keras python realisations_logicielles }} {{tag> ia keras python realisations_logicielles }}
activity_recognition_from_accelerometer_data_set.1602666651.txt.gz · Dernière modification : 2020/10/14 09:10 de serge