Cours Turing - Année 1
Aperçu des semaines
-
Horaire des cours: les samedis matin de 9h à 12h
Salle de cours: CO 021 -
-
Dans ce premier cours, nous allons découvrir les bases du langage Python (expressions, variables, fonctions). Nous étudierons de manière précise la façon dont Python représente les expressions, effectue des calculs et exécute des programmes. Dans le cadre d'exercice, nous utiliserons ces concepts pour notamment réaliser des dessins à base de formes géométriques en Python.
-
Dans le deuxième cours, nous allons approfondir nos connaissances en Python en abordant les conditions, les instructions conditionnelles et les boucles. Nous appliquerons ces concepts à la réalisation de dessins complexes, aux motifs répétés.
-
Dans ce troisième cours, nous aborderons la notion de séquence de valeurs en Python. Nous verrons comment manipuler du texte et d'autres types de listes de valeurs. Nous étudierons comment parcourir des séquences de valeurs, notamment pour les réduire à une unique valeur (somme, maximum, etc.). Nous verrons aussi comment lire des données textuelles d’un fichier. En guise d'exercices, nous réaliserons des programmes visant au traitement et à la visualisation de données.
-
Dans ce quatrième cours de ce premier module sur Python, nous ferons une introduction à l'ingénierie logicielle. Nous aborderons la question de la qualité du code, de la documentation de code, ainsi que du testing et debugging. Nous verrons aussi comment utiliser les annotations de type en Python.
-
Dans ce cinquième cours, nous allons nous intéresser à l'utilisation de nombres (pseudo-)aléatoires en Python. Nous verrons comment les utiliser pour faire des simulations de processus complexes ainsi que pour estimer des valeurs (méthode de Monte-Carlo). Au passage, nous aborderons aussi les dictionnaires en Python, ainsi que la méthode de définition de structures de données par compréhension.
-
Le sixième cours du module sur Python est consacré à la question de la récursivité. Nous étudierons comment définir des fonctions récursives en Python et surtout comment utiliser la récursivité pour concevoir des solutions à des problèmes. Nous aborderons aussi des façons de structurer des données de façon arborescente, une représentation qui se prête naturellement au traitement par des solutions récursives.
-
Pour ce septième cours, nous nous lancerons dans la conception d'un générateur de labyrinthes. Pour cela, nous mettrons en application tous les concepts abordés plus tôt dans ce module.
-
Pour ce dernier cours du module sur Python, nous nous donnerons la tâche de créer un programme capable de résoudre des labyrinthes. Nous verrons différentes méthodes de résolution et leur implémentation en Python.
-
ATTENTION: CHANGEMENT DE SALLE POUR CETTE DATE: le cours aura lieu exceptionnellement en salle INF 3
Dans ce premier cours, nous verrons quelques algorithmes historiques de cryptographie dite "à clé secrète", et vous aurez l'occasion d'implémenter ceux-ci en Python pour voir concrètement ce qu'il se passe lors de l'implémentation de tels algorithmes.
-
Dans ce deuxième cours sur la cryptographie à clé secrète, nous parlerons du fonctionnement de la machine Enigma, des lois de Kerckhoff, ainsi que de cryptanalyse, avec une ou deux applications concrètes en Python.
-
Dans ce troisième cours sur la cryptographie à clé secrète, vous découvrirez le système de clé à usage unique, ainsi que les systèmes DES (pour "Data Encryption Standard") et AES (pour "Advanced Encryption Standard"), que vous aurez à nouveau l'occasion d'implémenter en Python.
-
programme encore à définir
-
Dasn ce cours, nous passerons en revue quelques principes d'arithmétique modulaire, qui vont nous être très utiles pour les cours qui suivent.
-
Dans ce cours, vous découvrirez les générateurs de nombres aléatoires qui sont, étonamment peut-être, un ingrédient essentiel à de nombreux algorithmes, en cryptographie comme ailleurs.
-
Dans ce cours, vous verrez comment faire pour générer efficacement de très grands nombres premiers (avec de l'ordre 100 chiffres); un autre ingrédient essentiel à la cryptographie dite "à clé publique".
-
Dan ce cours, nous parlerons de cryptographie à clé publique et étudierons en particulier le protocole d'échange de clé de Diffie-Hellman, qui permet à deux personnes d'établir un secret commun sans s'être rencontrées au préalable, grâce à des fonctions dites "à sens unique".
-
Dans ce dernier cours sur la cryptographie, nous étudierons le fonctionnement du célèbre protocole RSA (du nom de ses inventeurs Rivest, Shamir, Adleman), ainsi que celui du protocole de signature digitale associé.
-
-
Dans ce cours, nous découvrirons comment sont représentées les couleurs et les images en informatique mais aussi comment elles sont affichées sur nos écrans. Nous utiliserons deux librairies Python, Numpy et Pillow, afin de charger en mémoire et de manipuler les codes RGB des images afin de les modifier. Lors des exercices, vous programmerez, entre autres, un script permettant d’améliorer le contraste d’une image.
-
Dans ce cours, nous commencerons par découvrir l’opération de convolution qui permet qui a de très nombreuses applications, elle a notamment contribué d’une manière significative à l’avancée de la recherche en intelligence artificielle. La convolution permet « d’appliquer » un filtre à une image et nous verrons qu’il est très simple de flouter une image à l’aide d’un filtre ou, inversement, d’accentuer les détails.
Pendant les exercices, vous programmerez un script permettant de détecter automatiquement les contours dans une images en utilisant la méthode de Canny. Cette dernière utilise, notamment, une succession de filtres appliqués à l’image grâce à l’opération de convolution.
-
Dans ce cours, nous découvrirons une approche permettant de détecter les formes dans une image : la transformée de Hough. Dans sa forme la plus populaire la transformée de Hough est appliquée à la détection de lignes, il s’agit cependant d’une approche générique qui peut être étendue à n’importe quelle forme paramétrable.
Pour détecter les lignes grâce à cette méthode, nous devrons parler d'un autre système de coordonnées, le système de coordonnées polaires qui est plus adapté à la représentation des lignes.
Dans les exercices, vous programmerez, notamment, un script Python permettant de détecter les lignes dans une image. Si le temps le permets, vous pourrez également modifier votre script pour détecter les cercles.
-
Dans ce cours, nous découvrirons des approches permettant de séparer le premier plan de l'arrière-plan d'une image. Nous verrons comment ces plans sont définis et plusieurs applications concrètes comme, par exemple, la détection de mouvement dans une vidéo.
Dans les exercices, vous serez invités à implémenter les approches vues dans le cours. Vous pourrez également expérimenter avec des images ou des vidéos de votre choix afin de découvrir les limites de ces algorithmes mais aussi de développer votre intuition sur le sujet.
-
Dans ce cours, nous découvrirons le problème de la détection et du suivi d'objets. Les méthodes de détection et de suivi sont généralement simples conceptuellement mais dépendent de nombreux hyperparamètres et sont très sensibles à de nombreux facteurs dont nous discuterons. Seront également présentées les manières d’évaluer la performance de ces systèmes.
Dans les exercices vous commencerez par implémenter une méthode de détection et une méthode de suivi d'objets aussi simple que possible. Vous serez ensuite invités à améliorer ces méthodes en les testant et en complexifiant les approches, des pistes vous seront proposés.
-
Dans ce cours, nous découvrirons les réseaux de neurones d'un point de vue théorique, nous verrons comment un neurone fonctionne, comment plusieurs neurones peuvent être combinés pour former un réseau de neurones, et comment ces réseaux peuvent être entrainés afin de résoudre une multitude de problèmes pour peu qu'ils soient correctement paramétrés et que les données soient disponibles.
Lors des exercices, vous serez invités à découvrir le fonctionnement des réseaux de neurones avec quelques exercices théoriques mais également des démonstrations qui vous aideront à comprendre les concepts abordés dans le cours et à développer votre intuition sur le sujet.
-
Dans ce cours, nous découvrirons le problème de la classification d'images qui est une des applications les plus courantes des réseaux de neurones. Nous verrons, d'un point de vue technique, comment la paramétrisation d'un problème peut avoir un impact sur la performance d'un réseau de neurones, et comment les données d'entrainement peuvent influencer le résultat final.Lors des exercices, vous commencerez par utiliser un script Python permettant d'entrainer un réseau de neurones sur un jeu de données prédéfini. Vous devrez ensuite constituer votre propre jeu de données d'images et l'utiliser pour entrainer votre propre réseau de neurones.
-
Dans ce cours, nous découvrirons une autre application des réseaux de neurones : la colorisation d'images. Nous verrons comment utiliser un réseau de neurones pour coloriser des images en niveaux de gris.
Nous discuterons notamment de la paramétrisation du problème, d'espace de couleurs et d'astuces numériques afin d'améliorer les performances de l'algorithme.
Dans les exercices, vous serez invités à entrainer un réseau de neurones donné avec des images prédéfinies dans un premier temps, puis, en fonction de vos envies vous pourrez choisir de modifier l'architecture, changer ou d'ajouter des images d'entrainement, ou encore de modifier les hyperparamètres de l'algorithme afin de découvrir ce dont est capable, ou non, le réseau de neurones.