projet:2020:pri:sujet

Domaines Data science, Data Mining , IA, data visualization…
Librairies (proposées) scikit-learn, seaborn, bokeh, etc.
Langages (proposé) Python, javascript, html/css, etc.
Responsable du sujet Rémy Cazabet
Informations à voir http://cazabetremy.fr/Teaching/LIFPROJET.html

Le principe de ce projet est de 1) Choisir une source de données accessible (open data, data crawling, etc), de collecter ces données, les analyser, et construire un “explorable” permettant à n'importe qui d'explorer ces données de manière interactive. Vous êtes libre de choisir les données qui vous intéresse (sport, politique, réseaux sociaux, économie, environnement, sécurité, culture, etc.), et nous discuterons des analyses que nous pouvons en faire (restitution sous forme de cartes, de réseaux/graphes, de graphiques interactifs, sous forme de site-web ou non, etc.). Si vous ne savez pas quelles données existent ou non, partez du principe que tout existe, et nous chercherons ensemble ce qui est effectivement accessible. Vous pouvez consulter quelques projets précédents sur ma page http://cazabetremy.fr/Teaching/StudentsProduction.html .

Domaines IA, Machine Learning, Data Science, Réseaux de neurones, data visualization…
Librairies (proposées) scikit-learn, tensor-flow, keras, pyTorch, etc.
Langages (proposé) Python
Responsable du sujet Rémy Cazabet
Informations à voir http://cazabetremy.fr/Teaching/LIFPROJET.html

Le principe de ce projet est de 1) Choisir une source de données accessible (open data, data crawling, etc), puis utiliser un framework d'apprentissage auomatique (Machine Learning/IA) de manière à résoudre l'une des tâches classiques du domaine: 1)Prédire de futurs résultats (regression, supervisé), 2)Reconnaître une “classe” d'objet (classification, supervisé), 3)Découvrir automatiquement comment les données sont organisées (non supervisé, clustering). Vous serez libre de choisir les données qui vous intéresse (sport, politique, réseaux sociaux, économie, environnement, sécurité, culture, etc.), et nous discuterons de ce qu'il est possible d'en faire. Si vous ne savez pas quelles données existent ou non, partez du principe que tout existe, et nous chercherons ensemble ce qui est effectivement accessible. Tous types de données peuvent être analysés: textes, valeurs numériques, images, etc. Vous pouvez consulter quelques projets précédents sur ma page http://cazabetremy.fr/Teaching/StudentsProduction.html.

Domaines Machine Learning (“Intelligence Artificielle”)
Librairies (proposées) scikit-learn, keras, tensor-flow…
Langages (proposé) Python, autre
Responsable du sujet Rémy Cazabet
Informations à voir Challenges Kaggle en cours

Kaggle est le site web le plus connu de challenges en machine learning. En 2 mots: des entreprises proposent des challenges auxquels n'importe qui peut tenter de proposer une solution. La meilleure solution gagne. Mais là où Kaggle est particulièrement intéressant, c'est qu'il propose des tutoriels pour résoudre certains problèmes classiques, en utilisant différentes méthodes. Votre objectif: 1) Suivre un/des tutoriels pour résoudre un problème tout fait, 2)Choisir un challenge en cours et appliquer ce que vous avez appris

Domaines Data visualisation, Site Web, Data Mining
Librairies Bootstrap
Langages (proposé) javascript/html/css, python (analyse/nettoyage données)
Responsable du sujet Rémy Cazabet
Informations à voir -

Une commercante en Vin (https://www.facebook.com/atoutvins/) a une base de données (Excel) avec les informations de ses clients et des crus qu'elle représente. A partir de ces données, vous créerez un site web permettant a des clients (restaurateurs, particuliers, etc.) de visualiser sur une carte les vins représentés, de pouvoir chercher par information (cépage, couleur…), d'accéder aux sites web des domaines, etc. Vous récupèrerez également des données accessibles en opendata pour enrichir le site (par exemple, proposition d'accord mets-vins).

Domaines Machine Learning (IA), génie logiciel, logiciel libre
Librairies - la votre :)
Langages (proposé) python, interfacage avec du c
Responsable du sujet Rémy Cazabet
Informations à voir http://cazabetremy.fr/Teaching/LIFPROJET.html, https://cdlib.readthedocs.io

CDlib (Community Detection library) https://cdlib.readthedocs.io est une librairie de machine learning, développé en python pour le problème du clustering de graphe, aussi appelé detection de communautés. Elle est pour l’instant développé par 3 chercheurs (dont votre serviteur) au sein du projet européen SoBigData (http://sobigdata.eu/index). Dans le cadre de ce projet, vous pouvez contribuer de différentes manières, notamment en ajoutant un module (visualisation, nouvel algorithme, etc.). Selon votre intérêt et vos compétences, il pourra s’agir d’intégrer des méthodes récentes basées sur les réseaux de neurones, de ré-implémenter des méthodes existantes dont le code ne serait pas disponible ou non-compatible, etc. Une autre manière de contribuer serait d'utiliser la librairie pour effectuer une expérience scientifique (en suivant un protocole standard), ce qui constituerait également une initiation au travail de chercheur.

Une attention particulière sera portée à produire un code propre et standard, (tests unitaires, commentaires adaptés à une génération automatique de documentation, etc.) pour qu’il soit intégré à une libraire de recherche publique. Il s’agit également d’une bonne introduction au machine learning/ intelligence artificielle.

Domaines visualisation de données (dataviz), base de données
Librairies javascript, bootstrap, etc.
Langages (proposé) javascript, SQL/noSQL, etc.
Responsable du sujet Rémy Cazabet
Informations à voir https://www.data.gouv.fr/en/datasets/repertoire-des-logements-locatifs-des-bailleurs-sociaux/

Dans le cadre d'un projet de recherche, la chaire économie du climat (un organisme de recherche) s'intéresse à la rénovation énergétique des logements sociaux. A partir de données publiques, vous développerez un outil de visualization des données, permettant d'explorer à l'échelle d'une ville le parc de logement et ses charactéristiques. Vosu prendrez soin en particulier de prendre en compte la dynamique, c'est à dire les changements entre les données d'une année sur l'autre.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

L’objectif de ce projet est de proposer une modélisation distribuée d’un jeu stratégique. Nous prendrons comme exemple le tactical RPG. Nous considérerons des personnages qui évoluent sur un environnement dynamique. Les personnages appartiennent à plusieurs groupes. Les personnages peuvent se déplacer en même temps selon des règles préétablies. Nous implémenterons une méthode de résolution distribuée avec des entités autonomes dotée de comportements intelligents. Nous commencerons par définir des stratégies de résolution simples dans lesquelles les personnages effectuent des déplacements uniquement sur la base de leur perception. Dans une deuxième étape, nous définirons des stratégies de résolution plus fines permettant aux personnages de construire des stratégies de jeu collectives en interagissant avec leur voisinage. L'étudiant peut avoir acces a une premiere implementation deja realisee.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Les récentes évolutions technologiques des dernières années ont permis d’améliorer le niveau d’équipement des véhicules rendus de plus en plus connectés, voire autonomes, ce qui permet de proposer de nouvelles réponses aux problèmes du trafic urbain. Les véhicules sont, à présent, capables de communiquer et de se coordonner. Avec notre projet, nous proposons une approche de régulation du trafic s’appuyant sur des méthodes distribuées pour améliorer les conditions de mobilité des véhicules.

Dans le cadre ce travail, nous implémenterons la méthode de régulation que nous avons définie à l’échelle de l’intersection tirant parti des capacités de communication des véhicules, et dans laquelle les véhicules autonomes négocient leur droit de passage dans chaque intersection. Cette négociation s’effectue en utilisant des mécanismes prédéfinis en s’appuyant sur les données de mobilité de chaque véhicule et en permettant ainsi de prendre en compte différents critères pour la prise de décision locale, comme l’état général du trafic, la localisation d’éventuelles congestions, ou encore la circulation des bus, les trajets programmés par les véhicules, etc. L'étudiant peut avoir acces a une premiere implementation deja realisee.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Nous allons développer un système automatique pour le partage efficace de tâches entre des drones autonomes capables de collaborer pour l’exploration d’un territoire. Le système doit prendre en compte les contraintes de navigation des drones, les contraintes environnementales, etc. L’objectif de la coordination entre les drones est de minimiser les coûts d’exploration en termes d’énergie par exemple. Nous considérerons une résolution distribuée et nous testerons ainsi différentes méthodes.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Plusieurs projets urbains innovants d’ilots autonomes tels que le projet du groupe Bouygues-construction pour la gestion intelligente de l’énergie traitent du problème du partage dynamique de l’énergie avec son réseau de communication énergétique et un système de stockage par des batteries de nouvelle génération directement installées dans les bâtiments. Ce projet vise à équiper les foyers avec de nouveaux dispositifs intelligents pour éprouver des solutions originales pour les futurs réseaux de distribution. Il cible l’ouverture des réseaux et l’exploitation automatique des îlots. L’évolution actuelle de ces ilots est renforcée grâce au développement de nouvelles batteries de stockage à fort potentiel et à faibles coûts, et au transfert intelligent de l’énergie entre les ilots avec un câblage interne indépendamment des systèmes de distribution classiques. Ce transfert permet d’envisager une adaptation de la consommation de manière locale, i.e., à l’échelle d’un quartier, en réduisant les coûts et les pertes du transport de l’énergie.

Pour accompagner le développement de ce projet, une solution pour la gestion du surplus d’énergie s’est inscrite en direction des véhicules autonomes solution de stockage et d’usage intelligent de l’énergie renouvelable. Ce modèle de fonctionnement requière l’installation de bornes de rechargement communicantes au niveau des ilots autonomes permettant aux résidents et aux non-résidents de l’ilot d’accéder au surplus d’énergie produite dans ces ilots moyennant une participation financière mais avec un coup d’achat de cette énergie relativement inférieur à celui appliqué par les fournisseurs standards. La gestion de l’énergie doit ainsi être reformulée comme un problème de planification où l’énergie fournie est considérée comme une ressource partagée et intermittente dont l’usage doit être régulé et optimisé par ce nouveau système intelligent. L’objectif de ce projet est ainsi d’implémenter une méthode de résolution qui permet aux véhicules de se recharger auprès des bornes intelligentes et de contrôler dynamiquement les interactions entre les véhicules autonomes et les bornes. L'étudiant peut avoir acces a une premiere implementation deja realisee.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

La conduite en peloton est un mode de conduite collaborative où les véhicules forment des groupes ou le premier véhicule, dit le véhicule meneur, est piloté par un conducteur humain ou un programme ; les autres véhicules suivent de manière automatique leur prédécesseur sachant que chaque conducteur peut garder le contrôle de son véhicule. Les véhicules sont directement interconnectés par un réseau sans-fil et échangent des informations en temps réel sur un réseau ad hoc dédié. Cette formation présente de nombreux avantages, notamment de sécurité puisque la signalisation du meneur est automatiquement retransmise aux autres véhicules. Par exemple, si un des véhicules du peloton effectue un freinage d’urgence alors tous ceux qui le suivent freineront instantanément, ainsi le risque de carambolage est réduit. La communication inter véhicules peut alors être utilisée pour pallier au problème de stabilité des pelotons, et leur permet un certain niveau d’organisation interne.

Le rôle de l’étudiant est de formaliser et d’implémenter un ensemble de comportements nécessaires à un véhicule autonome pour qu’il puisse former des pelotons pendant son trajet sans devoir modifier son itinéraire.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

L’objectif de ce projet est de proposer une méthode distribuée pour l’affectation des places de stationnement à des véhicules intelligents. Le rôle de l’étudiant est de formaliser et d’implémenter l’ensemble des comportements nécessaires aux véhicules pour interagir avec les parkings et négocier le tarif de stationnement qui est décidé dynamiquement en tenant compte d’un ensemble d’information, telles que la durée du stationnement, le profil de l’usager, le taux d’occupation du parking, le créneau horaire, etc.

Domaine Intelligence Artificielle
Langage (proposé) C++, java
Responsable du sujet Samir AKNINE

Dans le cadre de ce projet, nous étudierons la consommation énergétique d’un véhicule électrique intelligent. Nous examinerons un ensemble de méthodes pour planifier dynamiquement la trajectoire du véhicule en tenant compte à la fois de la consommation prédite, des contraintes de mobilité des véhicules, de l’occupation des voies, etc. Chaque véhicule est modélisé dans le système par un agent intelligent. Nous définirons les comportements des véhicules et proposeront le modèle d’interaction pour supporter les interactions entre les véhicules et l’infrastructure.

Domaines Image Processing / Deep Learning(IA) / Interaction
Techniques et langages Python / PyQt
Responsable du sujet Alexandre Meyer
Niveau de difficulté intermédiaire

L'objectif de ce projet est de developpé une application capable de proposer des curseurs pour éditer la photo d'une classe d'objet (par exemple des visages d'une personne) en se basant sur des auto-encodeurs.

Les auto-encoders sont une classe d'algorithme basée sur les réseaux de neurones profonds qui transforment un jeu de données (des images pour nous) en une représentation latente (cachée) que l'on nomme un code. Ils sont composés d'un encodeur qui produit le code et d'un décodeur qui repasse du code à la données d'origine (l'image). L'objectif de ce sujet est de construire cet auto-encoder sur une classe d'images puis d'offrir à l'utilisateur des curseurs pour éditer le code tout en lui montrant l'image décodé.

Dans un 2e temps, par exemple pour l'édition d'un visage, nous pouvons imaginer construire un auto-encoder pour chaque partie du visage : nez, yeux, bouche. L'utilisateur pourra ainsi éditer chaque partie du visage séparément. Il est également envisageable d'explorer les GAN (Generative Adversarial Network) pour produire une nouvelle image …

GANs vs. Autoencoders: Comparison of Deep Generative Models GAN — Some cool applications of GANs.

Domaines Capture de mouvement/Interaction/Jeu vidéo
Techniques et langages C# / Unity
Responsable du sujet Alexandre Meyer
Difficulté Raisonnable / Intermédiaire

Le suivi de marqueur peut facilement se réaliser avec OpenCV et une webcam. Même plus loin, la capture des mouvements d'un visage ou du corps peut être réalisé avec Dlib (visage) ou OpenPose (il faut néanmoins une machine avec un GPU Nvidia). Ce projet ce propose de developper un (ou des mini jeux) sou Unity pensés pour que l'interaction se fasse avec son corps filmé par la webcam de son ordinateur. On peut imaginer dans un premier temps un mini jeu avec des ballons qui tombent du ciel et qu'il faut attrapper soit avec les mains (marqueurs rouge suivi), soit avec la tête (DLib). Puis si ces outils sont bien maitrisés, libre à vous d'imaginer tout type de jeu : voir les jeux basés sur la Kinect ou Wii avec le même type d'interaction.

Une des difficultés techniques sera l’interfaçage entre Unity et OpenCV. Unity peut charger des librairies dynamiquement (.dll ou .so) mais il y a une phase de configuration technique.

[Unity et OpenCV] https://www.raywenderlich.com/5475-introduction-to-using-opencv-with-unity

Domaines Jeu vidéo
Techniques et langages C# / Unity
Responsable du sujet Alexandre Meyer
Difficulté Raisonnable / Intermédiaire

Mister Red est un personnage 2D représenté par des battons pour chaque partie du corps : jambes, bras, tronc, tête. Ce sujet vous propose de développer le jeu de votre choix incluant Mister Red. La difficulté portera sur produire les animations de Mister Red, plusieurs pistes semblent envisageables. Entrer à la main ou concevoir une petite interface pour entrer les positions des mains, de la tête et des pieds sur des poses clées (1 pose pour debout, 2 poses pour marche, 1 pose coup de pied, 1 pose coup de poing) puis d'interpoler ces positions pour obtenir une animation. Une autre piste serait de partir de capture de mouvement 3D (des animations existent sous Unity) et de les projeter en 2D. La 2e difficulté sera de gérer les interactions entre Mister Red et les décors qui pourront être codée dans des images.

Libre à vous d'imaginer tout type de jeu : combat, aventure, etc. mais votre jeu devra comprendre un algorithme évolué : soit un Min/Max pour faire jouer l'ordinateur, soit un plus court chemin (type A*), ou tout autre algorithme d'“IA” un peu évolué faisant les adversaires.

[Video de Mister Red] https://www.youtube.com/watch?v=MoDGzRa1LW0

Domaines Image Processing
Techniques et langages Python ou C++/OpenGL
Responsable du sujet Alexandre Meyer
Difficulté Sujet progressif

L'objectif de ce projet est de développé un algorithme capable de transférer le mouvement d'un visage d'une personne filmé vers une autre personne. La capture de l'animation du visage source se fera en détectant les points caractéristiques d'un visage filmé avec une webcam en utilisant DLib (python ou C++).

Un premier prototype se fera en générant une nouvelle position de marqueurs de visage puis en réalisant un warping (déformation) de l'image du visage cible. Une interpolation par RBF (ou autre) semble une solution réalisable.

Ce warping pourra s'etendre dans 2 directions - vers la déformation d'un maillage 3D, probablement en utilsant Gkit (le code de LIFGRAPHIQUE en L2); - vers une éformation 2D plus réaliste en utilisant les réseaux de neurones (GAN).

Domaine méta heuristiques, optimisation, moteur physique
Langage C++, python, etc. ?
Responsable du sujet Fabien Rico et Alexandre Meyer
Information à voir
http://jvf.free.fr/550_Articles_LinuxMag/GLMF_076_034_041.pdf
https://www.youtube.com/watch?v=JBgG_VSP7f8
https://www.youtube.com/watch?v=m4E9sj9vH1I

Les algorithmes évolutionnistes ou génétiques sont des méta-heuristique d'optimisation c'est à dire des méthodes globales pour résoudre des problèmes de toutes sorte qu'il faut adapté à un problème particulier. Comme leur nom l'indique, ils sont basés sur le concepts d'évolution. On génère une famille aléatoire d'individu dont on conserve les plus performant, que l'on mélange pour générer une nouvelle famille …

Une idée classique de ce choix de projet est d'appliquer ces algorithmes évolutionnistes à un problème de génération de forme de créatures en cherchant à ce que ces créatures réalisent une tâche le mieux possible : par exemple la locomotion.

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éveloppement 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é ;-) (c'est un vrai point important sur un CV).

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

Techniques calcul sur des entiers de taille quelconque (C++, Python ou autre), authentification, signature
Responsable du sujet
Matthieu Moy

Les algorithmes de chiffrement asymétrique sont devenus très importants dans le domaine informatique. RSA est l'un des plus connus et se base sur l'utilisation de grand nombres premiers. L’intérêt de ces algorithmes est qu'ils permettent un échange d'informations chiffrées entre des entités qui ne partagent aucun secret au départ.

En effet, les algorithmes symétriques sont bien plus robustes (pour une même taille de clef), mais ils nécessitent avant de commencer d'échanger un secret entre les acteurs. Pour un serveur public dont le nombre de clients est très important, il n'est pas possible de mettre en place un canal pour échanger ce secret autrement qu'en utilisant le réseau internet. On utilise donc les algorithmes a clef publique pour sécuriser les premiers échanges et mettre en place une session sécurisée.

Vous devez implémenter l'algorithme RSA, c'est à dire :

  1. générer la clef;
  2. chiffrer avec la clef publique et déchiffrer avec la clef secrète;
  3. chiffrer avec la clef secrète et déchiffrer avec la clef publique (pour signer).

Attention, l'algorithme RSA en lui-même est relativement simple, mais implémenté naïvement il n'est pas sûr (par exemple, l'utilisation de nonce, nombre aléatoire, pour compléter le message à chiffrer est indispensable pour empêcher les attaques par force brute).

Améliorations

Comme amélioration vous pourrez :

  • implémenter d'autres algorithmes de chiffrement;
  • créer un petit logiciel de connexion à distance sécurisé.
Techniques Raspberry Pi, Python
Responsable du sujet
Matthieu Moy

Réaliser un chatbot piloté par SMS. Le chatbot reçoit les SMS, est lui-même connecté à internet et peut utiliser sa connexion pour répondre aux requetes, et renvoie des SMS en réponse.

Exemples de possibilités :

* L'utilisateur envoie un SMS, qui est transmis à un autre utilisateur. Intérêt : possibilité de groupes avancés, anonymisation des messages, sans connexion internet sur le téléphone.

* L'utilisateur envoie un SMS disant “quelle est la météo pour demain?”, le bot consulte un site de météo, et répond par SMS (avec contrainte de taille de message SMS).

* Possibilité de chiffres les SMS, donc application tournant sur le téléphone permettant de saisir le message, l'application chiffre le message et l'envoie par SMS. Inversement l'application sait décoder un SMS chiffré reçu.

  • projet/2020/pri/sujet.txt
  • Dernière modification : 2020/01/20 13:13
  • de matthieu.moy