Beyond ADAS — collision anticipation inference for dashcam video
Project description
BADAS - Beyond ADAS
BADAS (Beyond ADAS) is a deep learning framework for predicting collision likelihood in dashcam video sequences. It supports multiple vision transformer backbones and deployment formats optimized for real-time inference.
Installation
pip install badas
Optional extras for faster video decoding or alternative backends:
pip install decord # Fast video decoding (falls back to OpenCV)
pip install onnxruntime-gpu # ONNX backend
Quick Start
from badas.inference import BADAS, BADASConfig
predictor = BADAS.from_pretrained("nexar-ai/BADAS-Open")
# Batch prediction on a video
results = predictor.predict_video("dashcam.mp4", stride=1)
for r in results:
print(f"[{r['timestamp']:.2f}s] {r['risk_level']:<6} p={r['probability']:.3f}")
# Streaming / moving-window inference
for pred in predictor.predict_stream("dashcam.mp4", stride=1):
if pred['probability'] > 0.7:
print(f"WARNING: High collision risk at {pred['timestamp']:.2f}s")
Prediction Output
Each prediction is a dict:
{
'frame_index': 100,
'timestamp': 4.17,
'probability': 0.823,
'risk_level': 'high', # 'low' | 'medium' | 'high'
'smoothed': True,
}
Inference Backends
| Format | Load | Notes |
|---|---|---|
.ckpt / .pt |
BADAS("model.ckpt") |
Full model + config, supports torch.compile |
.onnx |
BADAS("model.onnx") |
CPU/GPU via ONNX Runtime |
.trt / .engine |
BADAS("model.trt") |
NVIDIA GPU, lowest latency |
Configuration
from badas.inference import BADAS, BADASConfig, SmoothingConfig
config = BADASConfig(
use_compile=True, # torch.compile — slow first run, fast thereafter
startup_ramp=True, # yield predictions before the full window is buffered
smoothing=SmoothingConfig(
enabled=True,
alpha_rise=0.7, # smoothing when risk increases
alpha_fall=0.3, # smoothing when risk decreases
),
)
predictor = BADAS("model.ckpt", config=config)
Available Models
Open Source
| Model | Size | Notes |
|---|---|---|
nexar-ai/BADAS-Open |
ViT-L | Publicly available |
predictor = BADAS.from_pretrained("nexar-ai/BADAS-Open")
Commercial (Nexar)
| Model | Params | Architecture | Notes |
|---|---|---|---|
nexar-ai/badas-2.0 |
330M | ViT-L | Best accuracy |
nexar-ai/badas-2.0-flash |
86M | ViT-B | Fast, default |
nexar-ai/badas-2.0-flash-lite |
22M | ViT-S | Fastest |
nexar-ai/badas-1.0 |
330M | ViT-L | Previous version |
To request access, visit nexar-ai.com/badas.
Inference API
For production use, BADAS is available as a hosted REST API at https://badas-api.corp.nexars.ai.
The BADASClient handles uploads, async job queuing, SSE streaming, and progress bars.
Installation
requests and tqdm are included in the base badas package — no extra install needed.
Setup
from badas.client import BADASClient
client = BADASClient(api_key="nxr_live_...")
# Check that models are ready
health = client.health()
print(health["status"], health["models_loaded"])
Predict (blocking)
Submits an async job and polls until complete. Returns a list of prediction dicts.
preds = client.predict("dashcam.mp4")
for p in preds:
print(f"[{p['timestamp']:.2f}s] {p['risk_level']:<6} p={p['probability']:.3f}")
Stream (window-by-window)
Yields each prediction as soon as its window is processed. Reconnects automatically if the gateway drops the connection.
for pred in client.stream("dashcam.mp4"):
print(f"[{pred['timestamp']:.1f}s] {pred['risk_level']} ({pred['probability']:.0%})")
Async job (submit / poll / stream)
# Submit returns a job ID immediately — processing runs in the background
job_id = client.submit("dashcam.mp4")
# Stream results as they arrive
for pred in client.stream_job(job_id):
...
# Or wait for completion and get all results at once
preds = client.poll_job(job_id)
Inference options
| Parameter | Default | Description |
|---|---|---|
model |
badas-2.0-flash |
Model ID (see table above) |
stride |
1 |
Window stride in model-fps frames |
threshold |
0.75 |
Risk score that triggers heatmaps / VLM descriptions |
heatmaps |
"none" |
"none" | "threshold" | "always" |
describe |
False |
VLM hazard description on trigger windows (auto-sets heatmaps="threshold") |
include_maps |
False |
Include raw hazard_map / attention_map arrays |
progress |
True |
Show tqdm progress bar (adapts to notebook / CLI) |
All options are available on predict, stream, and submit.
Heatmaps and VLM descriptions
import numpy as np
for pred in client.stream(
"dashcam.mp4",
describe=True, # VLM hazard description for high-risk windows
threshold=0.8, # trigger threshold for heatmaps + descriptions
include_maps=True,
):
if pred.get("hazard_map") is not None:
pred["hazard_map"] = np.array(pred["hazard_map"]) # H×W float array
if pred.get("description"):
print(f"[{pred['timestamp']:.1f}s] {pred['description']}")
Large files (> 50 MB)
Files above 50 MB are automatically uploaded to GCS via a signed URL before inference — no changes needed in calling code.
Model comparison
for model_id in ["nexar-ai/badas-2.0", "nexar-ai/badas-2.0-flash", "nexar-ai/badas-2.0-flash-lite"]:
preds = client.predict("dashcam.mp4", model=model_id)
peak = max(p["probability"] for p in preds)
print(f"{model_id}: {len(preds)} windows, peak={peak:.3f}")
Available models
| Model | Params | Architecture | Notes |
|---|---|---|---|
nexar-ai/badas-2.0 |
330M | ViT-L | Best accuracy |
nexar-ai/badas-2.0-flash |
86M | ViT-B | Fast, default |
nexar-ai/badas-2.0-flash-lite |
22M | ViT-S | Fastest |
nexar-ai/badas-1.0 |
330M | ViT-L | Previous version |
Citation
@article{goldshmidt2025badas,
title={BADAS: Context Aware Collision Prediction Using Real-World Dashcam Data},
author={Goldshmidt, Roni and Scott, Hamish and Niccolini, Lorenzo and
Zhu, Shizhan and Moura, Daniel and Zvitia, Orly},
journal={arXiv preprint},
year={2025}
}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file badas-1.1.3.tar.gz.
File metadata
- Download URL: badas-1.1.3.tar.gz
- Upload date:
- Size: 240.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55411360149a3f005146145a5a244bdd380bce047ef497eb6a09618f39d6407b
|
|
| MD5 |
1135b9702c5edde792cb2fc4429c62ed
|
|
| BLAKE2b-256 |
69653be9f05752598d46f452a2e5a86bb16fb0faa7142d64beea147b95566f3d
|
File details
Details for the file badas-1.1.3-py3-none-any.whl.
File metadata
- Download URL: badas-1.1.3-py3-none-any.whl
- Upload date:
- Size: 245.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6ddbf860bbd2ca4f5cbf8c3a1c78fda13be313a80333ba1b2eb919ac577eda8
|
|
| MD5 |
7ef8a4bd893807ba8dc58a7a00ae9920
|
|
| BLAKE2b-256 |
0bbffbfb15ce4e462078dbb621164f4a0c287bf416b64089cbfb67347d2487d9
|