This project implements and compares classical machine learning approaches against deep learning methods for cell segmentation in time-lapse microscopy videos.
Classical Workflow:
We employ a sliding-window approach for feature extraction. For every pixel in the training images, we extract a small neighborhood (e.g., 5 × 5 window), flatten it into a feature vector, and train standard classifiers (SVM, Logistic Regression, Naive Bayes, MLP) to predict whether the center pixel belongs to a cell or the background. This treats segmentation as a pixel-wise classification problem based on local texture.
Deep Learning Approach (U-Net):
We implemented a U-Net architecture using a MobileNetV2 encoder pre-trained on ImageNet. The model takes full 512 × 512 grayscale images as input and outputs a probability map of the same size.
Dataset Split Strategy:
The provided Silver Truth (ST) segmentation is used for training and validation. To respect the temporal nature of the data and avoid data leakage between consecutive frames, we perform a time-ordered split:
The table below summarizes the performance of each model. You can find the implementation code for all models in the src/cell_tracking/models folder. The Full Metrics column provides links to detailed reports containing the Intersection over Union (IoU) score for every frame in the validation sequence.
| Method | Dataset | Track | Mean IoU | Notes | Full Metrics |
|---|---|---|---|---|---|
| Naive Bayes | Fluo-N2DH-GOWT1 | 01 | 0.8545 | Window=5 | Link |
| Naive Bayes | Fluo-N2DH-GOWT1 | 02 | 0.8271 | Window=5 | Link |
| Linear SVM | Fluo-N2DH-GOWT1 | 01 | 0.8958 | Window=5 | Link |
| Linear SVM | Fluo-N2DH-GOWT1 | 02 | 0.8651 | Window=5 | Link |
| SVM (RBF) | Fluo-N2DH-GOWT1 | 01 | 0.8952 | Window=5 | Link |
| SVM (RBF) | Fluo-N2DH-GOWT1 | 02 | 0.8651 | Window=5 | Link |
| Logistic Regression | Fluo-N2DH-GOWT1 | 01 | 0.9017 | Window=5 | Link |
| Logistic Regression | Fluo-N2DH-GOWT1 | 02 | 0.8680 | Window=5 | Link |
| Neural Network (MLP) | Fluo-N2DH-GOWT1 | 01 | 0.9162 | Window=5, 2 Hidden Layers | Link |
| Neural Network (MLP) | Fluo-N2DH-GOWT1 | 02 | 0.8659 | Window=5, 2 Hidden Layers | Link |
| U-Net (MobileNetV2) | Fluo-N2DH-GOWT1 | 01 | 0.9604 | Deep Learning, 512x512 Input | Link |
| U-Net (MobileNetV2) | Fluo-N2DH-GOWT1 | 02 | 0.9269 | Deep Learning, 512x512 Input | Link |
The U-Net model significantly outperforms all classical approaches, achieving a Mean IoU of 0.96 on Track 01 compared to the best classical model (MLP) at 0.91 and a Mean IoU of 0.93 on Track 02 compared to the best classical model at 0.87
Why U-Net is better:
| Tracker | Metric | Score | Notes |
|---|---|---|---|
| ASM + IoU linking | ID switches | 4 | Initialized from previous frame |
Explain how you propagate identities across frames and highlight failure cases.
The following GIFs demonstrate the segmentation results on the validation set over time. For each figure, the left side shows the ground truth (Silver Truth) segmentation in green, while the right side shows the model's predicted segmentation in red.
Naive Bayes

Linear SVM

SVM (RBF)

Logistic Regression

Neural Network (MLP)

U-Net (MobileNetV2)

Naive Bayes

Linear SVM

SVM (RBF)

Logistic Regression

Neural Network (MLP)

U-Net (MobileNetV2)

To reproduce the results presented above, follow these steps:
git clone https://github.com/jfemiani/CSE488-Project-Cell-Tracking.git
cd CSE488-Project-Cell-Tracking
Create a new Conda environment and install the required packages listed in pyproject.toml.
conda create -n cell-tracking python=3.11
conda activate cell-tracking
pip install -e .
Note: If you encounter build issues with albumentations on Windows, install a binary version explicitly:
pip install "albumentations==1.3.1"
Download and prepare the Fluo-N2DH-GOWT1 dataset with training/testing/validation
python scripts/setup_data.py --dataset Fluo-N2DH-GOWT1 --splits training test val
Train the baseline models (SVM, Naive Bayes, Logistic Regression, MLP) for both tracks.
# Train models for Track 01
python scripts/train_models.py --dataset Fluo-N2DH-GOWT1 --track 01 --window 5 --samples 500 --pct-fg 0.5
# Train models for Track 02
python scripts/train_models.py --dataset Fluo-N2DH-GOWT1 --track 02 --window 5 --samples 500 --pct-fg 0.5
Train the deep learning U-Net models for both tracks.
# Train U-Net for Track 01
python scripts/train_unet.py --dataset Fluo-N2DH-GOWT1 --output-dir artifacts/models --track-id 01 --epochs 20
# Train U-Net for Track 02
python scripts/train_unet.py --dataset Fluo-N2DH-GOWT1 --output-dir artifacts/models --track-id 02 --epochs 20
Evaluate all trained models (classical and deep learning) found in the artifacts/models directory. This script calculates the Mean IoU for each model, saves the results to artifacts/metrics, and saves resulted masked to artifacts/results
python scripts/eval_seg.py --dataset Fluo-N2DH-GOWT1 --models-dir artifacts/models
For full access to all trained models, segmentation results, and detailed metrics without running the reproduction scripts, you can download the compressed artifacts folder here:
Download Full Artifacts (Google Drive)
Share insights, what you'd try next, and open research questions.