Exemple de page de projet polycompétence imagerie (Polytech)

Titre du projet

Nom, Prénom des étudiants

Introduction

Ce projet concerne ......

Présentation de la méthode 

 

Expérimentations

Les expérimentation ont été réalisées sur plusieurs vidéos ....

La vidéo 1 montre un exemple de résultat 

Vidéo 1 : exemple de fonctionnement de la méthode

Conclusion et perspectives

Bibliographie

 

Alexandre Moulinet & Elie Yelmo

 

Suivi d’objets par la méthode KCF

(Kernelized Correlation Filters)

 

Introduction

 

Aujourd’hui, il existe beaucoup de méthodes de tracking (MIL, MOSSE, TLD, Struck …) qui présentent des capacités de tracking intéressantes. Mais toutes ses méthodes utilisent des classifieurs qui sont formés de plusieurs correctifs pour une seule et unique image. De ce fait, les matrices de données présentent une redondance extrêmement élevée et donc, que les processeurs qui font tourner ses algorithmes effectuent du travail non-nécessaire. Pour éviter ces calculs inutiles, des chercheurs de l’Université de Coimbra (João F. Henriques, Rui Caseiro, Pedro Martins, et Jorge Batista) ont mis au point un algorithme simple et efficace pour effectuer du tracking : la méthode KCF (Kernelized Correlation Filters).

 

I. Principe de la méthode KCF

 

Cette méthode repose principalement sur une idée nouvelle qui a été introduite durant les recherches sur l’application de cette méthode. Cette idée est que la matrice noyau peut être considérée comme circulante. Si on considère un vecteur n*1, alors la matrice circulante est une matrice n*n où la 2ème ligne est égale à la 1ère ligne sauf que l’élément de la colonne 1 est xn et donc x1,x2,… se retrouve décalés sur les colonnes de droite ; et ainsi de suite jusqu’à la dernière ligne.

 

Figure 1 : Matrice circulante

Figure 2 : Matrice circulante avec pixels

Sur ces matrices circulantes et sous certaines conditions, les manipulations algébriques sont simples à effectuer et peuvent donc être transformée dans le domaine de Fourier.

 

Figure 3 : Différentes opérations algébriques réalisable et transposable dans le domaine de Fourier

Grâce à cela, on va pouvoir appliquer différentes phases de calculs (Figure 4) qui seront exécutées simultanément pour obtenir la translation d'un motif de l'image précédente avec limage actuelle.
 

Figure 4 : Différents calculs pour obtenir la translation d’une image


Finalement, cette technique fonctionne bien dans beaucoup de cas, elle peut se montrer plus puissante que les autres techniques actuelles, elle peut utiliser différents noyau (Linéaire, Polynomial, Gaussien…) et du fait de son algorithme plutôt simple, celui-ci est applicable pour des vidéos allant jusqu’à 400 FPS.
 

Figure 5 : Un exemple comparatif de la méthode KCF avec d’autres méthodes connues de tracking

 

   II. Application de la méthode KCF

Pour appliquer cette méthode, on utilise l’exemple de code C++ inclus dans le module tracking de la librairie OpenCV.Après avoir modifié le code pour que l’application puisse accéder à la webcam et avoir compilé le code, il suffit de tracer un rectangle pour choisir l’objet à suivre :

 

 Figure 6 : Sélection de la fenêtre pour l’objet à suivre 

Après avoir choisi la fenêtre de l’objet à suivre, on se rend compte que la fenêtre suit plutôt bien si l’objet ne sort pas du cadre de la fenêtre :

 

Figure 7 : Démonstration de la fenêtre suivant l’objet

On peut introduire des objets qui vont cacher l’objet à suivre mais si on en cache pas de trop, le fenêtre arrive toujours à suivre l’objet :

 

Figure 8 : Démonstration de la fenêtre suivant l’objet à moitié caché

 

Si l’on passe très rapidement un objet devant l’objet à suivre, cela à tendance à ne pas déstabiliser la poursuite de l’objet à suivre.

Par contre, si l’on cache l’objet à suivre totalement puis en le découvrant ensuite, alors le cadre va suivre plutôt l’objet qui cache l’objet à suivre plutôt que ce dernier :

Figure 9 : Démonstration de la fenêtre ne suivant plus l’objet à suivre

  

 

     III. Utilisation de la librairie OpenCV permettant le tracking d'objet par la méthode KCF sur des échantillons vidéo

Pour avoir un meilleur aperçu de l'utilisation de la méthode KCF, on a réalisé d'autres tests sur des vidéos montrant des cas réel de la vie quotidienne tel que le tracking d'un véhicule ou le suivi d'une personne.

 

Tracking d'une personne:

Dans cette vidéo, la personne selectionnée est bien suivie mais lorsqu'elle sort du cadre de la vidéo, le cadre reste sur l'extrémité de la vidéo. On note également que lorsqu'une nouvelle personne entre dans le cadre de la vidéo, celle-ci n'est pas suivie puisqu'on ne l'as pas selectionnée.

 

Tracking d'un véhicule:

 

Dans cette vidéo, on observe que la voiture sélectionnée est bien suivie mais comme la voiture ne reste jamais à la même distance de la caméra, alors le cadre d'origine qui était plus petit que la voiture, devient plus grand que la voiture. Cette méthode n'inclus pas encore de rescaling.

 

Tracking de Mister Been:

 

Dans cette vidéo, alors que Mister Been bouge assez rapidement, l'application de la méthode KCF arrive toujours à suivre la tête.

     Conclusion

Cette méthode récente est un cas intéressant à mettre en place puisqu’il n’existe pas énormément d’application de cette méthode. Ainsi, on pourra observer les limites de cette méthode lorsque l’on cherche à tracker un objet qui pourra être caché partiellement ou sur du multitracking. On peut ajouter que le rescaling et que la détection d'objets à suivre ne s'effectue pas. L’intérêt de cette méthode est que l’algorithme est assez léger et donc peut être implémentée sur des cible embarqué pour des vidéos contenant plus de 25/30 images par secondes.

 

 

 

Détection de panneaux de signalisation avec Caffe

 

Introduction

De nos jours, nous cherchons de plus en plus à rendre les systèmes électroniques et informatiques autonome et intelligent dans le but de concevoir des robots compagnons, des caméras intelligentes ou des véhicules sans conducteurs par exemple. Ce travail est souvent lourd et complexe mais l'apparition des premiers réseaux de neurones ont permis d'apporter de nouvelles solutions et possibilités à ces problématiques d'autonomie et d'intelligence. Parmi celle-ci, nous nous somme intéressés à la détection de panneaux de signalisation, utile pour les véhicules autonomes, à l'aide d'un Framework nommé Caffe.

Caffe est un système de deep learning rapide et modulable développé par le Centre de Vision et d’apprentissage de Berkeley (BVLC) en Californie avec la contribution de sa communauté. Il peut s’exécuter à la fois sur CPU et sur GPU en ne changeant qu’un seul paramètre. Il est capable de traiter plus de 60 millions d’images par jour pour un seul GPU NVIDIA K40, ce qui veut dire 1ms/image pour la déduction et 4ms/image pour l’apprentissage. Dans ce projet, nous nous servons de Caffe pour faire l'apprentissage des panneaux de signalisation au réseau de neurones, puis de la détection et caractérisation de ses panneaux sur différentes images.

 

Preparation

Pour faire l'apprentissage de nos panneaux de signalisation, nous avons tout d'abord besoin de préparer nos données. Pour ce faire, nous avons besoin de créer deux dossier, un nommée "train" par exemple où nous placerons nos images d'entraînement et l'autre "val" où nous mettrons nos images de validations. Chaque image doit avoir l'extension ".JPEG" pour être utilisé par les scripts de Caffe que nous utiliserons ultérieurement. Pour changer rapidement l'extension de vos images, vous pouvez utiliser certaines commandes dans un terminal couplée avec des expressions régulières pour changer toutes les extension en une seule commande sans modifier le nom de l'image.

Ex : rename 's/ppm/JPEG/' *        // renomme ppm par JPEG pour tous les fichiers du dossier courant

Une fois nos fichiers avec la bonne extension, il faut les lister dans un fichier train.txt pour les images d'entraînement et dans un fichier val.txt pour les images de validation. Pour éviter d'avoir à écrire à la main tous les noms d'images dans ces deux fichiers, il existe des commandes qui le font automatiquement.

Fichier listant toutes les images d'entrainement

Fichier listant toutes les images de validation

Pour éviter d'avoir à trop modifier les scripts de Caffe, placez ces deux fichiers dans le dossier data/ilsvrc12 de la racine de Caffe. Maintenant nos données sont prêtes, mais ils nous faudra modifier quelque peu certains scripts avant de lancer l'entraînement.

 

Entraînement

Pour commencer, il nous faut lancer le script "create_imagenet.sh" dans le dossier "examples/imagenet" à la racine de Caffe. Mais pour que l'execution fonctionne sans erreur, nous devons modifier quelques lignes de ce script comme suit :

- à la ligne "TRAIN_DATA_ROOT=" remplacer le chemin d'accès par celui où se trouve vos images d'entrainement

- à la ligne "VAL_DATA_ROOT=" remplacer le chemin d'accès par celui où se trouve vos images de validation

- à la ligne "RESIZE=" remplacer false par true pour que Caffe redimensionne automatiquement vos images

Modification du script

Enregistrer et exécuter le script. Les dossiers "examples/imagenet/ilsvrc12_train_leveldb" et "examples/imagenet/ilsvrc12_val_leveldb" seront créés à la suite de ce script. Si ces deux dossiers existaient déjà avant l'exécution de "create_imagenet.sh", le script retournera une erreur, il vous suffira donc de supprimer ces dossier et de relancer l'exécution.

Ensuite, il faut lancer le script "make_imagenet_mean.sh" qui créera un fichier "imagenet_mean.binaryproto" dans le dossier data/ilsvrc12 à la racine de Caffe. La phase de préparation est ainsi terminé, il ne reste plus qu'à lancer la commande suivante pour lancer l'entraînement du réseau de neuronnes :

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt

Execution de l'entraînement

Pour des raisons encore inconnues, notre exécution reste figée à l'itération 0...

 

Détection

Une fois le réseau entraîné, ils nous ai possible de détecter et différencier les différents panneaux de signalisation. Pour ce faire, il suffit de suivre ce tutoriel "http://nbviewer.jupyter.org/github/BVLC/caffe/blob/master/examples/00-classification.ipynb" ou le précédent rapport remis.