Upload README.md with huggingface_hub
Browse files
README.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
tags:
|
| 4 |
+
- melee
|
| 5 |
+
- smash-bros
|
| 6 |
+
- imitation-learning
|
| 7 |
+
- game-ai
|
| 8 |
+
- pytorch
|
| 9 |
+
pretty_name: "MIMIC: Melee Imitation Model for Input Cloning"
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
# MIMIC Checkpoints (No Opponent Inputs)
|
| 13 |
+
|
| 14 |
+
Trained model checkpoints from the [MIMIC](https://github.com/erickfm/MIMIC) project — an imitation-learning bot that predicts human controller inputs from game state in Super Smash Bros. Melee.
|
| 15 |
+
|
| 16 |
+
These checkpoints are from the **Phase 4: No Opponent Inputs** sweep, which removes opponent controller inputs (buttons, analog, c-stick) from the model's feature space to eliminate train-test distribution mismatch when playing against CPUs.
|
| 17 |
+
|
| 18 |
+
Trained on [erickfm/frame-melee](https://huggingface.co/datasets/erickfm/frame-melee) (~95k tournament replays).
|
| 19 |
+
|
| 20 |
+
## Model Details
|
| 21 |
+
|
| 22 |
+
| Setting | Value |
|
| 23 |
+
|---------|-------|
|
| 24 |
+
| Architecture | Transformer encoder (768d, 4 layers, hybrid16 frame encoder) |
|
| 25 |
+
| Parameters | ~32M |
|
| 26 |
+
| Positional encoding | Learned |
|
| 27 |
+
| Stick loss | MSE |
|
| 28 |
+
| Button loss | BCE |
|
| 29 |
+
| Feature | `--no-opp-inputs` (opponent controller inputs removed) |
|
| 30 |
+
|
| 31 |
+
## Checkpoints
|
| 32 |
+
|
| 33 |
+
Files in `checkpoints/no-opp-inputs/`:
|
| 34 |
+
|
| 35 |
+
| File | Context | Steps | Best val/total |
|
| 36 |
+
|------|---------|-------|---------------|
|
| 37 |
+
| `noi_ctx60_65k_machA.pt` | 60 frames | 65K | ~0.07 |
|
| 38 |
+
| `noi_ctx60_80k_machA.pt` | 60 frames | 80K | ~0.07 |
|
| 39 |
+
| `noi_ctx60_80k_machB.pt` | 60 frames | 80K | ~0.07 |
|
| 40 |
+
| `noi_ctx60_120k_machB.pt` | 60 frames | 120K | ~0.07 |
|
| 41 |
+
| `noi_ctx180_65k_machB.pt` | 180 frames | 65K | ~0.05-0.07 |
|
| 42 |
+
| `noi_ctx180_65k_machC.pt` | 180 frames | 65K | ~0.05-0.07 |
|
| 43 |
+
| `noi_ctx180_80k_machC.pt` | 180 frames | 80K | ~0.08 |
|
| 44 |
+
| `noi_ctx180_120k_machC.pt` | 180 frames | 120K | ~0.08 |
|
| 45 |
+
|
| 46 |
+
Note: Multiple runs wrote to the same checkpoint directory, so each file is from whichever seed finished last at that step count.
|
| 47 |
+
|
| 48 |
+
## Loading
|
| 49 |
+
|
| 50 |
+
```python
|
| 51 |
+
import torch
|
| 52 |
+
from model import FramePredictor, ModelConfig
|
| 53 |
+
|
| 54 |
+
ckpt = torch.load("checkpoint.pt", map_location="cpu")
|
| 55 |
+
cfg = ModelConfig(**ckpt["config"])
|
| 56 |
+
model = FramePredictor(cfg)
|
| 57 |
+
model.load_state_dict(ckpt["model_state_dict"])
|
| 58 |
+
model.eval()
|
| 59 |
+
|
| 60 |
+
# Normalization stats for inference
|
| 61 |
+
norm_stats = ckpt["norm_stats"]
|
| 62 |
+
```
|
| 63 |
+
|
| 64 |
+
## Earlier Checkpoints
|
| 65 |
+
|
| 66 |
+
Phase 1-3 checkpoints (with opponent inputs): [erickfm/frame-checkpoints](https://huggingface.co/erickfm/frame-checkpoints)
|
| 67 |
+
|
| 68 |
+
## Related
|
| 69 |
+
|
| 70 |
+
- [MIMIC](https://github.com/erickfm/MIMIC) — Training and inference code
|
| 71 |
+
- [erickfm/frame-melee](https://huggingface.co/datasets/erickfm/frame-melee) — Full training dataset (~95k replays, 86 GB)
|
| 72 |
+
- [erickfm/frame-melee-subset](https://huggingface.co/datasets/erickfm/frame-melee-subset) — 1k replay subset for quick experiments
|
| 73 |
+
|
| 74 |
+
## License
|
| 75 |
+
|
| 76 |
+
MIT
|