Skip to content
View FirstKhoi's full-sized avatar

Highlights

  • Pro

Block or report FirstKhoi

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
FirstKhoi/README.md

⚡ whoami

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."

🧭 research_map

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 &amp; 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 &amp; 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
Loading

🛠 tech_stack

Core

Data · Infra · Tooling

Vision

OpenCV YOLOv8 MOG2 Optical Flow Centroid SORT Kalman Filter

Learning

PyTorch CUDA CNN LeNet ResNet XGBoost LightGBM TreeSHAP AdaBoost

Spatial

PostGIS pgRouting QGIS GeoJSON Graph routing EPSG:4326 EPSG:32648


📦 featured_work

🎥 Motion Detection → MOT

OpenCV YOLOv8 Kalman

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.

▸ next: full MOT stack + MOTA/IDF1 eval

🗺 Indoor Navigation (Thesis)

PostGIS pgRouting GeoJSON

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.

▸ next: CAD ingestion + routing benchmarks

🧠 CNN From First Principles

PyTorch NumPy

Not a tutorial rerun — kernels, receptive fields and pooling derived by hand, then implemented. LeNet-5 reproduced, debugged, and ablated.

▸ next: CIFAR-10 ablation study (aug × depth × norm)

🌲 XGBoost From Scratch

NumPy scikit-learn

Second-order boosting implemented from the math up — Newton step, Tikhonov-regularized leaf weights, exact split finding.

Benchmarked against a real tabular pipeline.

▸ next: parity check vs. xgboost reference


📈 current_training_run

$ 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?


📡 live_signal

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

📊 stats

streak stats
top languages trophies

🐍 contribution_graph

contribution snake

🧊 isocalendar_3d

3D isocalendar

                    >>> FirstKhoi().why()
                    'A result I cannot reproduce is a result I do not have.'

Pinned Loading

  1. AIO_NewsClassification AIO_NewsClassification Public

    Forked from AIVIETNAM-AIO-LOP3Zs/AIO_NewsClassification

    AIO_Conquer

    Jupyter Notebook

  2. AIO_ts-transformer-ablation AIO_ts-transformer-ablation Public

    Forked from AIVIETNAM-AIO-FirstKhoi/AIO_ts-transformer-ablation

    Python

  3. cnn-visualizer cnn-visualizer Public

    Trực quan hoá CNN từng bước: tự tay code convolution, padding, stride, pooling — Streamlit app

    Python

  4. handwritten-digit-recognition handwritten-digit-recognition Public

    LeNet-5 trên MNIST: ablation 6 kiến trúc, lớp từ chối OOD, đọc dãy số, web app (Flask + ONNX chạy thẳng trình duyệt)

    Python