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) :
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.
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 ?
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.