NVAE for Cardiac Shape Analysis
Nouveau VAE
×
Nouveau VAEPyTorchPyTorch LightningTorchIOMONAIPythonNumPyAltairTensorBoard
Description

My MSc dissertation at Imperial College (2023-24) involves using state-of-the-art generative AI frameworks to learn population-level patterns in the shape of cardiac components. Analysis of these shapes are crucial for reliable diagnosis of heart diseases. A snippet of my abstract is provided below.

"Cardiovascular diseases (CVDs) cause over 20 million deaths annually, with a third occuring prematurely in people under the age of 70. However, CVDs are largely preventable with early detection and intervention. Over recent years, there has been rapid progression in the development of automated techniques for cardiac magnetic resonance imaging (MRI) analysis. Accurate delineation of cardiac components is crucial to assist in anomaly detection and diagnosis, and shape analysis is an essential prerequisite.

The emergence of deep learning has introduced powerful frameworks capable of automating the process of learning compact shape representations. Variational autoencoders (VAEs) are a class of generative models that excel at learning efficient low-dimensional representations of complex data. In particular, the Nouveau VAE (NVAE) is a deep hierarchical VAE that is the state-of-the-art among its class in encoding fine-grained details in high-resolution images. In this dissertation, we examine how the NVAE framework can be applied to cardiac shape analysis..."

I am very grateful to Prof. Elsa Angelini and Prof. Loïc Le Folgoc for supervising me.

Source code will be available soon.

Contrastive Learning for Medical Imaging
SimCLR
×
SimCLRContrastive LearningPyTorchPyTorch LightningPythonNumPyMatplotlibTensorBoard
Description

Computer-aided diagnosis (CADx) is very important in clinical environments as they assist radiologists in interpreting medical images. This involves early detection of lesions, as well as enabling more accurate diagnosis.

AI in general is advancing very rapidly. So, can we use these new, state-of-the-art AI techniques and integrate them within CADx?

My BEng dissertation at Imperial College (2022-23) focuses on evaluating a specific framework for medical imaging: SimCLR. SimCLR is a self-supervised contrastive learning framework, which enables pretraining large convolutional networks like ResNet with unlabelled data. As a result, only a small amount of labelled data is required for downstream tasks like finetuning the model for classification. Traditionally, supervised learning requires lots of labelled data, so this is a very exciting prospect, especially since clinical environments tend to lack labelled data. The thesis involves proposing and evaluating novel techniques and workflows for medical images that improveme over existing SimCLR methods. I am very thankful to Prof. Ben Glocker for his supervision and guidance.

Source Code
LLMs for Detecting PCL
RoBERTa
×
RoBERTaDistilRoBERTaTransformersPyTorchPythonpandas
Description

In Spring 2024, we (group of 2) developed an ensemble model (transfer learning of pretrained RoBERTa and DistilRoBERTa models) to detect Patronizing and Condescending Language as described by SemEval 2022 Task 4: Subtask 1.

Our model achieved 0.5548 F1 score on the test set, which would've ranked 22nd on the contest. (The top performing teams were industrial research groups.) It outperforms baseline RoBERTa by over 0.06 in F1 score.

This project was the coursework for the Natural Language Processing module at Imperial College, for which we achieved full marks.

Source Code
Data Animations
pyglet
×
pygletPythonNumPyimageio
Description

This lightweight Python application allows you to render or record highly customisable bar chart animations from CSV files, like those data visualisation videos on YouTube.

Source Code
Duel!
Unity
×
UnityC#
Description

Duel! is a 2P shooter game I developed in Unity in 1 week for Brackeys Jam 2020.2.

Given the time constraints, I opted for a simple game idea that is easily extendable, with a focus on providing an elegant interface and user experience. This involved smooth animations, a custom keybinds option, as well as rewriting the player physics, as Unity's default physics engine was rough and inconsistent. Overall, it was very exciting to work with limited time.

Watch the "behind the scenes" video:
https://www.youtube.com/watch?v=2NnTHHqoIrw

Try out the game! Grab a friend, and duel to the death!

Preview
Ten Minutes of Existence
Unity
×
UnityC#
Description

Ten Minutes of Existence is a puzzle / adventure game I developed for the GameDev.tv Community Jam - May 2020.

This was a fun project during the initial lockdown, especially working with Shader Graph and the Universal Render Pipeline to texture and animate rippling water.

Watch the "behind the scenes" video:
https://www.youtube.com/watch?v=xrW_MobboxE

Walkthrough (spoilers!):
https://www.youtube.com/watch?v=f8kdB0yYRlE

Preview
Peer Assessment
Flask
×
FlaskPythonJavaScriptAJAXSQLHTMLBootStrapSCSSCI/CDTDD
Description

Peer Assessment is a web app used by the Department of Computing at Imperial College, allowing students to peer-assess each other and providing staff with a seamless administration interface. I was one of the main developers during my internship with DoC EdTech, Imperial College in Summer 2021.

I am very thankful to Ivan Procaccini, Dr. Andrea Callia D'Iddio and Dr. Robert Chatley who supervised me and introduced me to test-driven development and other modern agile development practices.

After my internship, I volunteered to develop the official site for Doc EdTech at https://edtech.pages.doc.ic.ac.uk

Source Code
Create Your Own Adventure
React
×
ReactViteTypeScriptPythonGPT-3SBERTMongoDBHTMLMantineCSSCI/CDTDD
Description

With the prevalence of autoregressive generative models being made publically available, in Autumn 2022 we (group of 6) created a distributed framework for automated gamebook generation using OpenAI's GPT-3 model.

Create Your Own Adventure (CYOA) offers an extensive set of tools to allow authors to easily create, fully customise and print their gamebooks.

Frontend: https://github.com/j-freddy/icl-cyoa-frontend
Backend: https://github.com/j-freddy/icl-cyoa-backend

WACC
Scala
×
ScalaParsleyARM1176JZF-SCI/CDTDD
Description

WACC is an imperative language that supports fundamental constructs such as variables, loops, conditional branching, arrays and functions. The preview image is a code snippet from a Tic-Tac-Toe AI written in WACC.

Our challenge in the 2022 Spring term? Given 6 weeks, write a compiler that performs syntax and semantic analysis on any WACC file, then (if valid) generates executable code for the ARM11 architecture. The four of us successfully implemented this in Scala and Parsley (parser combinator library) and got a 99% score in the backend code review.

SolarSearch
PyTorch
×
PyTorchFlaskPythonRasterioJavaScriptMongoDBHTMLBootStrapSCSS
Description

SolarSearch is powered by a deep learning neural network AI and developed during IC Hack 22 in 24 hours.

Given a country, the web app generates a ranking of areas within the country that are most feasible for building solar farms. The ranking algorithm accounts for terrain, weather, atmospheric pollution and other factors, using a mixture of computer vision and third-party data.

More details can be found here:
https://devpost.com/software/solarsearch

Source Code
ARM Emulator
C
×
C
Description

In Summer 2021, we (group of 4) created a two-pass assembler that converts ARM assembly code into binary. We also coded an emulator that runs binary code, complete with the three-stage pipeline, CPSR flags and barrel shifters.

Infiltrate
Unity
×
UnityC#
Description

I have always been an avid enjoyer of platformer games, dating back to when I discovered SuperTux in primary school. This is my attempt at developing one in Unity, and I was quite happy with how it turned out.

Unfortunately, I never turned this into a fully-fledged game. You can play the demo using the link below.

Preview
Pintos
C
×
C
Description

Pintos is an operating system with a monolithic kernel. It supports basic functionality such as multithreading, running user programs and file systems.

Our challenge in Fall 2022 is to implement and extend its functionality, including non-busy wait, implementing system calls, priority scheduling and priority donation.

Pawn Race
Java
×
JavaJavaFX
Description

During my 1st year at Imperial, the Department of Computing held an AI Kotlin Pawn Race, and I was one of the winners! (using a MCTS strategy)

Fast forward to the Summer term and I was programming chess in Java as a side hobby. I prototyped it to support Pawn Race and challenged myself to create a stronger AI. This time, I used Minimax with alpha-beta pruning, using the strategy of "space control" as a static evaluator. It triumphed over my Kotlin AI.

Source Code
Genetic Algorithm Simulator
JavaScript
×
JavaScriptPixi.jsHTMLCSS
Description

This is my project for the AQA A-level Computer Science NEA. Back then, I already had a deep interest in machine learning, and used the opportunity to research and build (from scratch) a genetic/evolutionary algorithm to train AIs to play a platformer.

Preview
Source Code