Multimodal Machine Learning Approach for Real-Time Critical Driving Situation Recognition in Preventive Driver Assistance Systems
Neural-Navi is a research project that combines camera data and vehicle telemetry to detect critical driving situations in real-time. The system predicts braking and coasting events 1-5 seconds in advance while considering realistic hardware constraints for automotive deployment. By successfully predicting necessary braking in the future, we can make driving more economic and safe.
π¬ OBD-II Reverse Engineering
- Successfully extracted proprietary brake signals via Mode 22 command discovery (
b"223F9F") - Binary brake state extraction with physical pedal validation as ground truth
π Extreme Imbalance Handling
- Focal loss configuration addresses 1:36 brake event ratio (2.8% positive rate)
- brake_1s: PR-AUC = 0.203 (7.25Γ improvement over random baseline 0.028)
- coast_1s: PR-AUC = 0.740 with 1:14 ratio (7.1% positive rate)
ποΈ Modular Architecture Evaluation
- Systematic comparison of 12 Encoder/Fusion/Decoder combinations
- Transformer > LSTM: Superior performance, stability, and generalization
- Simple concatenation fusion outperforms complex attention mechanisms in training stability
β‘ Hardware-Aware Performance
- Pipeline Latency (Raspberry Pi 5): YOLO 92.3% (123ms) + Multimodal 5.4% (7ms) = 133ms total
- Mixed Precision: 29% speedup for Transformer, degradation for LSTM
- Memory: <1.4GB total (within Raspberry Pi 5 8GB constraints)
π§ Temporal Attention Insights
- Recency Bias: 0.36-0.44 attention weight on last 5 positions vs 0.14-0.18 on first 5
- Position 19 Convergence: All Transformer layers focus on final timestep
- Local Context Priority: Short-term dependencies more relevant than long-range for brake prediction
π Prediction Horizon Analysis
- Dramatic Performance Drop: 88% degradation from 1s to 5s prediction horizons
- Optimal Horizons: 1s and 2s provide best accuracy/utility trade-off for preventive systems
-
Clone repository:
git clone https://github.com/floriankulig/neural-navi.git cd neural-navi -
Create virtual environment:
python -m venv venv --system-site-packages # Raspberry Pi OS (keeps Picamera2) # or python -m venv venv # Windows/Mac/Linux
-
Activate virtual environment:
source venv/bin/activate # Linux/Mac # or .\venv\Scripts\activate # Windows
-
Install dependencies:
pip install -e .
# Using Makefile (recommended)
make record
# Direct execution
python record_drive.py# Interactive viewer
make detect
# or: python detect_vehicles.py --recordings data/recordings# Train single architecture
make train-single-arch ARCH=simple_concat_transformer
# Evaluate trained models
make evaluate-multimodalneural-navi/
βββ record_drive.py # π― Driving data recording
βββ detect_vehicles.py # π Vehicle detection in recordings
β
βββ src/ # π§ Core Application Code
β βββ recording/ # Data acquisition (camera, telemetry hardware access)
β βββ processing/ # Data preprocessing & feature engineering
β β βββ features/ # Derived features (gear, brake force)
β βββ model/ # Neural network architectures
β β βββ encoder.py # Input encoders (Simple, Attention)
β β βββ fusion.py # Fusion modules (Concat, Cross-Attention, Query)
β β βββ decoder.py # Output decoders (LSTM, Transformer)
β β βββ factory.py # Model factory for different configurations
β β βββ loss.py # Unified focal loss system
β βββ utils/ # Utilities (config, device setup, helpers)
β
βββ training/ # π§ Training Pipeline & Experiments
β βββ datasets/ # Dataset preparation (Boxy, multimodal)
β β βββ data_loaders.py # HDF5-based efficient data loading
β β βββ boxy_prep... # Boxy dataset preprocessing
β βββ yolo/ # YOLO training for vehicle detection
β βββ multimodal/ # Multimodal model training
β βββ prepare_dataset.py # H5 dataset preparation
β βββ train_single.py # Single architecture training
β βββ auto_annotate.py # YOLO-based annotation
β
βββ evaluation/ # π Metrics, visualization & analysis
βββ tests/ # π Development test scripts (access to ECU, sensor sync, etc.)
βββ jobs/ # π₯οΈ SLURM job scripts for cluster computing
βββ data/ # π Datasets, models, recordings
βββ ... # see below
data/ # πΎ Data storage (gitignored)
βββ cache/ # Temporary processing cache
βββ datasets/ # Dataset storage
β βββ processed/ # Processed datasets ready for training
β β βββ annotations/ # Annotated recording data
β β βββ boxy_yolo_n1/ # Boxy dataset in YOLO format (1 class)
β β βββ nuimages_yolo/ # NuImages dataset in YOLO format
β βββ raw/ # Raw dataset files (Boxy, NuImages)
β βββ boxy_labels.json # Boxy dataset labels
β βββ dataset.yaml # YOLO dataset configuration
βββ models/ # Trained model checkpoints
β βββ yolo/ # Best YOLO model checkpoints
β βββ multimodal/ # Multimodal model checkpoints
βββ recordings/ # Raw driving recordings
βββ YYYY-MM-DD_HH-MM-SS/ # Recording sessions (timestamped)
βββ telemetry.csv # OBD-II data with derived features
βββ future_labels.csv # Ground truth future labels for multimodal training (once generated)
βββ annotations.csv # YOLO detection results
βββ *.jpg # Camera frames
This project develops a multimodal Machine Learning approach for real-time critical driving situation detection as part of automotive AI research.
- How can camera and vehicle telemetry data be combined for improved predictions?
- What are the computational constraints of real-time processing on embedded hardware?
- How do different neural architectures perform under latency constraints?
- Hardware-Aware Design: Optimized for Raspberry Pi deployment (~133ms total pipeline)
- Modular Architecture: Systematically comparable encoder/fusion/decoder combinations
- Real-World Data: Custom dataset from German Autobahn driving
- Synchronized Multimodal Capture: Camera + OBD-II with <5ms synchronization
For detailed information about specific components, see:
- Source Code Documentation - Model architectures, configuration system
- Training Pipeline - Dataset preparation, training workflows
- Evaluation Framework - Scientific metrics, benchmarks, analysis tools
# Recommended stable configuration
BEST_CONFIG = {
"encoder_type": "simple", # Baseline with independent processing
"fusion_type": "concat", # Efficient concatenation-based fusion
"decoder_type": "transformer", # Superior performance vs LSTM
"embedding_dim": 64,
"hidden_dim": 128,
"dropout_prob": 0.15
}Modular Combinatorics for Ablation Studies:
# Systematic evaluation of all architecture combinations
architectures = {
"encoders": ["simple", "attention"],
"fusion": ["concat", "cross_attention", "query"],
"decoders": ["lstm", "transformer"]
}
# β 2 Γ 3 Γ 2 = 12 architecture variants for comparison
# Create model via Factory Pattern
from src.model.factory import create_model_variant
model = create_model_variant(config)- Total Sequences: 42,686 (from 12 recordings, 43,104 frames)
- Brake Events: 1,200 sequences (2.8% - extreme imbalance, ratio 1:36)
- Coast Events: ~3,050 sequences (7.1% - moderate imbalance, ratio 1:14)
- Dataset Splits: 70.4% train / 19.5% val / 10.1% test (recording-based)
- Sequence Length: 20 frames (10 seconds at 2Hz)
PREDICTION_TASKS = [
"brake_1s", # Primary safety task (2.8% positive rate)
"brake_2s", # Secondary safety task
"coast_1s", # Primary efficiency task (7.1% positive rate)
"coast_2s" # Secondary efficiency task
]- Focal Loss: Addresses extreme class imbalance with task-specific Ξ±/Ξ³ parameters
- Task Weighting: Safety-critical tasks prioritized over efficiency tasks
- Multi-Task Learning: Simultaneous prediction across multiple horizons
# Prepare Boxy dataset
sbatch jobs/boxy_prepare.slurm
# YOLO training
sbatch jobs/boxy_train.slurm
# YOLO validation
sbatch jobs/val_yolo.slurm
# Multimodal pipeline
sbatch jobs/multimodal_pipeline_full.slurm
# Train specific architecture
sbatch --export=ARCHITECTURE=simple_concat_transformer jobs/multimodal_train_single.slurm
# Evaluate models
sbatch jobs/multimodal_evaluate.slurm- New Model Architecture: Add to
src/model/(see Source Documentation) - New Data Processing: Add to
src/processing/ - New Training Script: Add to
training/with corresponding SLURM job (see Training Documentation) - New Evaluation Metrics: Add to
evaluation/(see Evaluation Documentation)
- Recommended: Raspberry Pi 5 (8GB RAM)
- Development: Modern laptop/desktop with GPU for training
Component Latency Memory Details
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Camera Capture ~2.5ms ~10MB PiCamera2 1080p
YOLO Inference (YOLOv12n) ~123ms ~960MB Hardware bottleneck
Telemetry Processing ~2ms ~1MB OBD-II + Features
Multimodal Model ~7ms ~430MB Transformer + Mixed Precision
Decision Making ~1ms ~1MB Logic Layer
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Total Pipeline ~133ms ~1.4GB Real-Time Capable
Key Insights:
- YOLO dominates pipeline latency (92.3%) - primary optimization target
- Multimodal model contributes <6% to total latency
- Memory requirements well within Raspberry Pi 5 constraints
- GPU Memory: 4-16GB recommended for full dataset
- Batch Size: 256 (optimized for Nvidia A100 GPUs)
- Mixed Precision: Enabled for faster training
- β Feature Engineering (Gear detection, brake force estimation)
- β OBD-II Reverse Engineering (Proprietary brake signal extraction)
- β Data Recording System (Camera + OBD-II)
- β YOLO Vehicle Detection (Finetuned on Boxy dataset)
- β Modular Model Architecture (Encoder/Fusion/Decoder)
- β Multimodal Training Pipeline (Full H5-based pipeline with focal loss)
- β Dataset Preparation (42,686 sequences from 12 recordings)
- β Systematic Architecture Evaluation (Transformer > LSTM validated)
- β Scientific Evaluation Framework (PR-AUC focus, hardware benchmarks)
- β³ Sampling Strategy (Training) (Planned)
Note: This is a research project focused on automotive AI safety systems. It is not intended for production use in vehicles without proper safety validation and certification.