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 :
Le sujet est très libre, et pourra explorer plusieurs (mais pas forcément toutes) des pistes suivantes :
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.
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.
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 :
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 :
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, …)
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 :
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.
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.
Pour améliorer ce dernier vous pourrez :
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.
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.
Selon la difficulté technique de certaines parties du site :