Руководство по наборам данных для обнаружения дронов: обучение Ultralytics YOLO на крошечных БПЛА
Сравни наборы данных DUT Anti-UAV, Drone-vs-Bird и для обнаружения дронов в тепловизионном диапазоне, а затем обучи Ultralytics YOLO26 находить крошечные дроны и сокращать число ложных срабатываний.

В бенчмарке обнаружения и отслеживания БПЛА указано, что средний размер дрона в наборе данных Drone-vs-Bird составляет 34 x 23 пикселя. Представь дрон такого размера в гипотетическом кадре 3840 x 2160: после уменьшения до 640 пикселей, используемых детектором по умолчанию, он сократится примерно до 5.7 x 3.8 пикселя.
Командам по противодействию дронам нужно, чтобы объект оставался видимым на всём пути — от выбранного набора данных до развёрнутой модели. В этом руководстве рассматриваются четыре решения, которые на это влияют при работе с Ultralytics YOLO26: на каком наборе данных для обнаружения дронов обучаться, какой размер изображения использовать, когда добавлять тайловый инференс SAHI и как оценивать модель с учётом размера объектов, чтобы высокий общий mAP не скрывал пропусков удалённых дронов.

Большинство «наборов данных для обнаружения дронов» отвечают не на тот вопрос#
Обычно под запросом о наборе данных для обнаружения дронов подразумевают одну из двух задач:
- Обнаружение дронов (anti-UAV или counter-UAV): наземная или воздушная камера ищет небольшой летательный аппарат на фоне неба, деревьев или зданий. Нужны изображения дронов, в идеале — вместе с птицами и другими похожими объектами.
- Обнаружение с дронов: камера на дроне снимает людей, автомобили и здания сверху. VisDrone — стандартный бенчмарк для этой задачи. Он включает 8,629 аэрофотоснимков с 10 классами — от пешеходов до автобусов, — но класса дронов в нём нет.
VisDrone всё же полезен командам по противодействию БПЛА, поскольку объекты на его изображениях маленькие и расположены близко друг к другу. Поэтому это хороший общедоступный набор данных для проверки параметров обнаружения мелких объектов, например размера изображения и нарезки на фрагменты, пока не готовы собственные данные. О применении аэрофотосъёмки читай в нашем обзоре компьютерного зрения в работе дронов. В остальной части статьи речь пойдёт о первой задаче: обнаружении дронов.
Выбери набор данных с учётом камеры и ракурса#
Подходящий общедоступный набор данных зависит от того, находится ли камера на земле или в воздухе, снимает ли она видимый свет или тепловое инфракрасное излучение и на каком расстоянии летает объект:
| Набор данных | Изображения | Размер | Лучше всего подходит для |
|---|---|---|---|
| Drone-vs-Bird | Видео RGB, от 720 x 576 до 3840 x 2160 | 77 размеченных обучающих последовательностей | Наземные камеры; дроны и птицы в кадре |
| DUT Anti-UAV | Изображения RGB, от 240 x 160 до 5616 x 3744 | 10,000 изображений (5,200 для обучения / 2,600 для валидации / 2,200 для тестирования), а также 20 видео для отслеживания | Начальный базовый вариант для видимого диапазона |
| Det-Fly | RGB, 3840 x 2160 | 13,271 изображений | Съёмка DJI Mavic с воздуха на воздух |
| Anti-UAV | Парные видео RGB и тепловизионного диапазона | 318 пар видео | Отслеживание днём и ночью в обеих модальностях |
| Anti-UAV410 | Видео в тепловом инфракрасном диапазоне | 410 видео (200 для обучения / 90 для валидации / 120 для тестирования) | Обнаружение и отслеживание в тепловом диапазоне |
| LRDDv3 | RGB 4K и ИК 640 x 512 с метками дальности | 102,532 изображения RGB; 29,630 парных изображений ИК | Оценка удалённых дронов с учётом дальности |
Количество последовательностей Drone-vs-Bird относится к обучающему набору из 77 последовательностей, опубликованному для соревнований 2021 года и ICASSP 2023; разрешения указаны в обзоре SynDroneVision. В обзоре также рассматриваются Det-Fly и Anti-UAV, а статья о LRDDv3 описывает этот набор данных. Лицензии и условия доступа различаются, поэтому проверь их до коммерческого использования.
Обучайся на нескольких наборах данных, а один оставь для тестирования#
Даже если модель хорошо работает на наборе данных, на котором обучалась, на другом она может давать слабые результаты. Авторы LRDDv3 обучили модели Ultralytics YOLO11m на разных наборах данных и протестировали каждую на Det-Fly. Модель, обученная на Drone-vs-Bird, показала там 0.484 mAP50, а модель, обученная на DUT Anti-UAV, — 0.431.
Объедини два или три источника, подходящих для твоей камеры и дальности съёмки, и преобразуй все данные в формат обнаружения YOLO. Затем согласованно перенумеруй классы, добавь отсутствующие аннотации птиц и раздели данные по полётам или видео до извлечения кадров или фрагментов. При разделении по кадрам почти одинаковые кадры одного полёта могут попасть и в обучающую, и в тестовую выборку, что завысит метрики. Оставь целый набор данных или съёмку с собственного объекта вне обучения и используй его для тестирования; включи видео только с птицами и пустым небом, чтобы измерить число ложных срабатываний.
Размечай птиц так же, как дронов#
Птицы часто становятся причиной ложных срабатываний при обнаружении дронов с помощью компьютерного зрения. В Drone-vs-Bird птицы выступают как отвлекающие объекты, но не размечены отдельным классом, поэтому для набора данных с двумя классами нужно добавить рамки вокруг них. В исследовании небольших дронов 2025 года YOLO11m обучали на классах дронов и птиц, а предсказания птиц игнорировали при инференсе. В этом эксперименте модель с двумя классами обнаруживала дроны немного лучше, чем модель только с классом дронов.
Общедоступные данные помогут получить базовый результат, а собственные видеоматериалы — довести систему до промышленного применения. С помощью разметки в Ultralytics Platform можно размечать рамки вокруг дронов и птиц на кадрах с собственных камер, а синтетические данные помогут добавить редкие фоны и ракурсы. Решение, занявшее первое место в соревновании AVSS 2021 Drone-vs-Bird, использовало детектор Ultralytics YOLOv5, дообученный на реальных и синтетических изображениях, и трекер на основе фильтра Калмана, который повышал уверенность для малозаметных удалённых дронов.
Размер изображения определяет, сохранится ли дрон после изменения масштаба#
YOLO26 изменяет размер каждого изображения так, чтобы его длинная сторона соответствовала imgsz — по умолчанию это 640. Если после изменения масштаба от дрона остаётся слишком мало пикселей, детектору будет трудно с ним работать. Первый способ исправить ситуацию — увеличить imgsz: в документации по обучению и руководстве по дообучению для наборов данных с мелкими объектами рекомендуется imgsz=1280.
Вычислительная нагрузка растёт примерно пропорционально числу пикселей, поэтому для разрешения 1280 требуется примерно в четыре раза больше вычислений, чем для 640. Для сравнения: в документации YOLO26 указано время 1.7 мс для YOLO26n и 2.5 мс для YOLO26s на NVIDIA T4 с TensorRT 10, batch 1 и nms=False, при разрешении 640 пикселей на COCO val2017. Это не измерения для дронов или разрешения 1280, поэтому проверь время для своей конфигурации.

Полезное начальное правило приводится в уроке Ultralytics Academy о задержке: попробуй такой размер, при котором самый маленький важный объект занимает около 10 пикселей. Если вычислительные ресурсы ограничены, сравни на одном и том же наборе для валидации дронов небольшую модель с высоким разрешением и большую модель с низким разрешением, а затем выбери вариант, который обнаруживает больше мелких дронов при целевом уровне задержки.
YOLO26 учитывает крошечные объекты при отборе кандидатов#
Даже при достаточном размере изображения модель должна научиться работать с крошечными рамками. Здесь помогает назначение меток с учётом малых объектов (STAL) в YOLO26. В стандартных моделях YOLO26 P3–P5 из v8.4.199 STAL увеличивает стороны рамок для отбора кандидатов, если их размер меньше 16 пикселей, до 16 пикселей, сохраняя исходные целевые значения регрессии. Благодаря этому крошечные дроны реже остаются без якорей-кандидатов.
Для самых маленьких объектов можно также изменить архитектуру. В YOLO26 есть вариант yolo26-p2.yaml, который добавляет уровень выходных признаков с шагом 4 к пирамиде признаков поверх P3–P5. При входном размере 640 x 640 вычислительная нагрузка YOLO26n без объединения слоёв возрастает с 6.1 до 9.5 GFLOPs. P2 выпущен как архитектура YAML без предобученных весов P2, поэтому собери модель с помощью YOLO("yolo26n-p2.yaml") и обучи её на своих данных.
Тайловый инференс SAHI сохраняет детализацию кадров 4K#
Даже при разрешении 1280 кадр 4K теряет две трети ширины ещё до того, как его увидит модель. SAHI (инференс с гиперразрешением на основе нарезки) интегрируется с Ultralytics YOLO26, помогая избежать потери детализации. Метод разбивает кадр на перекрывающиеся фрагменты, запускает модель на каждом и объединяет рамки на исходном изображении, поэтому дрон, попавший в соседние фрагменты, учитывается один раз. В статье о SAHI описаны этот метод и его вариант с дообучением на фрагментах.

Задай размер фрагмента и размер входного изображения модели отдельно, а затем проверь получившийся масштаб дрона на отложенных видеоматериалах. Модель, обученная на исходных кадрах 4K, уменьшенных до 1280, выучила дроны в три раза меньше, чем они выглядят в исходном разрешении на фрагментах размером 1280 пикселей. Если разница в масштабе ухудшает результаты, попробуй дообучить модель на фрагментах, вырезанных из полноразмерных обучающих кадров, как в статье о SAHI, и сравни её с моделью для целых кадров на одном тестовом наборе. Начни с перекрытия соседних фрагментов в 20% и проверь, не пропускаются ли объекты у их краёв.
Рабочую нагрузку легко предсказать. При размере фрагмента 1280 x 1280 и перекрытии 0.2 для кадра 3840 x 2160 нужны четыре столбца и две строки, то есть восемь проходов модели вместо одного, если отключить дополнительный запуск SAHI на всём изображении. Этот вариант подходит для записанных видео, проверки тревог и мощных периферийных GPU. Если камера должна обрабатывать каждый кадр с полной частотой, нарезай только область неба либо запускай периодическое сканирование фрагментами или запускай его по сигналу другого датчика, например радара.
Оценивай детектор с учётом размера и класса объектов#
Общая средняя точность (mAP) — это среднее значение AP по классам. В этом наборе данных с двумя классами качество обнаружения птиц может скрыть слабые результаты для дронов, а высокий общий показатель класса дронов — низкую полноту в самых маленьких диапазонах размеров. Прежде чем доверять оценке, разбей её по классам и размерам.
Валидация с save_json=True добавляет AP для мелких, средних и крупных объектов в наборах для обнаружения. Расчёт выполняется с помощью faster-coco-eval по диапазонам COCO: менее 32 x 32 пикселей площади рамки, до 96 x 96 и больше. Эти показатели объединяют оба класса. В обзоре SynDroneVision сообщается, что большинство размеченных дронов в Drone-vs-Bird меньше 32 x 32 пикселей, поэтому следи за AP_small только для дронов и за полнотой.
Чтобы получить эти показатели, оцени predictions.json по соответствующим эталонным аннотациям, используя площадь рамки в пикселях исходного изображения. Ultralytics записывает рамки в координатах исходного изображения, использует имя файла без расширения как ID изображения и нумерует пользовательские классы начиная с 1. Поэтому здесь дрон — категория 1, а птица — категория 2. Преобразуй тестовые метки в JSON в формате COCO с теми же ID изображений и категорий, затем ограничь оценку классом catIds=[1].
Диапазон малых объектов COCO слишком широкий для задач на больших расстояниях, поскольку в него попадают и дрон размером 12 пикселей, и дрон размером 30 x 30. Задай более точные диапазоны площадей аналогичным образом, например менее 64 пикселей площади (8 x 8), от 64 до 256 (16 x 16) и от 256 до 1,024 (32 x 32), а затем смотри AP и полноту для дронов в каждом диапазоне. Если в метках указана дальность, как в LRDDv3, также указывай полноту в зависимости от расстояния. Добавь рядом точность и отдельно посчитай предсказания дронов на кадрах только с птицами и на кадрах с пустым небом.

Две привычки помогут сохранить достоверность показателей:
- Проводите валидацию при размере развёртывания. Если модель обучена при разрешении 1280, а валидируется при 640, дроны будут вдвое меньше, чем при обучении, и показатели снизятся по причинам, не связанным с самой моделью.
- Осторожно интерпретируй mAP50-95. Смещение на 2 пикселя для рамки размером 10 пикселей сильно влияет на IoU, поэтому строгие пороги снижают оценку для крошечных объектов. Отслеживай полноту, чтобы учитывать пропущенные дроны, и AP50 для правильно классифицированных объектов с IoU 0.5.
Обучи, нарежь на фрагменты и оцени детектор дронов YOLO26#
Эти шаги помогут перейти от объединённого набора данных с дронами и птицами к сравнению инференса на целых изображениях и фрагментах на одном и том же отложенном тестовом наборе.
-
Установи пакеты с помощью
pip install -U ultralytics sahi. -
Создай YAML-файл набора данных с птицами в качестве второго класса и отложенной тестовой выборкой:
path: datasets/drones
train: images/train
val: images/val
test: images/test
names:
0: drone
1: bird- Обучай при разрешении 1280 с предобученными весами.
batch=-1позволяет AutoBatch выбрать размер пакета, использующий около 60% памяти GPU:
from ultralytics import YOLO
model = YOLO("yolo26s.pt")
model.train(data="drones.yaml", epochs=100, imgsz=1280, batch=-1, name="drone_1280")- Оцени базовую модель на целых изображениях на тестовой выборке при том же разрешении. В папке запуска будет создан файл
predictions.json:
best = YOLO("runs/detect/drone_1280/weights/best.pt")
metrics = best.val(data="drones.yaml", split="test", imgsz=1280, save_json=True)- Экспортируй предсказания для фрагментов на тех же тестовых изображениях в координатах исходного изображения, отключив дополнительный проход SAHI по целому изображению:
import json
from pathlib import Path
from sahi import AutoDetectionModel
from sahi.predict import get_sliced_prediction
detector = AutoDetectionModel.from_pretrained(
model_type="ultralytics",
model_path="runs/detect/drone_1280/weights/best.pt",
confidence_threshold=0.001,
image_size=1280,
device="cuda:0",
)
preds = []
for img in sorted(Path("datasets/drones/images/test").glob("*.jpg")):
result = get_sliced_prediction(
str(img),
detector,
slice_height=1280,
slice_width=1280,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2,
perform_standard_pred=False,
)
image_id = int(img.stem) if img.stem.isnumeric() else img.stem
for p in result.to_coco_predictions(image_id=image_id):
p["category_id"] += 1 # сопоставь с ID, начинающимися с 1, в predictions.json
preds.append(p)
Path("sahi_predictions.json").write_text(json.dumps(preds))- Оцени оба файла с предсказаниями по одной и той же эталонной разметке, только для класса дронов:
from faster_coco_eval import COCO, COCOeval_faster
gt = COCO("test_coco.json") # тестовые метки в формате COCO
for name in ["runs/detect/val/predictions.json", "sahi_predictions.json"]:
ev = COCOeval_faster(gt, gt.loadRes(name), "bbox")
ev.params.catIds = [1] # drone
ev.evaluate()
ev.accumulate()
ev.summarize()Сравни AP дронов по размерам, предсказания дронов на кадрах только с птицами и на кадрах с пустым небом, а также сквозную задержку на кадр на целевом оборудовании. Используй нарезку, только если улучшение результатов на маленьких дронах оправдывает дополнительные проходы.
-
Отслеживай объекты между кадрами в отдельном примере с целыми изображениями:
best.track(source="perimeter.mp4", imgsz=1280, tracker="bytetrack.yaml")использует режим отслеживания и не обрабатывает приведённые выше предсказания SAHI. ByteTrack может восстановить потерянную траекторию, если более позднее обнаружение совпадает с ней до истечения времени её хранения. -
Экспортируй модель для периферийного устройства. Для NVIDIA Jetson у камеры экспортируй модель в TensorRT с помощью
best.export(format="engine", imgsz=1280, half=True)и следуй руководству по Jetson. Измерь задержку на устройстве при целевом разрешении.
Если твой GPU не справляется с обучением при разрешении 1280, запусти обучение с тем же набором данных и аргументами в облаке на Ultralytics Platform.
Кому подойдёт такой способ создания детектора дронов#
Этот рабочий процесс подойдёт командам, которые защищают стационарные объекты, например периметры аэропортов, тюрем, стадионов или критически важной инфраструктуры, используя RGB- или тепловизионные камеры, направленные в небо. Он также подойдёт интеграторам, которые добавляют компьютерное зрение к радиолокационным или радиочастотным датчикам в системах безопасности. В обоих случаях камера должна распознавать дрон на таком расстоянии, когда он занимает всего несколько десятков пикселей.
Начни с DUT Anti-UAV и Drone-vs-Bird, чтобы получить базовый результат, добавь метки птиц и собственные видеоматериалы, обучи YOLO26 при разрешении 1280 и оценивай каждое изменение по AP_small только для дронов, полноте и ложным срабатываниям на птиц. Добавь SAHI для кадров 4K и выше, если оценка на фрагментах показывает улучшение для маленьких дронов. О более общей задаче читай в нашем руководстве по обнаружению мелких объектов и списке проверок mAP для мелких объектов.
Часто задаваемые вопросы
Это зависит от камеры и ракурса. DUT Anti-UAV, включающий 10,000 изображений RGB, — практичный начальный базовый вариант для видимого диапазона. Drone-vs-Bird содержит видео с наземных камер, где в кадре есть птицы, Det-Fly охватывает съёмку с воздуха на воздух при разрешении 3840 x 2160, Anti-UAV410 — тепловизионный инфракрасный диапазон, а LRDDv3 добавляет метки дальности. Обучайся более чем на одном наборе и оставь один для тестирования.
Нет. VisDrone содержит изображения, снятые с дронов и размеченные 10 классами, например «пешеход», «автомобиль» и «автобус», но класса дронов в нём нет. Набор полезен для проверки параметров обнаружения мелких объектов, таких как размер изображения и нарезка SAHI, но для обнаружения дронов нужен набор данных для противодействия БПЛА, например DUT Anti-UAV или Drone-vs-Bird.
Попробуй
imgsz=1280, если при стандартном разрешении 640 дроны будут занимать меньше примерно 10 пикселей. YOLO26 изменяет размер длинной стороны каждого изображения доimgsz, поэтому большее значение сохраняет больше пикселей каждого дрона и требует примерно в четыре раза больше вычислений, чем разрешение 640. Проводить валидацию и развёртывать модель нужно при том же размере, при котором она обучалась.Да. SAHI загружает веса YOLO26 через
AutoDetectionModel.from_pretrained(model_type="ultralytics", image_size=1280, ...)и запускает модель на перекрывающихся фрагментах, а затем объединяет рамки. При использованииperform_standard_pred=Falseкадр 3840 x 2160, разделённый на фрагменты размером 1280 пикселей с перекрытием 0.2, требует восьми проходов модели. Оцени предсказания на фрагментах по сравнению с базовой моделью на целых изображениях, используя один и тот же тестовый набор.Запусти валидацию с
save_json=Trueна наборе данных для обнаружения, чтобы получить AP для мелких, средних и крупных объектов по всем классам. Чтобы получить результаты только для дронов, оцени сохранённый файлpredictions.jsonпо эталонной разметке в формате COCO с совпадающими ID изображений и категорий, ограничь оценку категорией дронов и используй площади рамок в пикселях исходного изображения для более точных диапазонов.Да — как отдельный размеченный класс и как часть теста на ложные срабатывания. Птицы часто становятся их причиной, а в эксперименте с YOLO11m в 2025 году модель с классами дронов и птиц обнаруживала дроны немного лучше, чем модель только с классом дронов. В Drone-vs-Bird птицы не размечены, поэтому добавь рамки самостоятельно; если нужны только оповещения о дронах, игнорируй предсказания птиц при инференсе.
Автор
Комментарии
Задай вопрос, поделись результатами или помоги кому-нибудь.










