projet:sujets2017automne

Sujets de projet, automne 2017


Le but de ces projets est de vous initier à la programmation mathématique. Chaque sujet contient un exemple de résolution mathématique. Cela signifie que vous devez programmer des solutions à ces problèmes et (sauf mention contraire) vous ne devez pas utiliser de librairie qui implémente les solutions standards.

Tous les projets demandent de faire un programme avec un minimum de caractéristiques pour avoir la moyenne. Chacun propose une série d'améliorations possibles qui permettront d'augmenter la note. Il faut utiliser l'un des 3 langages principalement enseignés en licence : C, C++ ou Java. Ces programmes doivent pouvoir compiler et être exécutes sur les ordinateurs de l'université, et le rendu devra contenir toutes les librairies nécessaires. Ils devront contenir un moyen simple de compiler les programmes ainsi qu'une petite documentation.

Techniques Manipulation d'images (matrices), interface graphique
Responsable du sujet
Matthieu Moy
Informations à voir
Sujet et consignes détaillés

La photo numérique ouvre beaucoup de possibilités en terme de post-traitement d'image. Nous nous intéresserons ici à la gestion du contraste, avec plusieurs familles de traitements :

  • La base : ajustement du contraste global. Il s'agit simplement d'appliquer une fonction affine à chaque pixel.
  • Gestion des ombres et lumières : rehausser les parties sombres de l'image, assombrir les parties surexposées.
  • Gestion du contraste local : faire ressortir les détails (les contours par exemple) sans modifier le contraste global

Le sujet est très libre, et pourra explorer plusieurs (mais pas forcément toutes) des pistes suivantes :

  • Prototypage d'une solution en utilisant Python et les bibliothèques skimage, NumPy et SciPy.
  • Développement des algorithmes en C++ (ou éventuellement C).
  • Optimisations de performances (éviter de refaire plusieurs fois le même calcul, optimiser l'ordre de parcours des matrices pour limiter les défauts de cache), parallélisation.
  • Interface graphique pour rendre le résultat agréable à utiliser par un utilisateur non-informaticien.
Techniques Génie logiciel, gestion de version
Responsable du sujet
Matthieu Moy
Informations à voir
Sujet et consignes détaillés

Le but du projet est de participer à un projet « de la vraie vie » (un logiciel activement développé, ayant déjà un bon nombre d'utilisateurs, …). Un bon moyen d'atteindre cet objectif est de contribuer à un logiciel libre.

Contribuer à un logiciel libre est en particulier un bon moyen d'aborder sur des cas réels les questions comme :

  • La revue de code par des tiers,
  • L'utilisation poussée d'un gestionnaire de versions,
  • L'application stricte de styles de codage,
  • Les tests automatisés,
  • L'utilisation des mailing-lists comme outil de communication et d'entre-aide.

Un effet de bord intéressant est qu'avoir du code à soi dans un projet libre permet de briller en société ;-).

Voir le sujet détaillé pour plus d'informations.

Domaines Synthèse d'images
Techniques et langages Animation de particules. C++ (ou éventuellement WebGL)
Responsable du sujet
Alexandre Meyer
Informations à voir
Un article compréhensible ; TP système de particules de 1ère année en 2D dans l'UE LIFAMI.

L'animation de fluide (liquide, gaz) est un problème complet en synthèse d'images comportant 3 aspects qui pourront être abordés par les 3 développeurs : * animation suivant des équations précises (mais restant relativement simple avec les approximations classiques), * algorithmique avec un choix de structures de données accélératrice adéquates, * rendu pour avoir un affichage réaliste.

  • La base : produire une animation de fluide cohérente avec un affichage d'une sphères pour chaque particules. Vous pouvez vous aider d'un TP fait maintenant en 1ère année en 2D dans l'UE LIFAMI.
  • Rendu/Affichage en utilisant gKit2Light pour l'affichage (C++/OpenGL du cours de L2 LIFGRAPHIQUE).
  • Analyser les performances, comprendre où se trouve le goulot d'étranglement des performances (rendu, équations, voisinage)
  • Optimisations de performances pour la tâche de recherche des voisins (si SPH) ou pour le splatting (si PIC/flip)
Domaines Synthèse d'images et IA (machine learning)
Techniques Détection de visage/points, classification.
Langages C++ ou Python ou un mélange des deux
Responsable du sujet
Alexandre Meyer
Informations à voir
DLib détection de visages et de points caractéristiques ; Exemple en Python

Les outils de vision et de synthèse d'images travaillant sur le visage deviennent assez rependus et simple d'utilisations pour être capable de coder des applications qui semblaient encore impressionnantes il y a quelques années.

  • La détection du visage et de ses points caractéristiques peut se faire avec DLib (C++ ou python)

A partir de là, le sujet peut prendre plusieurs directions :

  • L'animation d'un visage 3D à partir des points capturés sur le visage filmé par un webcam.
  • Le pilotage d'un dispositif en bougeant son visage : par exemple piloter la souris, clin d'oeil=clique, lier les mouvements de tête/souris, etc.
  • La classification (avec Dlib ou autres) pour reconnaitre un sourire ou non. L'apprentissage se fera à partir d'une base données d'images comportant les labels “sourire” ou “pas de sourire”.
  • La base : afficher la vidéo d'une webcam détectant les points caractéristiques d'un visage (avec Dlib). Produire quelques choses ces points : soit une détection, soit une animation, soit un pilotage.
Domaines IA (machine learning) et Image
Techniques Réseaux de neurones
Langages Plutôt Python
Responsable du sujet
Alexandre Meyer
Informations à voir Keras, surcouche des plateformes de deep learning classique (Tensorflow, CNTK, Theano

Les plateformes open source de deep learning de Google (TensorFlow), Facebook (Theano), Microsoft (CNTK) ou Keras rendent l'utilisation des réseaux de neurone facile d'utilisation pour faire de l'apprentissage : soit de la classification, soit de la prédiction. A partir de données réelles le réseau peut “apprendre” pour ensuite être capable de traiter de nouvelles données.

Pour ce sujet on pourra par exemple explorer la capacité de ces réseaux à classifier des images (mais le sujet reste ouvert à la motivation de chacun). A partir de N images représentant un chat (label 1), et de M images représentant tout sauf un chat (label 0), il s'agira de faire apprendre au réseau le label associé à une image. Avec des plateforme comme TensorFlow ce type de tâche peut s'écrire avec un programme d'une centaine de lignes en python. La communauté est grande et les exemples sur internet sont nombreux. La problématique pour ce sujet sera beaucoup de comprendre les mécanismes et les outils.

La base : faire un réseau qui classifie des données (pas forcément des images). Dans un 2e temps, vous chercherez à classifier des images. Le sujet pourra ensuite s'ouvrir sur d'autres types de problème et donc de forme de réseaux.

Domaines Data Science, IHM, Open data
Techniques Développement d'interface web
Langages Langage web (visu, javascript), Langage libre (Collecte, traitement)
Responsable du sujet
Rémy Cazabet
Informations à voir
Plus de détails sur les sujets : http://cazabetremy.fr/LIFPROJET.html

De nombreux organismes publics et entreprises offrent des données en open data, donc librement accessibles par tous. Ces données offrent une mise d’information, qui est inexploitable par les citoyens sous leur forme “brute” (des fichiers textes), mais qui peuvent être valorisés par une interface appropriée. Si la valorisation prend la forme d’un site web, ces données peuvent être mises à la disposition de tous les citoyens, qui peuvent y trouver des informations utiles pour eux.

Ce projet peut se décomposer en 3 parties: 1) Collecte de données. A partir d’une ou de plusieurs plates-formes d’open data, vous récupérerez des données géographiques, telles que l’emplacement de lieux d’intérêt, de voies ou de zones. 2)Traitement des données. Les données réelles ne sont souvent pas utilisables en l'état: elles sont bruitée (erreurs…), incomplètes, et dans des formats différents, voire inappropriés. Vous nettoierez les données et formerez une base de données (qui peut être un gros fichier texte ou la structure de votre choix) propre. 3)Restitution des données. Vous développerez une visualisation, de préférence avec des outils du web, adaptée à l’exploration et l’exploitation de ces données, c’est à dire conçue pour que le “grand public“ puisse en tirer partie. L’interface doit être très simple mais efficace (pas des centaines de boutons et de curseurs, mais plutôt une carte, un champ de recherche et une interaction simple à base de symboles)

Ce projet est orienté visualisation, c’est sur cet aspect que l’équipe va particulièrement travailler. Sites d'open data (liste non exhaustive)

Exemple de librairies à utiliser :

Toutes les étapes peuvent être faites dans le langage de votre choix.

Domaines Data Science, IHM
Techniques Clustering, ACP
Langages Python conseillé (n'ayez pas peur)
Responsable du sujet
Rémy Cazabet
Informations à voir
Plus de détails sur les sujets : http://cazabetremy.fr/LIFPROJET.html

La plateforme open data “open food fact” recense des informations nutritionnelles et autres sur des aliments disponibles dans le commerce. La base de données est importante (350.000 produits en Septembre 2017), mais comme la plupart des données réelles, elle est bruitée et incomplète. Votre objectif sera de développer un guide interactif permettant à un utilisateur de comparer des produits au niveau de leurs caractéristiques connues. Au moins deux fonctionnalités sont attendues, faisant intervenir des outils de base du data mining :

  • À partir d’un produit choisi par l’utilisateur (ex: compote de pomme de la marque X …), proposer un ensemble de produits similaires que l’utilisateur pourra comparer (outil data mining : clustering, notion de distance)
  • Pour un groupe de produits (ex: les compotes, les produits laitiers, les gateaux au chocolat, …), proposer une visualisation graphique de type “cartographie”, c’est à dire où chaque produit apparait comme un point (ou une image…) sur un “espace” (un carré, un cercle…), et la position des produits est calculée automatiquement en fonction de leurs ressemblances en termes de propriétés (glucose, vitamines, additifs…). Il s’agit d’une application classique d’outils de type analyse en composante principale.

Quelques remarques par rapport au travail attendu :

  • Bien que le langage soit libre, je vous incite fortement à utiliser Python. Si vous ne le connaissez pas, ça n’est pas du tout grave, c’est un language qui reprend les codes du C/JAVA, mais avec de nombreuses fonctionnalisés de haut niveau pour l’analyse de données
  • Il ne vous sera pas demandé de coder les algorithmes de data mining utilisés. Il existe d’excellentes libraires bien documentées et faciles d’utilisation pour ce faire.

Selon votre intérêt, vous pourrez passer plus de temps à travailler sur la partie collecte des données (récupération automatique des mises à jour de la base…), traitement des données (Quels algorithmes utiliser, optimisation selon les données à afficher, etc…), ou visualisation (intéractive, options de filtrages, …)

Domaines Data Science, Network science
Techniques Analyse de réseaux
Langages Libre, Python recommandé (N'ayez pas peur)
Responsable du sujet
Rémy Cazabet
Informations à voir
Plus de détails sur les sujets : http://cazabetremy.fr/LIFPROJET.html

L’analyse de réseaux sociaux est un domaine de l’analyse de données (data science..) ayant de nombreuses applications. Il s’agit de modéliser des individus/acteurs (nœuds) et leurs relations/interactions (liens) sous forme d’une graphe, et d’étudier la structure du graphe pour comprendre le rôle des individus et leur organisation. L’une des problématiques intéressantes en ce moment est la question de l’évolution de ces réseaux sociaux, c’est à dire étudier comment ils changent au cours du temps. Je vous propose de développer un outil simple permettant d’étudier cette évolution au cours du temps. Je vous propose en particulier de travailler sur 2 axes :

1)Suivi de l’évolution de propriétés au cours du temps. Il existe de nombreuses libraries, en Java, Python, R, et C (au moins), permettant de calculer de nombreux indicateurs bien connus sur des graphes STATIQUES. Vous utiliserez ces outils pour calculer l’évolution de ces indicateurs au cours du temps, ce qui peut poser des questions intéressantes sur lesquelles il faudra réfléchir (fenêtre d’aggrégation, etc…)

2)Visualisation de l’évolution du graphe. Il existe également de nombreux outils en tous languages pour visualiser des graphes STATIQUES, et quelques outils dans certains languages pour visualiser des graphes dynamiques. Vous proposerez une visualisation de l’évolution du réseaux dynamique permettant de visualiser l’évolution des indicateurs calculée dans l’étape précédente.

Pour travailler sur un cas concret, je vous fournirez les jeux de données correspondant à l’évolution des réseaux sociaux des personnages de 2 séries télé (Trône de fer et House of Cards).

Techniques Classification, statistiques
Responsable du sujet
Fabien Rico
Informations à voir
Ensembles de cours datamining (cf *Arbre de décision* et *Random Forest*)

Le but de votre projet est d'implémenter un algorithme classique de construction d'une forêt.

Pour cela il faut :

  1. implémenter la construction d'un arbre de décision à partir d'un jeu de données d'exemples;
  2. implémenter un système permettant de générer un grand nombre d'arbres de décision;
  3. mettre en place un système de test permettant de mesurer la qualité de vos algorithmes.

Votre logiciel devra être capable à partir d'un fichier d'exemple dans un format simple (CSV) de construire un modèle. Puis à partir d'un modèle et d'un fichier de test dans le même format de trouver les classes des objets.

Améliorations

Les améliorations possibles de votre travail pouront porter sur les différentes optimisations ou adaptations de l'algorithme à des cas spécifiques, sur l'amélioration du temps temps de calcul et du coût mémoire de votre programme. Vous pourrez aussi ajouter des prétraitements pour résoudre les cas ou les données sont lacunaires ou ajouter une interface graphique au programme.

Techniques calcul de valeur propres, compression
Responsable du sujet
Fabien Rico
Information à voir
Description détaillée

On cherche ici à implémenter un algorithme de compression d'image avec perte (comme jpeg). L'image que l'on utilise (ou une partie de celle-ci) peut être vue comme une matrice. On peut utiliser sur cette matrice des techniques de réduction de dimension, c'est à dire obtenir une matrice de dimension plus petite qui contient l'essentielle de l'information de départ. C'est le rôle de l'analyse en composante principale (PCA). A partir de cette matrice plus petite (compréssée), on peut reconstruire l'image de départ avec quelques déformations dépendant du taux de compression utilisé.

Votre programme devra être capable de lire une image sous un format simple (sans perte), et produire un fichier compressé. Il devra bien sur permettre d'appliquer le traitement inverse.

Améliorations

Pour améliorer ce dernier vous pourrez :

  1. ajouter une interface graphique;
  2. mettre en place un système de comparaison avec la représentation jpeg;
  3. améliorer le temps de calcule et le cout mémoire de votre programme.
Techniques administration système
Responsable du sujet
Fabien Rico
Information à voir
https://theforeman.org/manuals/1.15/index.html
https://puppet.com/

Foreman est un serveur capable d'installer le système d'exploitation d'une machine, Puppet est un serveur agissant sur une machine disposant d'un système de base et capable de vérifier et modifier les configurations de cette dernière. Les deux services ensemble permettent d'administrer un parc de machines virtuelles ou non.

Vous devez mettre en place un système proposant ces deux services et capable d'installer 3 distribution linux différentes (debian/ubuntu, centos, …) sur des machines virtuelles. Les machines devront être installée avec un système de base, un utilisateur, un ensemble de paquets à définir avec votre encadrant.

Améliorations
  • liaison avec différents sytème d'hyperviseur (esxi, openstack …)
  • installation de windows
  • installation de machines physiques (il faut disposer d'un ordinateur sous linux avec une carte réseau).
Techniques administration système et web
Responsable du sujet
Fabien Rico
Information à voir

Le but de ce sujet est de mettre en place un site web avec une partie visible (front) et une partie d'administration (backend). Le sujet du site est encore indéterminé (et des idées sont les bienvenues). Il ne devra comporter une part de programmation important (ne pas uniquement installer un CMS). Il devra comporter un système de gestion des utilisateur, des droits, de modification du front…

Le langage de programmation est laissé libre, mais le site se basera sur la technologie des docker pour être mis en place de manière simplifiée.

Amélioration

Selon la difficulté technique de certaines parties du site :

  • authentification web basée sur openid connect;
  • lien avec les réseaux sociaux
  • projet/sujets2017automne.txt
  • Dernière modification : 2018/01/21 21:57
  • de fabien.rico