--- language: - en tags: - autonomous-vehicles - danger-anticipation - transformer - computer-vision - safety license: mit --- # PRECOG-HERALD: Proactive Danger Anticipation **Author:** Nikhil Upadhyay | MSc Business Analytics | Dublin Business School **Project:** [PRECOG-AV](https://github.com/TrazeMaG/PRECOG-AV) ## Overview HERALD v2 anticipates danger in driving scenes from ViT-B/16 camera features. Trained on 276,445 clips across 20 countries — the largest scale in accident anticipation research. Module 2 of the PRECOG system. ## Results ### PhysicalAI-AV (25 countries) | Metric | Value | |--------|-------| | Test AUC | **0.8805** | | Average Precision | **0.2593** | | Geographic Gap (GGG) | **-0.018** (better on unseen countries) | ### Standard Benchmarks | Benchmark | Metric | PRECOG | Previous Best | |-----------|--------|--------|---------------| | CCD | AP | **99.95%** | 99.80% (RARE) | | CCD | mTTA | **4.25s** | — | | DAD | mTTA | **3.83s** | 3.16s (LATTE) | Runs at **30 FPS** on a single RTX 4060 — 3x faster than real-time AV requirements. ## Usage ```python import torch import torch.nn as nn from huggingface_hub import hf_hub_download class HERALDv2(nn.Module): def __init__(self, n_frames=5): super().__init__() self.cls_token = nn.Parameter(torch.randn(1,1,768)) self.pos_embed = nn.Embedding(n_frames+1, 768) layer = nn.TransformerEncoderLayer( d_model=768, nhead=4, dim_feedforward=1536, dropout=0.3, batch_first=True, norm_first=True) self.transformer = nn.TransformerEncoder(layer, num_layers=2) self.cam_norm = nn.LayerNorm(768) self.obj_encoder = nn.Sequential( nn.Linear(7,64), nn.GELU(), nn.Dropout(0.3), nn.Linear(64,128), nn.GELU()) self.head = nn.Sequential( nn.Linear(896,256), nn.GELU(), nn.Dropout(0.3), nn.Linear(256,64), nn.GELU(), nn.Linear(64,1)) def forward(self, x, obj): B = x.shape[0] cls = self.cls_token.expand(B,-1,-1) x = torch.cat([cls,x],dim=1) pos = torch.arange(x.shape[1], device=x.device) x = x + self.pos_embed(pos) x = self.cam_norm(self.transformer(x)) return self.head(torch.cat([x[:,0], self.obj_encoder(obj)],dim=1)).squeeze(-1) path = hf_hub_download("Trazemag/PRECOG-HERALD", "herald_v2_best.pt") model = HERALDv2() model.load_state_dict(torch.load(path, map_location="cpu")) model.eval() # x: (1, N_FRAMES, 768) ViT-B/16 features # obj: (1, 7) object proximity stats — pass zeros for camera-only mode ``` ## Citation ```bibtex @misc{upadhyay2026precog, title = {PRECOG: Proactive Risk and Environmental Cognition for Autonomous Vehicles}, author = {Upadhyay, Nikhil}, year = {2026}, url = {https://github.com/TrazeMaG/PRECOG-AV} } ```