Aller au contenu


Photo
- - - - -

Un jeu qui apprend à se jouer lui-même

arduino IA unity

48 réponses à ce sujet

#21 Ludovic Dille

Ludovic Dille

    Membre occasionnel

  • Membres
  • Pip
  • 127 messages
  • Gender:Male
  • Location:Belgique
  • Interests:Robotique, électronique, embarqué, informatique, ...

Posté 14 mai 2020 - 04:53

Yep je pense que changer le dataset peut-être une bonne idée. Tu pourrais commencer par prendre des photos à partir de différents angles, différents luminosités, différentes distances pour te constituer la base de ton dataset. Et puis tu peux modifier ces photos numériquement par après pour compliquer la tâche à ton réseau.



#22 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 14 mai 2020 - 06:43

Voila la donnée qui me manquait :) pour apprendre c'est en effet un très bon exercice ! je suis content que mes vidéos aident ! si vous voulez un avis sur le modèle, le code ou l'algo, n’hésitez pas ;) c'est un très beau projet !

 

Merci pour l'offre! Je ferais signe si je me retrouve coincé ou que j'ai quelque chose sur lequel j'ai besoin d'un avis . Pour le moment je me base sur les exemples du site de tensorflow et je joue un peu avec l'architectures et les paramères du modèle . J'ai pas mal de rattrapage à faire niveau math et je préfère me documenter un peu de mon coté avant demander surtout qu'il me faut pas mal de temps pour assimiler certains concepts .
 

 

Yep je pense que changer le dataset peut-être une bonne idée. Tu pourrais commencer par prendre des photos à partir de différents angles, différents luminosités, différentes distances pour te constituer la base de ton dataset. Et puis tu peux modifier ces photos numériquement par après pour compliquer la tâche à ton réseau.

 

Je pense que je vais ecrire un petit script qui va prendre des photos de l'écran automatiquement . en le laissant tourner une journée entière je devrais avoir une bonne collection d'images avec differentes luminosités . Il y a une fonction dans tensorflow qui permet "d'augmenter" le data . Elle permet de zoomer, translater et changer la perspective des images aléatoirement . J'espère que ca fonctionnera mieux avec cette technique !!!



#23 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 17 mai 2020 - 08:31

Les progrès ont été plus lents que prévu ce weekend .

La première chose à faire était de trouver une nouvelle solution pour collecter des images du jeu . Je me suis dit qu'il serait une bonne idée de prendre les images directement à partir de la Pi camera du robot . 
Le challenge était de faire communiquer le robot (jetson nano) et le jeu qui tourne sur un PC . J'ai decidé d'utiliser le jetson nano comme server et le jeu comme client . Le robot envoi un signal au jeu pour afficher l'image désirée avant de la capturer .

data_collection_Moment.jpg

 

Je pensais que le contrôle du bras consisterai simplement à brancher les servos sur les GPIOs du jetson Nano et à les controller directement . Je n'avais juste pas prévu qu'il n'est pas possible d'utiliser le 'PWM' sur les GPIO du jetson . J'ai donc choisi de resortir le arduino nano du projet précédent pour controller les servos .

glados (1).jpg

Maintenant il ne reste plus qu'à collecter des images, entrainer l'IA et ensuite écrire un petit script pour connecter les décisions de l'IA au servos (enfin ca c'est le plan :laugh1: ) .



#24 XB2000

XB2000

    Nouveau membre

  • Membres
  • 25 messages

Posté 20 mai 2020 - 10:05

Au moins ça progresse et c'est déjà pas mal  :ok:



#25 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 22 mai 2020 - 08:38

Je me suis rendu compte que le data que j'ai collecté est vraiment pas top donc il faudra que je  recommence cette partie mais j'ai quand meme décidé de tester le tout avec un réseau neuronal assez mal entrainé (75% de précision) pour m'assurer que sur le principe ca fonctionne .
Je suis vraiment impressionné par les performances du jetson Nano, il tourne nikel a 25FPS . Bon par contre comme espéré le réseau neuronal lui ne fonctionne pas tres bien donc le robot se retrouve coincé dans des boucles .

round h.gif



#26 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 5 307 messages
  • Gender:Male

Posté 22 mai 2020 - 09:21

Mais, c'est quoi le but, là ?



#27 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 22 mai 2020 - 11:44

ici le but du jeu c'est de mettre le cercle sur le carré blanc et de le tenir dans cette position pendant une demi seconde .



#28 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 5 307 messages
  • Gender:Male

Posté 22 mai 2020 - 01:03

ici le but du jeu c'est de mettre le cercle sur le carré blanc et de le tenir dans cette position pendant une demi seconde .

Ah, ouais ! Y a encore du boulot, là !



#29 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 23 mai 2020 - 05:39

Après avoir collecté quelques milliers de nouvelles images de bonne qualité et une autre session d'apprentissage les résultats s'améliorent mais il y a encore des moments ou il reste coincé dans des boucles .
 

better_fb_gif.gif



#30 Laurent42

Laurent42

    Nouveau membre

  • Membres
  • 48 messages
  • Gender:Male
  • Location:LV-426
  • Interests:Intelligence artificielle, robotique, mathématiques, physique, algorithme

Posté 23 mai 2020 - 05:46

je ne connais ni le modèle, ni la fonction de perte, ni ....

mais comme ça, mon intuition me dit :

- entrée de réseau de neurone pas assez fine (image trop grossière)

- coefficient d'apprentissage trop élevé (essayer 1E-4 ?)

 

Laurent



#31 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 23 mai 2020 - 07:09

en entrée je passe une image de 192*108*1 (noir et blanc) . Le reste du modèle ressemble à ca:

architecture.png

 

La fonction de perte j'ai utilisé la "categorical crossentropy"

Pour l'algorithm d'optimisation j'ai utilisé le "RMSprop" . J'en est testé plusieurs, celui la avait l'air de mieux fonctionner .

J'utilise le "image data generator" de keras/tensorflow qui permet de modifier les images aléatoirement pour créer des variations et je crois que j'ai été eu la main un peu lourde sur le paramètre de zoom .

 

Pour le coefficient d'apprentissage . J'ai commencé à 4e-3 et la précision finissait a 0.1 avec 10 catégories . Pour l'apprentissage de la vidéo ci-dessus j'ai descendu le coefficient a 3e-3 mais au bout d'un moment l'accuracy à ateint une certaine valeur puis à commencé à osciller autour de cette valeur pour le reste de l'apprentissage .
Je suis en train de train d'éssayer un coefficient d'apprentissage dégressif en espérant que la précision se stabilise plus sur la fin, les résultats ont l'air prometteurs pour le moment .

Y a t'il un bon moyen d'estimer les param
ètres correctes sans employer une méthode empirique? 



#32 Laurent42

Laurent42

    Nouveau membre

  • Membres
  • 48 messages
  • Gender:Male
  • Location:LV-426
  • Interests:Intelligence artificielle, robotique, mathématiques, physique, algorithme

Posté 25 mai 2020 - 11:18

Hello

 

malheureusement, il y a pas mal d'empirisme :) 

si l'image analysée est uniquement l'ecran, elle est simple, meme si il peut y avoir quelques reflets, donc j'aurais utilisé un réseau bien plus simple, voir sans maxpool, mais avec un stride de 2 sur les couche de convolution; à la fin, il y a trop de couche dense, il faut en mettre 1 ou 2, pas plus.

donc quelchose comme ca par exemple:

conv2d(None, ..., ..., 8) kernel=3 stride=2

conv2d(None, ..., ..., 16) kernel=3 stride=2

conv2d(None, ..., ..., 32) kernel=3 stride=2

Dense(256)

Dense(10)

 

fonction relu partout

 

par contre, que sont ces 10 classes ?

 

Laurent



#33 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 25 mai 2020 - 03:10

Merci pour le conseil! Je vais tester ca . 

Je ne sais pas si j'ai la bonne approche mais comme le jeu est très simple et consiste juste à mettre le cercle sur la cible, je me suis dis que je pouvais classer les images pour déterminer les décisions à prendre .

Il y a 9 positions de joystick possible (gauche, gauche+haut, haut.......centre) plus une classe pour déterminer si il y a du texte à l'écran (qui apparait entre 2 parties) . 

 

Chaque action à prendre peut facilement etre déterminer par la position du cercle et de la cible sur l'écran . Par exemple, si le cercle se trouve au dessus de la cible, le joystick doit etre bougé vers le bas, si le cercle se trouve à droite de la cible, le joystick soit etre bougé vers la gauche...etc .

L'idée c'est donc de classer chacune de ces situations pour ensuite bouger le joystick en fonction des prédictions .
 



#34 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 935 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 mai 2020 - 10:57

Merci pour le conseil! Je vais tester ca . 

Je ne sais pas si j'ai la bonne approche mais comme le jeu est très simple et consiste juste à mettre le cercle sur la cible, je me suis dis que je pouvais classer les images pour déterminer les décisions à prendre .

Il y a 9 positions de joystick possible (gauche, gauche+haut, haut.......centre) plus une classe pour déterminer si il y a du texte à l'écran (qui apparait entre 2 parties) . 

 

Chaque action à prendre peut facilement etre déterminer par la position du cercle et de la cible sur l'écran . Par exemple, si le cercle se trouve au dessus de la cible, le joystick doit etre bougé vers le bas, si le cercle se trouve à droite de la cible, le joystick soit etre bougé vers la gauche...etc .

L'idée c'est donc de classer chacune de ces situations pour ensuite bouger le joystick en fonction des prédictions .
 

 

 

Ce parti pris explique donc le résultat obtenu ! Je m'étonnais de pas le voir partir en diagonal entre le point où il est et le point théorique d'arrivé. =) 
Il ne peut tout simplement pas le faire avec les conditions données =)


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#35 Sandro

Sandro

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 721 messages
  • Gender:Male

Posté 26 mai 2020 - 11:26

Euh, si j'ai bien compris, les diagonales à 45° sont permises ("gauche + haut")



#36 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 8 935 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 mai 2020 - 11:38

Euh, si j'ai bien compris, les diagonales à 45° sont permises ("gauche + haut")

 

Justement, je parle de tous les autres angles possible pour faire une ligne droite vers le point de destination et pas faire "deux segments "... Voir même une jolie courbe si le point cible bougeait par exemple ...


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 

 

Les réalisations de Mike118  

 

 

 


#37 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 26 mai 2020 - 01:57

C'est vrai qu'ici il n'y a aucune finesse dans le resultat . Le robot choisi juste une position de joystick prédéfinie .



#38 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 31 mai 2020 - 11:07

Après avoir suivi les conseil de Laurent42, les prédictions du réseaux neuronal se sont améliorées . 
Je me suis amusé à essayer de la perturber pendant le jeu mais elle arrive toujours à jouer .

 

shake_to_gif.gif



#39 Laurent42

Laurent42

    Nouveau membre

  • Membres
  • 48 messages
  • Gender:Male
  • Location:LV-426
  • Interests:Intelligence artificielle, robotique, mathématiques, physique, algorithme

Posté 02 juin 2020 - 09:36

content d'avoir pu aider, quel est le modèle finalement ?



#40 Little french kev

Little french kev

    Membre occasionnel

  • Membres
  • Pip
  • 108 messages

Posté 02 juin 2020 - 10:12

Merci, ca a vraiment aidé! Au final je suis resté assez fidèle à votre suggestion :

 

conv2d(None, ..., ..., 16) kernel=3 stride=2

conv2d(None, ..., ..., 16) kernel=3 stride=2

conv2d(None, ..., ..., 32) kernel=3 stride=2

Dense(128)

Dense(32)

Dense(10)

Le modèle est assez sensilble aux variations d'éclairage, j'imagine que cela vient du fait que l'éclairage de mes images d'apprentissage est relativement similaire .

Le fait de ne pas avoir d'action graduelle sur le joystick rend le jeu difficile à jouer pour le robot quand la vitesse du cercle est élevée . J'en ai conclu que la classification d'image pour ce genre de problème n'est pas idéale .





Répondre à ce sujet



  



0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users