Views
No views yet
jmportilla/ais-major-scratch-10k is an experimental AIS-style motion in-betweening checkpoint for the Animaj/MIB rig-controller dataset format. It was trained from scratch with a modified AIS-BiLSTM architecture designed to improve timing awareness and reduce noisy per-controller gating behavior.motionib code in this project.AnimajSAS/AIS_BI_LSTM_v0, this checkpoint uses:model.type = improved_ais_bilstmphase, segment_len, dist_prev, and dist_next.
These tell the prediction heads where the frame sits between the previous and next observed keypose.64 beta groups and expands them across the controller vector. The goal is to reduce noisy per-dimension gate switching and encourage related controller dimensions to choose interpolation-vs-synthesis behavior more coherently.alpha, p_interp, p_synth, beta, and final pred, so it remains close to the AIS design while adding improved inductive bias.0.050.010.0010.00110.01model:
2 type: improved_ais_bilstm
3 pose_dim: 596
4 input_dim: 597
5 temporal_dim: 4
6 hidden_size: 512
7 num_layers: 2
8 dropout: 0.3003
9 synthesis_hidden: 1024
10 beta_groups: 641max_steps: 10000
2batch_size: 8
3gradient_accumulation_steps: 8
4optimizer: AdamW
5lr: 0.0001
6weight_decay: 0.001runs/ais_major_scratch_10k/checkpoints/best.ptmotionib.official_benchmark adapter using the full available public benchmark splits:held_out_algorithmic: 201 clipsheld_out_random: 201 clips, 90% random maskingproduction: 56 clipsanimaj-lab/mib-ais Lightning evaluator remains the final oracle for paper-level claims.| Test set | Model | Clips | Shifted distance | NPSS | Missing L1 | Full L1 |
|---|---|---|---|---|---|---|
| held_out_algorithmic | base | 201 | 0.465652 | 2.182326 | 0.024197 | 0.021374 |
| held_out_algorithmic | improved fine-tune | 201 | 0.221540 | 0.897697 | 0.011201 | 0.009611 |
| held_out_algorithmic | major scratch 10k | 201 | 0.211539 | 0.901307 | 0.012029 | 0.010211 |
| held_out_random | base | 201 | 0.367792 | 1.359091 | 0.021008 | 0.018642 |
| held_out_random | improved fine-tune | 201 | 0.310235 | 1.326799 | 0.017078 | 0.015172 |
| held_out_random | major scratch 10k | 201 | 0.293350 | 1.266688 | 0.016796 | 0.014917 |
| production | base | 56 | 0.257322 | 0.671743 | 0.016206 | 0.012205 |
| production | improved fine-tune | 56 | 0.165956 | 0.485759 | 0.011167 | 0.008027 |
| production | major scratch 10k | 56 | 0.156249 | 0.493669 | 0.010951 | 0.007838 |
major_scratch_10k improves over the released base checkpoint by:| Test set | Shifted distance | NPSS | Missing L1 | Full L1 |
|---|---|---|---|---|
| held_out_algorithmic | -54.6% | -58.7% | -50.3% | -52.2% |
| held_out_random | -20.2% | -6.8% | -20.1% | -20.0% |
| production | -39.3% | -26.5% | -32.4% | -35.8% |
major_scratch_10k has the best shifted distance on all three test sets.major_scratch_10k has the best NPSS on held_out_random.held_out_algorithmic and production.major_scratch_10k has the best missing-frame L1 on held_out_random and production.model.pt
PyTorch training checkpoint.training_config.yaml
Full training configuration for this checkpoint.official_protocol_summary_metrics.csv
Aggregate benchmark metrics for the full available benchmark splits.official_protocol_clip_metrics.csv
Per-clip benchmark metrics.README.md
This model card.1import torch
2from motionib.models.improved_ais import build_improved_ais_bilstm
3
4checkpoint = torch.load("model.pt", map_location="cpu", weights_only=False)
5model = build_improved_ais_bilstm(checkpoint["config"]["model"], device="cpu")
6model.load_state_dict(checkpoint["model"])
7model.eval()motionib training code:input_seq: shape [batch, time, 597]
596 masked controller dimensions plus one missing-frame mask channel.prev_pose: shape [batch, time, 596]
Previous observed keypose pose for each frame.next_pose: shape [batch, time, 596]
Next observed keypose pose for each frame.temporal_features: shape [batch, time, 4]
phase, segment_len, dist_prev, dist_next.observed_mask: optional shape [batch, time]
Used to hard-copy observed keyposes at inference.keypose_values: optional shape [batch, time, 596]
Ground-truth values at observed keypose frames.1with torch.no_grad():
2 output = model(
3 input_seq,
4 prev_pose,
5 next_pose,
6 temporal_features=temporal_features,
7 observed_mask=observed_mask,
8 keypose_values=keypose_values,
9 )
10
11predicted_sequence = output["pred"]1python -m motionib.official_benchmark \
2 --config configs/train/ais_repro.yaml \
3 --checkpoint base=artifacts/hf_model/model.safetensors \
4 --checkpoint improved=runs/ais_improved_from_base_10k/checkpoints/best.pt \
5 --checkpoint major_scratch=model.pt \
6 --test-set all \
7 --max-clips 0 \
8 --device auto \
9 --output-dir reports/official_protocol_compare_full10,000 steps from scratch. Longer scratch training may improve results.AnimajSAS/AIS_BI_LSTM_v0 release. The architecture here is a local experimental variant that keeps the AIS interpolation/synthesis idea while adding temporal conditioning and grouped gate structure.