fotographer's picture
Fix model path models/voxel_scripted.pt
041aacc verified
|
Raw
History Blame Contribute Delete
7.03 kB
---
license: mit
language:
- en
tags:
- video-classification
- action-recognition
- minecraft
- pytorch
- conv3d
- interpretability
library_name: pytorch
pipeline_tag: video-classification
---
# VoxelMind
**3D-CNN + AffectionCell** for classifying Minecraft player actions from short grayscale video clips.
| | |
|---|---|
| **Input** | 22 frames × 64×64 grayscale → `[1, 1, 22, 64, 64]` |
| **Output** | 11 action classes |
| **Checkpoint** | AffectionCell `hid=24` · 2.58M params · 93.86% val acc |
| **Hardware tested** | AMD Radeon RX 6600 |
## Model description
VoxelMind uses a shared **Conv3D encoder** followed by an **AffectionCell** — a learnable N×N influence graph over `N = 64 × hid` spatial blocks. Unlike flat pooling or sequence heads, AffectionCell exposes **interpretable influence maps** (see `InferenceViz.py`).
**Classes:** `w`, `s`, `a`, `d`, `jump`, `idle`, `mouse_up`, `mouse_down`, `mouse_left`, `mouse_right`, `drop`
## Benchmark overview
Fair comparison against three baselines on the **same dataset, split, preprocessing, and encoder**:
- **582** training clips · **114** validation (stratified 20%, seed=42)
- AdamW lr=3e-4 · 100 epochs · input 22×64×64
- Measured on **AMD RX 6600**, batch=1, median over 200 runs after warmup
| Model | Params | Val acc | Macro-F1 | Latency | GPU FPS |
|-------|--------|---------|----------|---------|---------|
| **VoxelMind (AffectionCell, hid=24)** | **2,575,211** | **93.86%** | **93.08%** | 2.05 ms | 488 |
| LSTM head | 198,379 | 92.98% | 91.71% | 1.47 ms | 681 |
| Transformer (2 layers) | 165,291 | 91.23% | 90.29% | 1.58 ms | 633 |
| Linear head | 98,347 | 86.84% | 88.11% | 1.35 ms | 741 |
### Accuracy & latency
![Validation accuracy, macro-F1 and GPU latency](01_accuracy_latency.png)
*Best val accuracy: **93.86%** (VoxelMind). Best macro-F1: **93.08%**. LSTM trails by **0.88 pp**. End-to-end video pipeline: **~140 FPS** (I/O bound).*
### Model size & throughput
![Parameters, GPU throughput and summary table](02_params_throughput_table.png)
*VoxelMind: 2.58M params. LSTM: 198k (**13× smaller**, ~same accuracy). Linear: 98k, 741 FPS pure forward.*
| Model | Val acc | Params | GPU FPS | FPS/Mparam | Quality/M |
|-------|---------|--------|---------|------------|-----------|
| Conv3D + fc | 86.84% | 98k | 741 | 7530 | 6539 |
| Conv3D + 2-layer encoder | 91.23% | 165k | 633 | 3832 | 3496 |
| Conv3D + LSTM head | 92.98% | 198k | 681 | 3434 | 3193 |
| **AffectionCell hid=24** | **93.86%** | **2.58M** | **488** | **190** | **178** |
### Efficiency metrics
![Efficiency: FPS/Mparam and Quality/M](03_efficiency_metrics.png)
Custom metrics for deployment trade-offs:
- **FPS/Mparam** = GPU FPS ÷ (params / 1M) — pure inference speed per megaparam
- **Quality/M** = (val acc ÷ 100 × FPS) ÷ (params / 1M) — accuracy × speed per megaparam
| Winner | FPS/Mparam | Quality/M |
|--------|------------|-----------|
| Linear | **7533** | **6538** |
| LSTM | 3434 | 3191 |
| VoxelMind | 189 | 178 |
Linear is **~40×** more FPS-efficient than VoxelMind; LSTM is the best **accuracy/size** balance at 93% val.
### AffectionCell `hid` scaling
`hid` controls AffectionCell size: **N = 64 × hid** blocks, **N×N** connection matrix → params scale **O(hid²)**.
![Validation accuracy and parameters vs hid](05_hid_scaling.png)
| hid | Blocks N | Params | Val acc | FPS | FPS/M | Quality/M | Source |
|-----|----------|--------|---------|-----|-------|-----------|--------|
| 2 | 128 | 96k | ~75% | ~730 | 7604 | 5703 | estimate |
| 4 | 256 | 180k | ~82% | ~690 | 3833 | 3143 | estimate |
| 8 | 512 | 500k | ~82.5% | ~620 | 1240 | 1023 | estimate |
| 16 | 1024 | 1.20M | ~90% | ~530 | 442 | 398 | estimate |
| **24** | **1536** | **2.58M** | **93.86%** | **488** | **190** | **178** | **measured** |
![FPS/Mparam vs hid](04_fps_per_mparam_hid.png)
![hid scaling summary and recommendations](06_hid_summary.png)
**Choosing `hid`:**
| Use case | Recommendation |
|----------|----------------|
| Max accuracy (HF demo) | `hid=24` |
| Deployment (no viz needed) | LSTM @ 198k or `hid=4–8` |
| Edge / fastest | Linear @ 98k |
| Research / readable heatmaps | `hid=2–4` |
## Key findings
- **Best accuracy:** VoxelMind (+0.88 pp vs LSTM, +7.0 pp vs Linear)
- **Best speed/size:** Linear (26× fewer params than VoxelMind, 741 FPS)
- **Best trade-off:** **LSTM** — 92.98% val at 198k params
- **Unique feature:** only VoxelMind provides **N×N influence maps** (`InferenceViz.py`)
> Val set = 114 clips → metrics may vary ±5% between epochs. Numbers from `benchmark.py` re-eval on saved checkpoints.
## Inference speed (end-to-end)
| Pipeline | FPS (RX 6600) |
|----------|---------------|
| GPU forward only (VoxelMind) | ~488 |
| `Inference.py` (video I/O + overlay) | ~140 |
| `InferenceViz.py` (with heatmaps) | ~15–40 |
AffectionCell adds **+52% latency** vs Linear (2.05 vs 1.35 ms). Full video pipeline is mostly I/O-bound.
## Usage
Public inference uses a **TorchScript** export — no `Model.py` / `Affectors.py` required.
```bash
pip install -r requirements-hf.txt
# CLI
python hf_inference.py --model models/voxel_scripted.pt --video clip.mp4 --device cpu
```
```python
from hf_inference import load_model, predict_video
model = load_model("models/voxel_scripted.pt", device="cpu")
for action, prob in predict_video(model, "clip.mp4", topk=3):
print(f"{action}: {prob * 100:.1f}%")
```
**Input:** 22 consecutive frames, 64×64 grayscale (center crop from video).
**Output:** logits over 11 action classes (see table above).
### Live demo (Hugging Face Space)
Create a Space with `app.py` + `requirements-space.txt`. The demo downloads `voxel_scripted.pt` from this repo automatically.
```bash
pip install -r requirements-space.txt
python app.py
```
### Local development (full source — not on Hub)
Training, benchmarks, and AffectionCell visualization require the private codebase locally:
```bash
python Train.py
python InferenceViz.py --video clip.mp4
```
Regenerate the public TorchScript artifact after retraining:
```bash
python scripts/export_scripted.py
```
## Limitations
- Minecraft gameplay only; 582 training clips
- Confusable classes: `w``mouse_up`, `s``w` (similar motion at 64×64)
- `hid=24` → 2.5M params; val sawtooth on 114 clips suggests overfitting risk
- N×N heatmap at `hid=24` appears as dense noise after downscaling — use `hid=2–4` for viz
## Citation
```bibtex
@misc{voxelmind2026,
title={VoxelMind: Minecraft Action Recognition with AffectionCell},
author={fotographer},
year={2026},
}
```
## Files in this repo
| File | Description |
|------|-------------|
| `models/voxel_scripted.pt` | **Public** TorchScript checkpoint (inference without source) |
| `hf_inference.py` | Preprocessing + inference API |
| `app.py` | Gradio demo for HF Spaces |
| `requirements-hf.txt` | Minimal deps for inference |
| `config.json` | Model hyperparameters |
| `benchmark_results.json` | Raw benchmark numbers |