AHC Visual Intelligence Hackathon

Real-time video anomaly detection on a 6 GB laptop GPU

Traffic and CCTV footage in; what went wrong (11 classes, from accidents and fire to wrong-way driving and fights) and when it happened out. The rules ban hosted models at runtime. So a frozen SigLIP2 encoder and a ~0.4M-parameter trained head run on the device, about 38× faster than real time.

48.20 / 100public 34-video dev pack
0.0261real-time factor (3,391 s of video in 88.4 s)
6 GBRTX 4050 laptop GPU, fp16
0hosted model calls at runtime

System architecture

MP4 + manifestL1 · L2 · L3 videos Decode 2 fpsOpenCV Frozen SigLIP2ViT-B/16 · fp16 Embedding cache.npz · resumable L1 · ClipHeadwhole clip → class / normal L2/L3 · windowed3 s windows · 1 s stridemerge · expand 1.25×snap to changepoints Explain + validate→ submission.json

Measured results

Bar chart: Level 1 scored 18.23 of 25, Level 2 21.97 of 35, Level 3 8.00 of 40; ablation: with changepoint snap 48.20, without 46.56, full-interval reclassify 45.46

Level 2 found 5 of 18 events. On video T028 it matched all four with IoUs 0.87, 0.67, 0.64 and 0.67. Over the scorer-sensitivity grid the result ranges from 48.20 to 54.49 (median 50.49), and a change had to raise the grid minimum before it shipped.

Bar chart: 3391 seconds of video processed in 88.36 seconds, RTF 0.0261

What was tried and rejected

ExperimentMeasured outcomeDecision
Temporal Conv/Transformer head trained on synthetic spliced sequencesP 0.39% · R 5.8% · FA on 39.3% of normal videosrejected
Full-interval reclassification of merged windows45.46 grid-min (vs 48.20)disabled
768-config Level-3 window/threshold searchbest = 48.20 (no gain)no change
Changepoint edge snapping+1.64 on grid-minshipped

Output

One JSON entry per video. Normal videos are an empty event list, Level-1 events carry no timestamps, and every entry records its own runtime. The schema is enforced in types.py and checked by validate.py before every upload.

Explanations come from deterministic templates, so the reasoning bonus never costs a network call or latency.

{
  "video_id": "E014",
  "events": [{
    "class_name": "smoke",
    "start_time_sec": 42.0,
    "end_time_sec": 57.5,
    "score": <head confidence>,
    "explanation": "Thick smoke observed
                    from 42.0s to 57.5s."
  }],
  "runtime_metadata": {
    "frames_processed": …,
    "chunks_processed": …,
    "end_to_end_internal_time_ms": …
  }
}

Schema example. The times show the template format and are not a recorded prediction.

Why there is no upload-a-video demo

The detector needs a CUDA GPU, the trained head checkpoint and the competition footage, which isn't mine to redistribute. None of these fits on free hosting. Every number on this page is a measured result from ARCHITECTURE.md. Nothing is simulated.