Vous êtes ici : Home > Fiches Techniques > Calibration de caméra par réseau de neurones

CALIBRATION DE CAMERA PAR RESEAU DE NEURONES

Pour la coupe 2003, nous avions une caméra embarquée sur le robot. Le but était de trouver la position des palets sur le terrain. Une fois le traitement d'image fait, nous avions les coordonnées des palets dans l'image. Mais comment retrouver les coordonnées de ses palets sur la table ? Bien sur, on aurait pu faire des calculs complexes avec des cosinus. Mais on est pas comme ça à l'ancr . Alors, on a utiliser un réseau de neurones pour calibrer la caméra.
 
oLa série d'exemple
 

Pour pouvoir utiliser un réseau de neurones, il faut commencer par disposer d'une série d'exemple que le réseau devra apprendre. Alors, j'ai placé une trentaine de marqueurs dans le champ de vision de la caméra. La position relative des marqueurs est connue par rapport au robot (l'origine du repère est le centre des l'axe des roues). Nous avons donc notre série d'exemple à faire apprendre : l'entrée du réseau est composée des coordonnées des marqueurs dans l'image, la sortie doit donner la position des marqueurs par rapport au robot.

Pour plus de clarté dans la suite des explications, nous allons définir quelques variables :

  • Xi : absice d'u point dans l'image
  • Yi : ordonnée d'un point dans l'image
  • X : absice d'un point dans le repére robot
  • Y : ordonnée d'un point dans le repère robot
  • Ox : abscice estimée par le réseau
  • Oy : ordonnée estimée par le réseau
  • Exi : entrée i du réseau modélisant X
  • Eyi : entrée i du réseau modélisant Y
  • Wxi : poid i du réseau modélisant X
  • Wyi : poid i du réseau modélisant Y
 
oArchiteture du réseau
 

 

Nous savons que la relation qui lie les coordonnées dans l'image et la position relative n'est pas linéaire. La théorie voudrait que l'on utilise un réseau de neurones avec une couche cachée et un apprentissage de type : Backpropagation. Mais plûtot que d'utiliser cette méthode lourde à programmer, nous avons trouvé une petite astuce : au lieu d'appliquer à l'entrée du réseau les coordonnée Xi et Yi du marqueur dans l'image, nous avons rajouté des termes qui sont des fonctions de Xi et Yi. Nous avons donc utilisé deux réseaux :

  • Un pour déterminer les coordonnées X

  • Un pour déterminer les coordonnées Y

Comme l'apprentissage sur l'image entière donnait une erreur moyenne sur l'ensemble de l'image. Or dans le cadre de la coupe, nous voulions avoir une bonne précision pour les palets proches du robot, et juste une direction à suivre pour les palets les plus éloignés. Alors, nous avons coupé l'image en deux. Un apprentissage a été réalisé pour les points proches du robot (Yi>100) et un second pour les points les plus éloignés (Yi<=100).

 
oApprentissage
 

L'apprentissage a été fait sous Matlab. Il a fallu 100000 cycles pour faire converger le réseau. Voici l'algorithme :

Algorithme d'apprentissage

Répéter 100000 fois

Choisir aléatoirement un point (Xi,Yi) et sa corespondance (X,Y)
Calculer les coordonnées estimées par le réseau (Ox,Oy)
Mettre à jour les réseaux selon la loi suivante :
Fin

Eta est le coefficient d'apprentissage. Choisir une valeur trés faible pour éta permet d'assurer la convergence de l'algorithme. Ici

eta=0.000001; (pour le réseau X)
eta=0.000005; (pour le réseau Y)

 
oRésultats
 

Une fois l'apprentissage réalisé, voici les résultats que nous avons obtenu, pour x :

et pour Y:

On distingue clairement sur la première image la jonction à Yi=100. Alors que la jonction est quasi parfaite dans la seconde image. Nous avons également observé la précision des résultats, sur l'image suivante, les croix bleues représentent les points ayant servis à l'apprentissage, et les ronds magentas les points soumis à l'entrée du réseau et interpollés. Grace au quadrillage de la table de la coupe 2003, nous avons pu comparer la position calculée du palet et la position réelle, l'erreur était au maximum de 5 cm.

 
oQuelques liens
 
 
oContact
 
Pour toutes questions envoyer moi un mail: Sinclair