File size: 13,439 Bytes
f264e2b
 
 
 
afc8061
f264e2b
3285aae
afc8061
f264e2b
 
 
 
afc8061
f264e2b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72c73cd
 
 
 
 
 
 
 
 
 
 
 
f264e2b
 
 
 
 
 
b5bafe1
0aa37ed
f264e2b
 
0aa37ed
 
f264e2b
0aa37ed
f264e2b
 
 
 
 
 
c169663
f264e2b
 
 
 
 
 
 
 
 
 
 
afc8061
f264e2b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
526df0e
 
f264e2b
 
 
 
 
 
 
 
 
 
b5bafe1
 
f264e2b
 
 
 
 
 
35229d8
 
 
 
f264e2b
 
 
 
 
afc8061
f264e2b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
afc8061
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f264e2b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72c73cd
 
b5bafe1
72c73cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f264e2b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c169663
f264e2b
 
 
 
 
 
 
c169663
f264e2b
 
 
 
 
 
 
 
 
72c73cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
---
license: cc-by-4.0
base_model:
- Ultralytics/YOLOv8
base_model_relation: finetune
pipeline_tag: object-detection
library_name: ultralytics
num_parameters: 11137922
github: https://github.com/rfonod/geo-trax
language:
- en
tags:
- ultralytics
- yolov8
- object-detection
- aerial-imagery
- drone
- vehicle-detection
- birds-eye-view
- geo-trax
- trajectory
- urban-traffic
- tracking
- arxiv:2411.02136
datasets:
- rfonod/songdo-vision
- Voxel51/VisDrone2019-DET
- detection-datasets/coco
model-index:
- name: rfonod/geo-trax/geotrax_hbb_yolov8s_1920_v1
  results:
  - task:
      type: object-detection
    dataset:
      type: rfonod/songdo-vision
      name: Songdo Vision
      split: test
    metrics:
      - type: precision  # mAP@0.5 not available as a standard metric type on HF
        value: 0.951
        name: mAP@0.5
      - type: precision
        value: 0.711
        name: mAP@0.5:0.95
      - type: precision
        value: 0.911
        name: Precision
      - type: recall
        value: 0.935
        name: Recall
---

# Geo-trax: YOLOv8s Vehicle Detector for Drone BEV Imagery

[![GitHub](https://img.shields.io/badge/GitHub-geo--trax-blue?logo=github)](https://github.com/rfonod/geo-trax)
[![PyPI](https://img.shields.io/pypi/v/geo-trax)](https://pypi.org/project/geo-trax/)
[![Demo Space](https://img.shields.io/badge/🤗%20Space-Live%20Demo-yellow)](https://huggingface.co/spaces/rfonod/geo-trax)
[![License](https://img.shields.io/badge/License-CC%20BY%204.0-lightgrey)](LICENSE)
[![Paper](https://img.shields.io/badge/Journal-10.1016%2Fj.trc.2025.105205-blue)](https://doi.org/10.1016/j.trc.2025.105205)
[![arXiv](https://img.shields.io/badge/arXiv-2411.02136-b31b1b)](https://arxiv.org/abs/2411.02136)
[![Songdo Vision](https://img.shields.io/badge/🤗%20Dataset-rfonod%2Fsongdo--vision-yellow)](https://huggingface.co/datasets/rfonod/songdo-vision)
[![Songdo Traffic](https://img.shields.io/badge/🤗%20Dataset-rfonod%2Fsongdo--traffic-yellow)](https://huggingface.co/datasets/rfonod/songdo-traffic)
[![Website](https://img.shields.io/badge/REAL%20Lab-Geo--trax-informational)](https://www.real-lab.ch/geo-trax)
[![YouTube](https://img.shields.io/badge/YouTube-Demo-red?logo=youtube&logoColor=red)](https://youtu.be/gOGivL9FFLk)

This is the default detection model for **[Geo-trax](https://github.com/rfonod/geo-trax)**, a
comprehensive pipeline for extracting georeferenced vehicle trajectories from high-altitude drone
(bird's-eye view) video footage. The model detects vehicles in aerial imagery and underpins the
results reported in the associated [publication](https://doi.org/10.1016/j.trc.2025.105205).

![Geo-trax Output Visualization](https://raw.githubusercontent.com/rfonod/geo-trax/main/assets/geo-trax_visualization.webp)

🎬 This accelerated animation previews some of the capabilities of Geo-trax. Watch the full
demonstration (~4 min) on [YouTube](https://youtu.be/gOGivL9FFLk).

## Model Details

| Property | Value |
|---|---|
| Architecture | YOLOv8s (HBB, horizontal bounding boxes) |
| Input resolution | 1920 × 1920 px |
| Classes | 6 trained (4 primary + 2 auxiliary; see below) |
| Parameters | 11.1 M (11,137,922) |
| Framework | [Ultralytics](https://github.com/ultralytics/ultralytics) ≥ 8.4.64 |
| Trained on | 19,339 annotated aerial images (679,306 labeled instances); multi-stage, see [publication](https://doi.org/10.1016/j.trc.2025.105205) |
| Validated on | [Songdo Vision](https://doi.org/10.5281/zenodo.13828407) test set (1,084 images, 55,124 vehicle instances) |

### Classes and Detection Performance

Metrics reported on the [Songdo Vision](https://doi.org/10.5281/zenodo.13828407) test split
(1,084 images, 55,124 labeled vehicle instances). The `Instances` column is the per-class
support in the test set. See Table 3 of the
[publication](https://doi.org/10.1016/j.trc.2025.105205) for full results.

| ID | Label | Notes | Instances | Precision | Recall | mAP@50 | mAP@50-95 |
|---|---|---|---:|---|---|---|---|
| 0 | Car | incl. vans | 49,508 | 0.979 | 0.981 | 0.992 | 0.835 |
| 1 | Bus | | 1,759 | 0.952 | 0.977 | 0.988 | 0.826 |
| 2 | Truck | | 3,052 | 0.887 | 0.916 | 0.935 | 0.722 |
| 3 | Motorcycle | | 805 | 0.827 | 0.866 | 0.888 | 0.463 |
| 4 | Pedestrian | not evaluated | n/a | n/a | n/a | n/a | n/a |
| 5 | Bicycle | not evaluated | n/a | n/a | n/a | n/a | n/a |
| **All** | | | **55,124** | **0.911** | **0.935** | **0.951** | **0.711** |

The model reaches **0.951 mAP@50** and **0.711 mAP@50-95** overall, with near-saturated accuracy
on cars and buses (mAP@50 ≥ 0.988). Trucks and especially motorcycles are harder: motorcycles are
small, sparse in the test set (805 instances), and the main driver of the lower mAP@50-95.

### Evaluation Plots

Precision-recall curves and the normalized confusion matrix on the Songdo Vision test set:

<table>
  <tr>
    <td align="center"><img src="assets/PR_curve.png" alt="Precision-Recall Curve" width="420"><br><sub>Precision-Recall Curve</sub></td>
    <td align="center"><img src="assets/confusion_matrix_normalized.png" alt="Normalized Confusion Matrix" width="420"><br><sub>Normalized Confusion Matrix</sub></td>
  </tr>
</table>

> **Note on pedestrian and bicycle classes:** The model was trained on pedestrian and bicycle
> instances; however, these classes are **not evaluated and not recommended for use**. They were
> underrepresented in the training data, are not annotated in the Songdo Vision dataset (making
> reliable evaluation impossible), and achieve poor detection performance in practice.

## How to Use

> 🚀 **Try it first, no install:** the [interactive 🤗 Space](https://huggingface.co/spaces/rfonod/geo-trax) runs this detector in your browser on your own aerial image or short clip.

### With Geo-trax (recommended)

This model is the default in Geo-trax and downloads automatically on first use:

```bash
pip install geo-trax
geotrax extract video.mp4         # detect, track, and stabilize; auto-downloads the model
geotrax batch video.mp4 --no-geo  # detect, track, and stabilize; skip georeferencing
geotrax batch video.mp4           # full pipeline including georeferencing (requires orthophotos)
geotrax batch video.mp4 --sahi    # optional SAHI inference for better small-object detection
```

See the Geo-trax [GitHub README](https://github.com/rfonod/geo-trax) for the full pipeline,
configuration options, and georeferencing.

### Direct Ultralytics inference (PyTorch)

```python
from ultralytics import YOLO
from huggingface_hub import hf_hub_download

weights = hf_hub_download(repo_id="rfonod/geo-trax", filename="geotrax_hbb_yolov8s_1920_v1.pt")
model = YOLO(weights)

results = model("drone_frame.jpg", imgsz=1920, conf=0.25, iou=0.45, classes=[0, 1, 2, 3])
results[0].show()
```

> **Tip:** The model was trained and validated at **1920 px** input resolution. Downscaling to
> 1280 px is possible with a small accuracy trade-off; going below 960 px significantly degrades
> detection of small vehicles (motorcycles, distant cars). Pass `classes=[0, 1, 2, 3]` to
> restrict inference to the four evaluated classes and suppress unreliable predictions.

### ONNX inference

 An ONNX export (opset 12, static 1920 × 1920 input) is available for deployment without a PyTorch dependency:

 ```python
import numpy as np
import onnxruntime as ort
from huggingface_hub import hf_hub_download

 onnx_path = hf_hub_download(repo_id="rfonod/geo-trax", filename="geotrax_hbb_yolov8s_1920_v1.onnx")
session = ort.InferenceSession(onnx_path, providers=["CPUExecutionProvider"])

 # Prepare input: BGR image resized/padded to 1920×1920, normalized to [0, 1]
img = np.random.rand(1, 3, 1920, 1920).astype(np.float32)  # replace with real image
outputs = session.run(None, {"images": img})
# outputs[0] shape: (1, 10, 75600) — 10 = 4 bbox coords + 6 class scores
```

## Training Data

Training followed a multi-stage strategy starting from **YOLOv8s weights pretrained on COCO**
as the initial foundation. Two successive stages were applied:

**Stage 1 (BASE):** The model was trained on a large, diverse collection drawn from eight
public aerial and drone datasets (CARPK, PUCPR+, CyCAR, UAVDT, HARPY, RAI4VD, UIT-ADrone,
and VisDrone) combined with the [Songdo Vision](https://doi.org/10.5281/zenodo.13828407)
dataset, totalling 19,339 training images with 679,306 annotations across 6 vehicle classes
(car, bus, truck, motorcycle, pedestrian, bicycle).

**Stage 2 (FINE):** The BASE-trained model was subsequently fine-tuned on a curated,
high-quality subset of 9,004 images with 321,368 annotations, emphasising accurate annotations
and higher-resolution images, again combined with
[Songdo Vision](https://doi.org/10.5281/zenodo.13828407), to yield the final weights released here.

**Training set composition** (annotations per class):

| Stage | Images | Annotations | Car | Bus | Truck | Motorcycle | Pedestrian | Bicycle |
|---|---:|---:|---:|---:|---:|---:|---:|---:|
| BASE | 19,339 | 679,306 | 561,666 | 15,587 | 28,830 | 44,512 | 24,239 | 4,472 |
| FINE |  9,004 | 321,368 | 266,745 |  8,047 | 14,305 | 30,925 |  1,260 |    86 |

[Songdo Vision](https://doi.org/10.5281/zenodo.13828407) comprises 5,419 annotated drone frames
(4,335 training / 1,084 test; 80/20 split) collected during a large-scale urban traffic
monitoring experiment in Songdo, South Korea. It covers four primary vehicle classes captured
at 140-150 m altitude by DJI Mavic 3 drones, contributing 217,311 training and 55,124 test
instances to the totals above.

**Training configuration:**

| Setting | Value |
|---|---|
| Initialization | YOLOv8s pretrained on COCO |
| Optimizer | SGD |
| Learning rate (initial / final factor) | 0.01 / 0.01 |
| Momentum | 0.937 |
| Weight decay | 0.0005 |
| Batch size | 8 |
| Early stopping | 50-epoch patience |
| Input resolution | 1920 × 1920 px (letterbox padding) |
| Mixed precision | AMP enabled |
| Augmentation | random scaling, translation, horizontal flip, mosaic, colour jitter, Gaussian/median blur, grayscale, CLAHE |

See the [publication](https://doi.org/10.1016/j.trc.2025.105205) for complete dataset statistics,
training details, and ablation results.

## Intended Use and Limitations

- **GSD assumption:** The bundled Geo-trax config assumes a ground sampling distance (GSD) of
  ~0.027 m/px (DJI Mavic 3, 4K, 140-150 m altitude). Adjust this value in the config for
  different hardware or flight altitudes.
- **Supported classes:** Car, bus, truck, and motorcycle (class IDs 0-3). The model was also
  trained on pedestrian and bicycle instances; however, these classes achieve poor detection
  performance and are not recommended for use (see the class table above). Geo-trax filters to
  the four primary classes by default; when using Ultralytics directly, pass
  `classes=[0, 1, 2, 3]` to suppress unreliable predictions.

## Related datasets and resources

- **Live demo**: interactive 🤗 Space — [`rfonod/geo-trax` (Spaces)](https://huggingface.co/spaces/rfonod/geo-trax)
- **Songdo Traffic**: the georeferenced vehicle-trajectory dataset this model helps produce via
  the Geo-trax pipeline:
  [`10.5281/zenodo.13828384`](https://doi.org/10.5281/zenodo.13828384) ·
  HF [`rfonod/songdo-traffic`](https://huggingface.co/datasets/rfonod/songdo-traffic)
- **Songdo Vision**: the vehicle-detection (annotated image) dataset used to train and validate
  this model: [`10.5281/zenodo.13828407`](https://doi.org/10.5281/zenodo.13828407) ·
  HF [`rfonod/songdo-vision`](https://huggingface.co/datasets/rfonod/songdo-vision)
- **Source video recordings** (not open access):
  [`10.5075/EPFL.20.500.14299/253923`](https://doi.org/10.5075/EPFL.20.500.14299/253923)
- **Publication**: *Transportation Research Part C* (2025):
  [`10.1016/j.trc.2025.105205`](https://doi.org/10.1016/j.trc.2025.105205) ·
  [arXiv:2411.02136](https://arxiv.org/abs/2411.02136)
- **Software**: Geo-trax: [github.com/rfonod/geo-trax](https://github.com/rfonod/geo-trax) ·
  Zenodo [`10.5281/zenodo.12119542`](https://doi.org/10.5281/zenodo.12119542) ·
  [demo video](https://youtu.be/gOGivL9FFLk)

## Citation

If you use this model, please cite the associated publication:

```bibtex
@article{fonod2025advanced,
  title   = {Advanced computer vision for extracting georeferenced vehicle trajectories from drone imagery},
  author  = {Fonod, Robert and Cho, Haechan and Yeo, Hwasoo and Geroliminis, Nikolas},
  journal = {Transportation Research Part C: Emerging Technologies},
  volume  = {178},
  pages   = {105205},
  year    = {2025},
  doi     = {10.1016/j.trc.2025.105205}
}
```

If you additionally use the [Geo-trax software](https://github.com/rfonod/geo-trax), please
also cite the specific version you used via its Zenodo record. For example, for version 1.3.0:

```bibtex
@software{fonod2026geo-trax,
  author  = {Fonod, Robert},
  title   = {Geo-trax: A Comprehensive Framework for Georeferenced Vehicle Trajectory Extraction from Drone Imagery},
  url     = {https://github.com/rfonod/geo-trax},
  doi     = {10.5281/zenodo.12119542},
  version = {1.3.0},
  year    = {2026}
}
```

## License

This model is released under the
[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/)
license; see the [LICENSE](LICENSE) file for the full terms. The Geo-trax codebase is distributed
separately under the [MIT License](https://github.com/rfonod/geo-trax/blob/main/LICENSE).
Free AI Image Generator No sign-up. Instant results. Open Now