STP: Spatiotemporal Predictive Pre-training for Robotic Motor Control

Pre-trained visual encoder for robotic manipulation, from the paper published in International Journal of Computer Vision (2026): 10.1007/s11263-026-02948-3

Official code: MCG-NJU/STP

STP pre-trains a plain image ViT on large-scale egocentric video (Ego4D / EgoClip), with no language, action, depth or teacher supervision. It jointly learns content and motion features by reconstructing the masked current frame and the masked future frame, using a shared encoder with decoupled dual decoders.

At evaluation the encoder is frozen, both decoders are discarded, and the [CLS] token is used as the visual representation for downstream policy learning.

Files

Both checkpoints are the ViT-B/16 model pre-trained on the EgoClip subset of Ego4D (3.8 M clips) for 50 epochs.

file size contents
stp_vitb.pth ~558 MiB model weights (encoder + both decoders), 146.34 M parameters
stp_vitb_encoder.pth ~327 MiB decoder-free encoder, for use with a plain timm ViT
config.json small architecture and pre-training recipe
models_stp.py, util/ small model definition, so this repo is self-contained
loader.py small minimal STPEncoder wrapper

Architecture

encoder ViT-B/16, 12 layers, 12 heads, 768 dim, fixed sincos positional embedding
spatial decoder 8 blocks, 16 heads, 512 dim, transformer encoder blocks
temporal decoder 8 blocks, 16 heads, 512 dim, self-attention + cross-attention + FFN
input 224 × 224, ImageNet normalisation

The spatial branch masks the current frame at 75% and reconstructs it. The temporal branch masks the future frame at 95% and reconstructs it, conditioned on the current-frame feature Z_c used as a fixed key/value, so the future-frame query cannot write back into the current-frame representation.

Usage

import torch
from models_stp import mae_vit_base_patch16
from huggingface_hub import hf_hub_download

path = hf_hub_download('yangjiange/STP', 'stp_vitb.pth')
model = mae_vit_base_patch16()
model.load_state_dict(torch.load(path, map_location='cpu')['model'], strict=True)
model.eval()

# images: (N, 3, 224, 224), ImageNet-normalised -> (N, 768)
feats = model.forward_features(images)

Concatenate multi-view and multi-frame features in the channel dimension together with the robot's proprioceptive state, then train the policy. STP does not constrain the policy architecture.

Citation

@Article{Yang2026STP,
  author  = {Jiange Yang and Bei Liu and Jianlong Fu and Bocheng Pan
             and Gangshan Wu and Limin Wang},
  journal = {International Journal of Computer Vision},
  title   = {Spatiotemporal Predictive Pre-training for Robotic Motor Control},
  year    = {2026},
  volume  = {134},
  doi     = {10.1007/s11263-026-02948-3},
}

License

Apache-2.0.

Downloads last month
36
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support