PRECOG-HERALD / README.md
Trazemag's picture
Upload README.md with huggingface_hub
5479556 verified
|
Raw
History Blame Contribute Delete
2.85 kB
---
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}
}
```