Sujet de stage Master informatique, 2006-2007

LEAR propose un ou deux stages sur le logiciel PhotoMole pour des étudiants en master (a priori DEA, 2e année de master ou 3e année d'école d'ingénieur). Les thèmes ont soit une dominante traitement d'images/vision, soit une dominante système/optimisation algorithmique, et le compromis recherche/programmation peut être ajusté selon le goût du/des candidat(s) :

  1. optimisation d'algorithmes de recherche. L'algorithme utilisé actuellement est basé sur un KD-Tree, mais de nombreuses alternatives existent (voir par exemple cet article). Il s'agit de remplacer la structure d'indexation, et de la comparer à la méthode actuelle en termes de vitesse, d'occupation mémoire et de précision. Ce sujet est à dominante mathématique. En fonction de l'avancement du stage et de la curiosité du stagiaire, d'autres technniques peuvent être envisagées.
  2. descripteurs globaux. Le logiciel n'utilise que des descripteurs locaux sur des images, réduites en niveaux de gris. Une approche plus classique est de calculer des descripteurs globaux (comme des histogrammes, voir cet article) sur les images. Pourrait-on combiner les avantages des deux approches pour améliorer la pertinence des résultats de la recherche ? Ce sujet est à dominante informatique, puisqu'il s'agit d'implémenter des techniques bien connues. Le stagiaire développera un «feeling» sur ce qui est pertinent ou efficace dans le traitement de certains types d'images. Un question plus ouverte est : peut-on définir une «distance» entre images qui caractériserait leurs ressemblance de manière satisfaisante pour un humain ?
  3. optimisation de bas niveau. Les images et les descripteurs sont codées en flottants 64-bits, il y a des milliers de recherches séquentielles par seconde, des données rarement utilisées sont stockées en RAM,... De quoi donner la chair de poule à un programmeur spartiate. Dont la contribution est bien sûr bienvenue ! Le travail consiste à évaluer rationnellement où le logiciel gaspille le plus de temps et d'espace mémoire, et où sont les marges d'amélioration; ensuite, il s'agit de reprogrammer ces parties en prenant garde à ne pas dégrader la qualité des résultats. Les amélorations potentielles sont d'ordre algorithmique (structures de données et algorithmes plus efficaces), et d'implémentation (compactage et stockage sur le disque des données, parallélisation par threads, SIMD, voire utilisation de GPU). Les documents de référence sont de ce genre.

Le stagiaire connaîtra le langage C++ (ou C + la capacité d'absorber un nouveau langage rapidement), et s'intègrera dans un grand corpus de code existant. Il aura du goût pour la programmation tant théorique (évaluation de complexité, notions de hiérarchie mémoire) que pratique (structuration et factorisation du code, etc.). Il travaillera sous Linux, donc un minimum d'autonomie dans cet environnement est nécessaire.

Le stage sera encadré par un ingénieur et un chercheur de l'équipe. Les collègues de travail sont jeunes, internationaux et un poil stakhanovistes. Un tandem de stagiaires serait encouragé. La rémunération est de 300 euro/mois environ.