Please Rotate Device

This site is optimized for portrait mode on mobile devices.

About Me

I’m currently finishing my B.Sc. in Data Science with a heavy focus on edge AI in MOT. I care about how perception models perform in the physical world, like my self-built UAVs, not just on benchmarks. The projects below are a showcase of integrating custom hardware and robust software to build end-to-end systems that solve real operational problems.

BURA
Long Range Recon

A fully 3D-Printed UAV designed for long-range, multi-hour reconnaissance missions.


Hierarchical Multi Object Tracking

Enhancing YOLO like models with a post-hoc hierarchical framework to validate uncertain detections and dramatically improve tracking recall.

Anki Automation

A desktop application for AI-powered Anki flashcard creation. Built for efficient university learning. Now available as a standalone desktop app with a guided setup flow and refreshed UI.

FRONT

Explain the Scaled Dot-Product Attention mechanism used in Transformers.

⋯ MORE CONTENT
BACK

The attention mechanism computes a weighted sum of values based on the compatibility of the query with corresponding keys:

\[ \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V \]

  • Q: Query matrix
  • K: Key matrix
  • V: Value matrix
  • \( d_k \): Dimension of keys (scaling factor to prevent vanishing gradients in softmax)
⋯ MORE CONTENT
FRONT

What is the objective function optimized in a Variational Autoencoder (VAE)?

⋯ MORE CONTENT
BACK

VAEs maximize the Evidence Lower Bound (ELBO):

\[ \mathcal{L}(\theta, \phi; x) = \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - D_{KL}(q_\phi(z|x) || p(z)) \]

Components:
  • First term: Reconstruction Loss (how well we decode)
  • Second term: KL Divergence (regularization towards prior \( p(z) \))
⋯ MORE CONTENT
FRONT

Implement a Python decorator @time_execution that measures function runtime.

⋯ MORE CONTENT
BACK
import time
import functools

def time_execution(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        start = time.perf_counter()
        result = func(*args, **kwargs)
        end = time.perf_counter()
        print(f"{func.__name__} took {end - start:.4f}s")
        return result
    return wrapper

@time_execution
def heavy_compute():
    # ... implementation
    pass
⋯ MORE CONTENT
FRONT

Describe the update rules for the Adam optimizer.

⋯ MORE CONTENT
BACK

Adam (Adaptive Moment Estimation) maintains moving averages of gradients and squared gradients:

\[ m_t = \beta_1 m_{t-1} + (1-\beta_1)g_t \]
\[ v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \]

Bias-corrected estimates:

\[ \hat{m}_t = \frac{m_t}{1-\beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1-\beta_2^t} \]

Parameter update:

\[ \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t \]

⋯ MORE CONTENT

Synthetic Data Generator

A modular C++ Unreal Engine 5.7 plugin for automated photorealistic dataset generation with paired instance masks, depth and metadata, reproducible in both interactive and headless batch workflows.

Get in Touch

I'm always excited to discuss new projects,
collaborations, or opportunities. Feel free to reach out!