Featured project
Haemoglobin estimation using multimodal deep learning
Python · PyTorch · VAEs · GATv2
Semester-long R&D project · Prof. Nirmal Punjabi · 2025
Estimates blood haemoglobin from photos of the conjunctiva, palm, fingernail and tongue, together with age, sex and BMI.
- Challenge
- Most of each photo is not tissue, so reconstruction losses were masked to make the encoders learn from tissue regions rather than the frame.
- Approach
- Trained 4 attention-based variational autoencoders, 100 epochs each on 128 × 128 images, fused their features with age, sex and BMI into a 1,056-dimensional input, and compared 6 input configurations. A ResNet18–GATv2 graph model then linked 16 image-patch locations with the patient data.
- Outcome
- The graph model reached a test MAE of 1.3576 and RMSE of 1.7283. Across the 6 configurations, tabular data alone was the strongest single input (1.4448 MAE) and fingernails the strongest image (1.7640 MAE).
Few-shot oral lesion classification
Python · OpenCV · Prototypical networks
Semester-long R&D project · Prof. Nirmal Punjabi · 2024
Classifies 6 types of oral lesion from photos, learning from only a few labelled examples per class.
With too few labelled images for a conventional classifier, used a prototypical network evaluated in episodes, and masked each lesion to its annotated polygon so the model saw the lesion rather than the tissue around it.
Outcome: 55.54% accuracy and 0.5568 macro F1 across 6 classes, against 16.7% chance
Flight booking microservice
Node.js · Express · MySQL · Sequelize
Self project · 2024
A flight booking backend split into Express microservices for flight search, booking, email reminders and auth.
Seat counts live in the flight service and bookings in another, so a booking starts In Process, checks and decrements seats through the flight service’s API, and is marked Booked only after that succeeds.
github
Augmented reality sudoku solver
Python · OpenCV · TensorFlow · Keras
Self project · 2023
Reads a sudoku from a photo, recognises each digit with a CNN and solves the puzzle by backtracking.
A photographed grid is skewed and cluttered, so the board is found as the largest four-cornered contour, its corners ordered, and the image warped flat to 450 × 450 before being cut into 81 cells.
Outcome: 99.43% test accuracy on digit recognition
github
Don’t let labels define you
Python · Gaussian mixture models · AIC/BIC model selection
Course project · Prof. Abir De · 2024
Clusters 114,000 Spotify tracks into synthetic genres and measures how closely they line up with the real ones.
There is no ground truth for a synthetic genre, so the number of clusters was chosen with AIC, BIC and the elbow method, and the result checked against real genres with frequency plots and cosine similarity.
Outcome: 110 synthetic genres identified across 114,000 tracks
Hierarchical few-shot generative models
Python · PyTorch · Latent variable models
Course project · Prof. P. Balamurugan · 2023
Trains hierarchical generative models that produce new samples of a class from only a few examples, on the double MNIST dataset.
Generating from only a few examples per set means the model has to infer what the set has in common; implemented the hierarchical model in PyTorch and analysed how its latent variables affect few-shot generation on double MNIST.