from dataclasses import dataclass, field
@dataclass(frozen=True)
class FirstKhoi:
"""Baselines before benchmarks. Ablations before claims."""
name: str = "Luong Nhat Khoi"
handle: str = "FirstKhoi"
origin: str = "Vietnam 🇻🇳"
status: str = "CS / Data Science · undergraduate"
goal: str = "Research-grade computer vision, built from first principles."
focus: list[str] = field(default_factory=lambda: [
"Computer Vision → detection, tracking, spatial reasoning",
"Deep Learning → CNN internals, optimization, ablations",
"Classical ML → boosting theory, interpretability",
"Research craft → baselines, ablations, reproducibility",
])
principle: str = "Depth over breadth. One question, answered properly."
def why(self) -> str:
return "A result I cannot reproduce is a result I do not have."How the pieces connect. Every branch is built to converge on one research question.
flowchart LR
subgraph F["🧱 Foundations"]
direction TB
F1["Classical CV<br/><i>MOG2 · centroid tracking</i>"]
F2["CNN internals<br/><i>kernels · pooling · LeNet-5</i>"]
F3["Ensembles & Boosting<br/><i>RF · AdaBoost · XGBoost</i>"]
end
subgraph A["🔬 Applied Systems"]
direction TB
A1["Multi-Object Tracking<br/><i>SORT · ByteTrack · Kalman</i>"]
A2["Indoor Localization<br/><i>vision-based positioning</i>"]
A3["GIS Indoor Routing<br/><i>PostGIS · pgRouting</i>"]
end
subgraph R["🎯 Research Question"]
direction TB
RQ["<b>Can vision-based localization<br/>replace beacon infrastructure<br/>for indoor transit navigation?</b>"]
end
F1 --> A1
F2 --> A1
F2 --> A2
F3 -.->|"rigor transfer:<br/>baselines & ablations"| A2
A1 --> RQ
A2 --> RQ
A3 --> RQ
classDef found fill:#0D1117,stroke:#22D3EE,stroke-width:2px,color:#E6EDF3
classDef appl fill:#0D1117,stroke:#7C3AED,stroke-width:2px,color:#E6EDF3
classDef res fill:#1A1030,stroke:#A78BFA,stroke-width:3px,color:#E6EDF3
class F1,F2,F3 found
class A1,A2,A3 appl
class RQ res
|
Vision
|
Learning
|
Spatial
|
|
Classical CV pipeline with a validated design decision: MOG2 chosen over static background subtraction after empirical comparison — 2 correct tracks vs. 4 ghost tracks. Ships with CLI config, centroid tracker, and a YOLOv8 benchmarking harness.
|
GIS-based indoor routing for a metro station — pilot site Ga Bến Thành. Floor-plan graph extraction, multi-level pathfinding, and turn-by-turn guidance. 4-person group thesis, spatial DB stack under evaluation.
|
|
Not a tutorial rerun — kernels, receptive fields and pooling derived by hand, then implemented. LeNet-5 reproduced, debugged, and ablated.
|
Second-order boosting implemented from the math up — Newton step, Tikhonov-regularized leaf weights, exact split finding. Benchmarked against a real tabular pipeline.
|
$ python -m notworle.train --track research-portfolio --epochs inf
epoch track metric status
───── ──────────────────── ────────────────── ──────────────────────────
01 classical-cv ghost_tracks 4→2 ✔ MOG2 validated
02 cnn-foundations lenet5 debugged ✔ forward() bug fixed
03 ensembles rf · adaboost ✔ derived by hand
04 boosting-theory xgboost newton ▶ in progress
05 cnn-ablation mnist → cifar10 ▶ in progress
06 indoor-localization leakage-safe split ○ queued
07 mot-benchmark mota · idf1 ○ queued
08 paper-reproduction cvpr / iccv ○ queued
early_stopping = None # patience: unlimited
⚠ watchlist: frame-level data leakage in video splits📚 paper_trail — what I'm reading and why (click to expand)
| Paper | Why it's on the list |
|---|---|
| Simple Online and Realtime Tracking (SORT) | Minimal, honest baseline — the thing every MOT claim should be measured against |
| ByteTrack | Shows how much performance lives in low-confidence detections |
| Gradient Boosting: A Statistical View (Friedman) | Boosting as functional gradient descent — the idea that makes XGBoost obvious |
| XGBoost: A Scalable Tree Boosting System | Second-order approximation + regularization; the bridge to optimization theory |
| Batch Normalization / Deep Residual Learning | Why depth became trainable — required context for any CNN ablation |
| PoseNet / camera relocalization line of work | Direct ancestry for vision-based indoor localization |
Reading protocol: claim → experiment → does the ablation actually support the claim?
Not narrative — pulled straight from the GitHub API on a schedule. If this block is stale, the pipeline broke, not the story.
$ python -m notworle.stats --source github --live
metric value updated (UTC)
───────────────────────────── ────────── ────────────────────
current_streak_days 0 2026-09-29 05:01
contributions_this_week 52
repos_touched_7d 4
last_active_at 2026-09-28
source: github graphql api · auto-regenerated every 12h
