I am studying Computer Science at EPFL and at ENS de Lyon. This page describes some of my projects. Most of them are available on Github.
Projects
During a three-month research internship at Karlsruhe Institute of Technology (KIT), I worked on a method to reconstruct images rendered with the path-tracing algorithm on a GPU. I was under the supervision of Johannes Hanika.
The path-tracing algorithm is a Monte Carlo algorithm that can generate images of 3D scenes. In real-time conditions, it is usually not possible to perform enough iterations for the algorithm to converge: the output image is very noisy. It is possible to apply machine learning techniques to reconstruct an estimation of the original image from the noisy image, but these machine learning methods are computationally expensive: it is not yet possible to use them at real-time rates.
During my internship, I first generated several images of 3D scenes using a path-tracer that I created. Two versions of each image are generated: a noisy image with a low number of samples per pixel that could have been obtained at real-time rates, and the final image that is obtained after the convergence of the algorithm. I trained a convolutional neural network with the U-Net architecture to denoise noisy images, and worked on a low-level method to infer the prediction of the network as fast as possible on a Nvidia GPU using its tensor cores efficiently.
I have been working on several 3D renderers over the years. I first started with a very simple one written in C++ as a side project when I was in high school. A few years later, I rewrote it in Rust, while adding new functionalities. Later, I developed yet another renderer for a university project.
The first scene presented below was rendered using the latter. It is a simulation of a Michelson interferometer, a famous and useful physical instrument. It is composed of a light source, a beam splitter, two mirrors and a screen. The two mirrors are placed such that the distance traveled by the light when going through one mirror is slightly different from the distance when going through the other one. This produces the interference pattern.
To obtain this image, I implemented spectral rendering and interference rendering, as well as other more common features. The image was part of the runner-ups of a rendering competition!
I am a contributor to the betterproto open source project!
The goal of the project is to "provide an improved experience when using Protobuf / gRPC in a modern Python environment by making use of modern language features and generating readable, understandable, idiomatic Python code".
I worked on adding new features, fixing complex bugs, greatly improving the performance as well as cleaning the whole code, which was much needed...
Ce projet regroupe des implémentations en C++ d'algorithmes et de structures de données classiques. Elles permettent de gagner du temps lors de compétitions en évitant de les recoder complètement.
Les descriptions et preuves de certains de ces algorithmes sont regroupées dans un document que j'ai écrit.
Using a diffusion algorithm, this program generates images of hands. This AI model is a convolutional neural network (CNN) with the U-Net architecture. It is trained on 11K Hands, a dataset of images of hands [1].
The slider above can be used to show images generated during the training of the network. The network is trained during 500 epochs, and six new images are generated every ten epochs. We can see that as the training progresses, the images get increasingly realistic, even if the number and the position of the fingers may be wrong.
Since the network is fully convolutional, it has only access to local information when it generates the image. This can explain why it struggles to build more realistic images. This was expected and obtaining these strange images was actually the goal of the project :)
[1] Mahmoud Afifi, "11K Hands: Gender recognition and biometric identification using a large dataset of hand images." Multimedia Tools and Applications, 2019.
Stage de L3 de six semaines réalisé à l'Irit (Enseeiht) dans l'équipe Sépia, avec l'encadrement de Daniel Hagimont et l'aide de Brice Ekane.
DiSC est un projet de recherche développé à l'Irit et permettant d'optimiser les communications entre différentes machines d'un datacenter. L'objectif de mon stage était de concevoir une méthode permettant de déplacer une session TLS d'une machine à une autre afin d'intégrer le support du protocole de TLS à DiSC.
download Rapport de stageA few smaller projects
Permet de relever puis d'afficher de manière claire et précise l'historique de consommation électrique d'une habitation. La consommation instantanée, fournie par le compteur électrique, est mesurée régulièrement par une carte Arduino et enregistrée dans un fichier. Les données peuvent ensuite être affichées graphiquement.
Programme réalisé dans le cadre de mon projet de Sciences de l'Ingénieur en Terminale : il permet de détecter la position de balles de tennis sur une image. La qualité des résultats obtenus est assez dépendante de la luminosité du terrain, mais elle est généralement très bonne.
Outil permettant d'ajouter de nombreuses fautes d'orthographe à un texte initialement correct.
Permet de visualiser l'ensemble de Mandelbrot et des ensembles de Julia.