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.
Explain the Scaled Dot-Product Attention mechanism used in Transformers.
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)
What is the objective function optimized in a Variational Autoencoder (VAE)?
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)) \]
- First term: Reconstruction Loss (how well we decode)
- Second term: KL Divergence (regularization towards prior \( p(z) \))
Implement a Python decorator @time_execution that measures function runtime.
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
passDescribe the update rules for the Adam optimizer.
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 \]
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!