Table des matières

Sujets de projet, automne 2017


Introduction

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.

MM1. Amélioration de contraste d'images

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 :

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

MM2. Contribution à un logiciel libre

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 :

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.

AM1. Animation de fluide par système de particules

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.

AM2. Visage humain : reconnaissance, interaction, animation

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.

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

AM3. Exploration des capacités des réseaux de neurones (Deep Learning) à classifier, des images ou tout type de données, et/ou à prédire

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.

RC1. Valorisation de données open data par une interface géographique

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.

RC2. Guide d’alimentation assisté par le data mining

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 :

Quelques remarques par rapport au travail attendu :

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, …)

RC3. Analyse de l’évolution de réseaux sociaux

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

FR1. Classification par arbre de décision et forêt aléatoire

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.

FR2. Compression d'image par ACP

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.

FR3. Mise en place d'un serveur Foreman/Puppet

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

FR4. Mise en place d'un site web

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 :