Videos with detections and applied Kalman filter:
Video 1:
https://youtu.be/CYbvjG3W8mQ
Video 2:
https://youtu.be/ogdO6Lvd0Ok
Detector configuration: The pre-trained Ultralytics YOLO26n model served as the pre-trained backbone, with the dataset above serving as the fine-tuning. Most of the configuration leveraged the default settings to benefit from the included, robust data augmentation. However, a minimum confidence level of .4 was applied to reduce the false positives caused by birds in the distance. Additionally, the batch size was increased to 128 images per batch to take advantage of the larger GPU used during training.
Kalman filter state design and noise parameters: The Kalman filter was designed to track the coordinates and velocity of the drone across two dimensions. The noise parameters, described below in more detail, account for the implicit inaccuracies in the detection mechanism (i.e., the model), the process noise (i.e., the erratic movement of the drone), and how reliably the Kalman filter predictions should be viewed before several sequential detections. All other Kalman filter settings and values were default (i.e., they followed exactly the basic implementation described in the docs here:
https://colab.research.google.com/github/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/08-Designing-Kalman-Filters.ipynb#scrollTo=DT1IW1smWpd5).
Failure cases and how the tracker handles missed detections: I implemented three systems to handle missed or multiple detections:
@software{yolo26_ultralytics,
author = {Glenn Jocher and Jing Qiu},
title = {Ultralytics YOLO26},
version = {26.0.0},
year = {2026},
url = {
https://github.com/ultralytics/ultralytics},
orcid = {0000-0001-5950-6979, 0000-0003-3783-7069},
license = {AGPL-3.0}
}