MoViNet-A0 Streaming Event Detector

Causal frame-level event detector for deciding when a streaming VLM should process a newly arriving frame. It uses MoViNet-A0 Stream at 2 FPS and emits one of three scheduler labels:

ID Label Meaning
0 no_change The current semantic state continues.
1 visual_only Camera, shot, fade, or zoom change.
2 semantic_update Action, actor, object, or semantic state changes.

The PyTorch input is [batch, time, 3, 172, 172]. The repository includes the trained state dictionary, training metadata, source required to load it, and an FP16 ExecuTorch QNN artifact compiled for Snapdragon 8 Elite (SM8750).

The published checkpoint is the best epoch from a 20-epoch unfrozen-backbone run on the locally available Kinetics-GEBD subset. Validation accuracy was 0.601523 and macro-F1 was 0.511131. This is a research checkpoint rather than a full-corpus state-of-the-art claim.

import sys
from pathlib import Path

import torch
from huggingface_hub import snapshot_download

root = Path(snapshot_download("kfkas/movinet-a0-streaming-event-detector"))
sys.path.insert(0, str(root / "src"))

from vlm_eval.events.modeling import MoViNetStreamingEventDetector

model = MoViNetStreamingEventDetector(
    pretrained=False,
    freeze_backbone=False,
).eval()
model.load_state_dict(
    torch.load(root / "event_detector.pt", map_location="cpu", weights_only=True)
)
logits = model(torch.rand(1, 4, 3, 172, 172)).logits

The QNN graph has the fixed streaming ABI:

frame       [1, 3, 172, 172]
frame_state [1, 3, 3, 172, 172]
    -> logits     [1, 3]
    -> next_state [1, 3, 3, 172, 172]

frame_state contains the previous three RGB frames. This explicit fixed-shape contract is portable across ExecuTorch invocations; it is not MoViNet's variable collection of internal activation buffers.

On a Galaxy SM-S938N (SM8750), PyTorch-to-device parity was logits cosine 0.999988, logits max absolute error 0.000795, next-state cosine 0.999999, and matching argmax labels. QAIRT 2.37 delegates 2D compute through QNN HTP while unsupported 5D causal operations use ExecuTorch CPU fallback.

Training annotations are available at kfkas/streaming-gebd-causal, kfkas/kinetics-geb-plus-causal, and kfkas/epic-kitchens-100-causal. Those repositories contain metadata and source-video references, not redistributed videos.

Architecture and pretrained weights follow MoViNets and the MIT-licensed Atze00/MoViNet-pytorch port.

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

Paper for kfkas/movinet-a0-streaming-event-detector