Gaze-LIPE / docs /memory.md
thanhhuyvan's picture
Initial release of LIPE V2 GOLD
a10ba7f
|
Raw
History Blame Contribute Delete
6.21 kB

Project Memory: LIPE V2 Gaze Estimation

1. Accomplishments

Architectural Design

  • Defined the Dual-State Asymmetric Pipeline (State A: 10 FPS Appearance, State B: 20 FPS Geometry).
  • Adopted Knowledge Distillation strategy using L2CS-Net as the teacher and LIPE V2 as the student.
  • Integrated Adaptive Wing Loss (AW Loss) to handle low-resolution optical aliasing.

Implementation - Core Components

  • Teacher Model (src/models/teacher.py): Robust wrapper for L2CS-Net (ResNet-18/34/50) with separate Pitch/Yaw branches.
  • Preprocessing Utility (src/utils/preprocess.py):
    • Integrated MediaPipe Tasks API (face_landmarker.task) with 478 points.
    • Implemented Unified Affine Transformation with standardized corner selection (viewer's left/right).
    • Added 3D gaze rotation logic to match rotated patches.
  • MPIIGaze Preprocessing (src/data/preprocess_mpii.py):
    • Developed an HDF5 streaming pipeline with GZIP compression.
    • Implemented Landmark Zero-Centering (pose-relative features).
  • Student Model (src/models/student.py):
    • Implemented LIPEV2Student with Shared CNN Backbone and Valid Padding (p=0).
    • Integrated LayerNorm in Geometric MLP for stability.
    • Achieved ~0.001 GFLOPs (Verified).
  • HDF5 DataLoader (src/data/dataset.py): Efficient GazeDataset with lazy-handle management.

Integration & Verification (2026-05-30)

  • End-to-End Demo (demo_integration.py): Successfully integrated Phase 1 (Data) and Phase 2 (Model).
    • Data Integrity: Verified p03.h5 samples load with correct shapes: Patches (4, 8, 8) and Landmarks (956).
    • Model Compatibility: LIPEV2Student performed successful inference on real processed data.
    • Visual Check: demo_patch_p03.png confirmed pupil-centered alignment after affine transform.
    • I/O Stability: Resolved HDF5 file locking issues.
  • Phase 3 Initialization:
    • Teacher Setup: Secured pre-trained resnet50.pt weights and verified inference accuracy.
    • Offline Distillation: Launched background batch label generation (src/data/batch_generate_labels.py) to pre-calculate teacher logits for all 15 participants.
    • Training Loop: Implemented src/train.py with Subject-level WeightedRandomSampler and dynamic weighting (AW Loss + KL Divergence).
    • LOPO Completion: Finished full 15-subject LOPO training. Mean MAE: 5.12°. Best fold (p11): 4.19°.
  • Study A-1 (Resolution Boost):
    • Objective: Reach < 4.2° MAE by increasing patch size to 16x16.
    • Status: IN PROGRESS. src/data/prepare_study_a1.py launched in background to generate _v16.h5 files with teacher labels.
    • Pipeline Updates: src/data/dataset.py and src/train.py updated to support --version_suffix.
  • Phase 4 Integration:
    • Smoothing: Implemented One Euro Filter ($1€ Filter$) in src/utils/filters.py for real-time jitter suppression.
    • Benchmarking: Implemented 3D Angular Error formula in src/utils/metrics.py.
    • Profiling: Verified 1.93 MFLOPs and ~0.8ms latency per frame on CPU (State A).
    • Live Demo: Created src/demo_live.py with multi-threaded potential and dual-state switching.
    • Refinement: Modified model and preprocessing to support variable resolutions (e.g., 16x16 study).
  • Cross-Dataset Validation (2026-06-03):
    • Strategy: Established "Test first, Fine-tune later" approach for open datasets (Gaze360, GazeCapture).
    • Verification: Successfully tested MediaPipe landmark recognition on "in-the-wild" samples (test_gaze.jpg) with 100% success rate.
    • Preprocessing: Verified that the Affine Normalization and Patch Extraction pipeline is robust to non-laboratory samples.
  • Gaze360 Integrity & Baseline Reset (2026-06-04):
    • Subject Splitting: Implemented strict isolation using person_identity. Group A (Train: 0, 1, 17, 25, 49, 61) vs Group B (Test: 60, 62).
    • Data Isolation: Updated src/data/preprocess_gaze360_robust.py to output separate _train_A.h5 and _test_B.h5 files.
    • Official Baseline: Established 10.69° MAE on clean Group B subset (Frontal +/- 45°) using coordinate correction (-1, -1).
    • Fair Comparison: All future domain adaptation results will be measured against this 10.69° reference point.

2. Technical Decisions

  • MediaPipe Tasks API: Chosen for modern compatibility and 478-point landmark support.
  • Grayscale Normalization: Minimizes computational load (< 45 MB target).
  • Residual Addition Fusion: Replaced concatenation with feature addition (App + Geo) to ensure tensor shape stability across State A/B.
  • Zero-Centering Geometry: Encourages the Coarse MLP to learn eye-shape rather than absolute positioning.
  • Adaptive Wing Loss: Chosen to resolve optical aliasing in low-resolution (8x8) conditions.
  • Offline Label Caching: Decided to store Teacher logits in HDF5 files during preprocessing to eliminate Teacher inference overhead during Student training.
  • Resolution Agnostic Architecture: Updated LIPEV2Student to handle varying patch sizes (8x8, 16x16) automatically via Adaptive Pooling.
  • Gaze360 Evaluation Strategy: Focus on "Frontal 20" subset to ensure fair comparison with MPIIGaze and minimize "Out-of-Distribution" noise.

3. Pending Tasks

  • Teacher Label Generation: Wait for background process (p07-p14) to complete.
  • Phase 3 Training: Execute full LOPO training on the complete distilled dataset.
  • Hardware Optimization: Implement cycle-specific weight freezing to hit the 45MB RAM target.
  • Gaze360 Subset Acquisition: Find a manageable mirror for Gaze360 metadata and images (avoiding 28GB overhead).
  • Zero-shot Cross-Dataset Test: Evaluate LIPE V2 on Gaze360 without re-training to benchmark generalization.

4. Current State

  • Phase 1 (Preprocessing): COMPLETED.
  • Phase 2 (Model Implementation): COMPLETED & VERIFIED.
  • Phase 3 (Training): IN PROGRESS (Label generation background task).
  • Phase 4 (Post-Processing): INITIALIZED (Filters and metrics implemented).