This repository hosts the trained model weights for SiteSense — a real-time pipeline that detects, tracks, identifies, and classifies the activity of heavy construction equipment from drone/aerial video footage.
The system processes each frame through a multi-phase pipeline:
Video Frame → Detector (RF-DETR or YOLO26-L) → BoT-SORT Tracking → DINOv3 Re-ID → Activity Classification → Kafka Events
Two interchangeable detectors are provided. Switch at runtime via the DETECTOR_TYPE environment variable (rfdetr or yolo) — no rebuild required.
Model Weights
File
Size
Architecture
Task
Notes
rfdetr_construction.pth
122 MB
RF-DETR (Real-time Foundation DETR)
8-class object detection
Default — best accuracy, NMS-free set prediction
yolo26l_construction_v1.pt
51 MB
YOLO26-L (Ultralytics, 24.8 M params)
8-class object detection
Faster alternative — STAL, NMS-free, ProgLoss
dinov3_reid_head.pth
5.4 MB
Linear projection head (1536→256→128)
Equipment re-identification
Trained contrastively on tracked equipment crops
osnet_x0_25_msmt17.pt
2.9 MB
OSNet x0.25
Appearance-based ReID for BoT-SORT
MSMT17 (pretrained)
Note: The DINOv3 ViT-B/16 backbone (~327 MB) is not included here. It is auto-downloaded from facebook/dinov3-vitb16-pretrain-lvd1689m on first run using your HF_TOKEN.
Detection Classes
Both detectors are fine-tuned on the same merged MOCS + ACID v2 dataset to recognize 8 classes of construction equipment from aerial perspectives:
ID
Class
ID
Class
0
Excavator
4
Mobile Crane
1
Dump Truck
5
Tower Crane
2
Bulldozer
6
Roller Compactor
3
Wheel Loader
7
Cement Mixer
Training Results
Both detectors were trained on the identical train/val/test split (42,733 / 4,615 / 990 images) for direct comparison. Numbers below are on the held-out val split.
Detector Comparison (val split)
Metric
RF-DETR (default)
YOLO26-L
Δ (RF − YOLO)
mAP@50:95
0.761
0.740
+2.1 pts
mAP@50
0.910
0.905
+0.5 pts
F1 Score
0.886
0.876
+1.0 pts
Precision
0.929
0.924
+0.5 pts
Recall
0.847
0.834
+1.3 pts
FPS (RTX 3050 Ti)
9–10
11–13
YOLO faster
RF-DETR wins on 7 of 8 per-class AP50-95 (only bulldozer goes to YOLO26-L: 0.796 vs 0.785). The largest RF-DETR margins are on the most under-represented classes — mobile_crane (+4.7 pts) and tower_crane (+6.0 pts) — where set-based prediction handles long boom shapes and heavy occlusion better than YOLO's anchor-based head.
This pulls all four weight files at once into your models/ directory — both detectors plus both Re-ID heads.
Option B: Python API
python
1from huggingface_hub import hf_hub_download
23# Detectors (pick one or both)4hf_hub_download(repo_id="Zaafan/sitesense-weights", filename="rfdetr_construction.pth", local_dir="models/")5hf_hub_download(repo_id="Zaafan/sitesense-weights", filename="yolo26l_construction_v1.pt", local_dir="models/")67# Re-ID8hf_hub_download(repo_id="Zaafan/sitesense-weights", filename="dinov3_reid_head.pth", local_dir="models/")9hf_hub_download(repo_id="Zaafan/sitesense-weights", filename="osnet_x0_25_msmt17.pt", local_dir="models/")
Option C: Auto-Download (Zero Setup)
The SiteSense pipeline automatically downloads missing weights on first run:
python
1# In services/cv-inference/main.py — resolve_weights() handles this transparently.2# It picks the right file based on DETECTOR_TYPE (yolo or rfdetr).3weights_path = resolve_weights('yolo26l_construction_v1.pt')# local first, HF fallback
Usage with SiteSense Pipeline
bash
1# 1. Clone the repository2git clone https://github.com/Mahmoud-Zaafan/SiteSense.git
3cd SiteSense
45# 2. Download weights6huggingface-cli download Zaafan/sitesense-weights --local-dir models/
78# 3. Configure environment9cp .env.example .env
1011# 4. Launch infrastructure12docker compose up --build -d
1314# 5a. Run pipeline with the default detector (YOLO26-L)15docker compose --profile pipeline up cv-inference
1617# 5b. Or switch to RF-DETR at runtime — no rebuild needed18DETECTOR_TYPE=rfdetr docker compose --profile pipeline up cv-inference
Citation
If you use these weights in your research or projects, please cite:
bibtex
1@misc{sitesense2025,
2 author = {Mahmoud Zaafan},
3 title = {SiteSense: Real-Time Construction Equipment Monitoring via Aerial Computer Vision},
4 year = {2025},
5 url = {https://github.com/Mahmoud-Zaafan/SiteSense}
6}