На данный момент актуально создание системы обнаружения беспилотных летательных аппаратов (БПЛА), особенно дронов.

Системы обнаружения дронов должны выполнять следующие функции:
Обнаружение БПЛА;
Идентификация типа объекта (дрон, самолёт , птица и др.);
Классификация по типу и назначению;
Определение местоположения объекта в пространстве;
Отслеживание траектории перемещения;
Оповещение оператора/системы безопасности;
Автоматическая активация контрмер, при необходимости.
Системы обнаружения БПЛА можно разделить на следующие категории:
Радиочастотные сканеры — анализируют сигналы управления и передачи данных;
Радарные комплексы — определяют объект по отражённому радиосигналу;
Оптические системы (видеокамеры) — фиксируют объект визуально;
Акустические датчики — регистрируют характерный звук дронов.
Не все существующие системы обнаружения могут выполнять одновременно все перечисленные функции.
Функция обнаружения заключается в том, что система может обнаруживать беспилотные летательные аппараты. Но одного только обнаружения обычно бывает недостаточно. Например, радар может обнаруживать не только БПЛА, но и самолёты или птиц. По этой причине без функции идентификации и классификации БПЛА не обойтись. Указанная функция позволяет отделять дроны от других объектов (самолётов, птиц и т. п.)
Цель - разработка системы обнаружения беспилотных летательных аппаратов (БПЛА), таких как дроны, с использованием методов искусственного интеллекта и компьютерного зрения.
Задача - создание модели машинного обучения, способной автоматически обнаруживать дроны, различать их от других летательных аппаратов, а также птиц, на основе визуальной информации, полученной с видеокамер наблюдения.
Одним из вариантов такой системы, является система машинного зрения CV основанная на алгоритме глубокого обучения YOLO.
YOLO — это алгоритм обнаружения объектов в реальном времени, разработанный для высокой скорости и производительности. Его главная особенность в том, что он обрабатывает изображение за один проход, что делает его идеальным для задач, где важна мгновенная обработка, таких как автономное вождение и видеонаблюдение.
Последняя версия YOLOv12 (вышла в феврале 2025 года) — это новейшая версия YOLO, которая фокусируется на внедрении механизмов внимания (в частности, Flash Attention) для повышения производительности. Цель — достичь лучшей точности при сохранении высокой скорости за счёт более эффективной обработки информации и снижения затрат памяти, сокращая разрыв между CNN и трансформерами в скорости.
Обучение модели YOLO включает в себя следующие основные этапы: подготовка размеченного набора данных, настройка параметров обучения и запуск процесса обучения. Для обучения пользовательской модели YOLO необходимо создать набор данных с аннотациями и настроить параметры в конфигурационном файле YAML, затем запустить обучение, используя команду yolo task=train.
Набор данных:
Настоящий датасет содержит разнообразные изображения, представляющие различные типы и виды беспилотных летательных аппаратов (БПЛА или дронов). Изображения включают в себя сцены с различными типами дронов, такими как мультироторные дроны, вертолёты, самолёты, а также вариации и модификации каждого типа.
Изображения были собраны из различных открытых ресурсов, включая видеохостинги, веб-сайты и платформы для обмена данными, такие как Youtube, roboflow.co и kaggle.com. Каждое изображение в датасете содержит подробные аннотации, представленные в формате YOLO, включающие в себя координаты ограничивающих рамок (bounding boxes) для дронов на изображениях.
Размеченные данные охватывают различные условия съёмки, включая разные времена суток, погодные условия, окружающую среду и местности. Это обеспечивает разнообразие исходных данных, что позволяет модели обучаться на различных сценах и условиях.
Общее количество изображений в датасете составляет 17980, распределённых по четырём основным классам: 'DRON', 'AIRPLANE', 'HELICOPTER' и 'BIRDS'. Для каждого изображения в датасете предоставлены соответствующие аннотации, содержащие информацию о местоположении и классе дрона на изображении.
Формат изображений -.jpg', '.jpeg', '.png.
Размеры обучающей/проверочной/тестовой выборок: 15284 / 2517 / 179
Общий размер датасета: 17980


В датасете отмечаем дисбаланс классов — класс DRON значительно преобладает. Это может привести к тому, что модель будет лучше детектировать дроны, но хуже — другие объекты (особенно самолёты и вертолёты). Но так же дисбаланс в пользу класса DRON может сыграть положительную роль, потому что:
Модель будет чаще видеть примеры DRON при обучении, а значит, лучше запомнит характерные особенности этого класса.
Вероятность недообучения класса DRON снижается — он и так в центре внимания модели благодаря количеству примеров.
DRON будет иметь приоритетное значение в предсказаниях: модель, при сомнениях, будет склонна выбирать именно его.
Но есть важные риски, которые стоит учитывать даже с приоритетом DRON:
Модель может чаще ошибочно классифицировать объекты как DRON (ложные срабатывания), особенно если в реальных данных много похожих объектов (например, BIRDS, HELICOPTER).
Слабая обученность на других классах уменьшит способность модели различать DRON и другие воздушные объекты. Это особенно критично, если вам важно не просто «увидеть DRON», а не путать его с птицами или вертолётами.
Желательно сбалансировать датасет либо за счёт увеличения числа изображений для классов BIRDS, HELICOPTER и AIRPLANE, либо путём уменьшения количества аннотаций в других классах до уровня наименьшего (в данном случае — AIRPLANE). Однако в нашем случае для эксперимента оставим распределение классов без изменений.

2. Выбор архитектуры модели и настройка параметров обучения
Для решения задачи визуального обнаружения беспилотных летательных аппаратов была выбрана архитектура модели YOLOv12 — одна из самых современных и эффективных реализаций алгоритма обнаружения объектов на основе глубокого обучения. YOLOv12 сочетает высокую точность распознавания с возможностью работы в режиме реального времени, что делает её оптимальной для задач видеонаблюдения и защиты воздушного пространства.
Причины выбора YOLOv12:
Высокая скорость обработки благодаря одноэтапной архитектуре (Single Shot Detection);
Интеграция механизмов внимания (Flash Attention), что позволяет повысить точность обнаружения при сохранении высокой производительности;
Оптимизация использования памяти, что важно для запуска на ограниченных по ресурсам устройствах;
Совместимость с ONNX, TensorRT, OpenCV и другими инструментами для ускоренного инференса.
Подготовка к обучению включала следующие шаги:
Создание конфигурационного YAML-файла, содержащего пути к датасету, описание классов;
Выбор базовой модели YOLOv12n (например обучение модели с нуля yolov12n.yaml, или использование уже предобученой модели yolov12n.pt на датасете COCO) — компактная версия для быстрого инференса);
-
Настройка гиперпараметров (использование по умолчанию):
Размер входного изображения: imgsz=640
Размер батча: batch=16
Количество эпох: epochs=100
Скорость обучения: lr0=0.01 (при необходимости — адаптивный learning rate scheduler)
3. Обучение модели
Проверка подключения GPU

Установка библиотеки Ultralytics\
# Install the ultralytics package from PyPI
pip install ultralytics
Обучение YOLO без использования предварительно обученной модели
В большинстве случаев модели YOLO обучаются с использованием предварительно обученных весов на больших датасетах (например, COCO), что позволяет достичь высокой точности за меньшее количество эпох. Однако существуют ситуации, когда требуется обучение модели "с нуля", без начальных весов. Такой подход называется обучением from scratch.
Когда необходимо обучение с нуля?
Если структура классов в пользовательском датасете принципиально отличается от стандартных (например, только дроны, птицы, самолёты);
Если требуется добиться максимальной адаптации под специфические задачи;
Если использование предобученных весов может внести предвзятость (bias) и ухудшить распознавание специфических объектов;
Если необходимо обучить YOLO на новой архитектуре, для которой нет готовых весов.
Подготовка к обучению "с нуля"
Для обучения с нуля необходимо использовать архитектурный YAML-файл вместо .pt модели. Этот YAML-файл определяет конфигурацию нейросети: количество слоёв, размер выходных слоёв, типы блоков, размер input'а и пр.
Так, как Ultralytics пока не предоставляет архитектурный файл yolov12n.yaml, получаем его из yolo12n.pt и адаптируем под задачу, учитывая, что:
4 класса (например, "DRON", "AIRPLANE", "HELICOPTER", "BIRDS"), вместо 80 (COCO).
Задача детекции объектов (detect),
Использование YOLOv12 (по архитектуре — на базе YOLOv8 с кастомными блоками A2C2f, C3k2 и т.д.).
Запуск обучения на 50 эпохах через CLI-интерфейс:
yolo detect train model=content\datasets\custom_yolov12n.yaml" data=content\datasets\data.yaml" epochs=50 imgsz=640
Результаты отучения custom_yolov12n «с нуля»



Обучение предварительно обученной модели YOLOv12n на датасете COCO, загруженной с официальной страницы: https://docs.ultralytics.com/ru/models/yolo12/.
Запуск обучения YOLOv12n
# загружаем предобученную модель
model_nano = YOLO('yolov12n.pt')
Downloading https://github.com/ultralytics/assets/releases/download/v8.1.0/yolov12n.pt to 'yolov12n.pt'...
100%|██████████| 6.23M/6.23M [00:00<00:00, 114MB/s]
# обучение 1 этап (-->> /detect)
BATCH_SIZE = 16
EPOCHS = 50
results = model_nano.train(data="/content/datasets/data.yaml",
batch=BATCH_SIZE, epochs=EPOCHS,
imgsz=640,
augment=True,
#project=project, # результирующая папка; если не указать, то будет /content/runs/detect
#name=name) # вложенная в project папка
)



По результатам обучения предобученная модель демонстрирует немного лучший результат: для всех классов (all) mAP50 составил 0.911 при обучении custom YOLOv12n «с нуля» и 0.949 для предобученной YOLOv12n (50 эпох). В дальнейшем планируется использовать её лучшие веса — best.pt.
Анализ результатов обучения предобученной YOLOv12n (50 эпох)
основные метрики на валидации:
Класс |
Precision (P) |
Recall (R) |
mAP50 |
mAP50-95 |
---|---|---|---|---|
DRON |
0.959 |
0.923 |
0.957 |
0.631 |
AIRPLANE |
0.909 |
0.923 |
0.946 |
0.653 |
HELICOPTER |
0.982 |
0.982 |
0.989 |
0.771 |
BIRDS |
0.908 |
0.882 |
0.903 |
0.591 |
all |
0.927 |
0.949 |
0.949 |
0.661 |
Выводы по результатам:
✅ DRON — высокая точность (0.959) и полнота (0.923). Отличный результат для приоритетного класса.
✅ HELICOPTER — лучший результат среди всех классов: очень высокая точность и полнота (0.982), наибольший mAP50-95 (0.771).
✅ AIRPLANE и BIRDS — показатели чуть слабее, особенно BIRDS по mAP50-95 (0.591). Это ожидаемо, учитывая дисбаланс классов и сложность различения.
✅ Общая оценка mAP50-95 = 0.661 — очень достойный уровень для таких задач.


Проверка на тестовых данных
import os
from ultralytics import YOLO
# Load a model
model_path = "/content/runs/detect/train/weights/best.pt"
model = YOLO(model_path) # pretrained YOLOv12n model
# Run batched inference on a list of images
results = model('/content/datasets/test/images', stream=True) # return a generator of Results objects
# Create directory if it doesn't exist
output_dir = '/content/result'
os.makedirs(output_dir, exist_ok=True)
# Process results generator
for i, result in enumerate(results):
result.show() # display to screen
result.save(filename=os.path.join(output_dir, f'result_{i}.jpg')) # save to disk


















Проверка работы модели на видео
yolo predict model='/content/model/best.pt' source='/content/test_video'
Добавим немного эффектов
Заключение
Данный проект, демонстрирующий применение искусственного интеллекта в области распознавания объектов, показал высокую точность обнаружения всех классов, особенно приоритетного класса DRON (precision — 0.959, recall — 0.923, mAP50 — 0.957).
Однако наблюдаются определённые трудности с точной идентификацией отдельных классов, в частности BIRDS (mAP50-95 — 0.591), что, вероятнее всего, связано с дисбалансом классов в датасете.
Скорость обработки видеоизображений при использовании CUDA составила 1.6 мс на кадр, что обеспечивает достаточную производительность для применения в реальных условиях.
Полученные результаты позволяют рассматривать разработанную систему в качестве основы для создания прикладных решений по мониторингу воздушного пространства и обнаружению БПЛА.
Для повышения качества классификации редких классов (например, BIRDS) целесообразно провести дополнительное дообучение модели с балансировкой обучающего датасета.
Комментарии (46)
QwertyOFF
25.06.2025 09:25Обычная широкоугольная камера перестанет видеть квадрик на расстоянии в пару десятков метров, самолётик может метров сто-двести в зависимости от размаха. Не совсем понятна практическая ценность такой системы обнаружения, разве что это для наведения на цель на последних метрах пути.
nikolz
25.06.2025 09:25Полагаю, что наоборот. Начальное обнаружение всего, что летает.
В реальности, после обнаружения надо управлять оптикой и настраивать более узкий угол наблюдения , потом использовать либо стерео либо TOF и определять расстояние и угловые координаты. Тогда будет какой-то смысл такой системы.
QwertyOFF
25.06.2025 09:25Мне кажется в том и загвоздка, что широкоугольная камера не даст обнаружить заранее. Даже в наборе в статье почти нет кадров, похожих на съемку дрона издалека.
RusikR2D2
25.06.2025 09:25При фокусном расстоянии 35 мм (а это даже не очень широкий угол), объект размером 0.5 метра, уже на расстоянии 3000 метров будет занимать всего 1 пиксель для полнокадровой камеры с 24Мпикс.
Mordov
25.06.2025 09:25Вот поэтому нужна вторая камера с еще большим фокусным расстоянием. Первая фиксирует все точки в небе и по характеру полета пытается определить, а не птица ли это (до тех пор пока дроны не начнут имитировать их полет). Нужен датасет на полет всех птиц в регионе. Вторая камера наводится и уже проверят каждую точку на предмет того чем она является. Первая камера снова наблюдает за идентифицированными точками, до исчезновения их из поля зрения и следит за появлением новых.
RusikR2D2
25.06.2025 09:25Увидеть точку на 300м - это уже поздно. нужно раз в 10 больше. Ну и даже с 300м никакой датасет не поможет определить что это такое, если объект занимает 1пикс.
Mordov
25.06.2025 09:25А почему не определит? Думаю по треку перемещения точки в пространстве можно будет понять, птица это или нет.
Yozh-lyudoyed
25.06.2025 09:25всё, что вы можете обнаружить глазом, камерой обнаруживается гораздо лучше
QwertyOFF
25.06.2025 09:25С радостью послушаю какая оптическая камера или сборка их адекватного количества покроет небо и сможет там разглядеть коптер меньше полуметра размахом (вместе с пропами) на расстоянии хотя бы в пару километров.
Я, как любитель всего летающего, попадал в ситуацию, когда мой самолётик размахом 75см на расстоянии в полкилометра от меня оказался без питания, увидеть куда он там планировал сам собой и где шлепнулся было весьма не просто.
Plesser
25.06.2025 09:25поставить на самолет автономную пищалку?
QwertyOFF
25.06.2025 09:25Для того чтобы это помогло, нужно хотя бы плюс-минус сотня метров знать место падения. В описанном выше случае питание пропало "удачно", так что самолет с высоты в сотню метров пробежал еще около 500. Проблему решают радиомаяками типа tBeacon с автономным питанием. Я пока ни одного самолета не потерял, поэтому отношусь к лагерю тех кто еще не использует маяки. И даже так, это не панацея, потому что был у меня случай, когда обломки были рассеяны на площади 400*100 метров, половина которой в лесу.
Plesser
25.06.2025 09:25это жестко, я только захожу на территорию самолетов и видимо мне тоже будет очень больно ))))
Plesser
25.06.2025 09:25А вот эти фотографии они с неподвижных камер или камеры в это время двигались и присутствовала тряска?
ps
и я правильно понимаю что это все работает только при хорошем освещении?
RusikR2D2
25.06.2025 09:25Все зависит от выдержки. Чем короче выдержка - тем больше нужно света. Зато трясти камеру можно сильнее. Впрочем, такая система скорее на неподвижных объектах нужна.
Plesser
25.06.2025 09:25а как она будет работать в темноте? на стационарных объектах нужно РЭБ ставить хороший, наши сейчас научились хорошо глушить частоты, по крайне мере типовые которые используют дроны
axion-1
25.06.2025 09:25"Drone", раз уж имена классов на английском а не транслитом.
DrZlodberg
25.06.2025 09:25А почему не используют звук? У всей летающей мелочи довольно характерный звук, который прекрасно слышно даже когда визуально его не видно. С крупной техникой или птицей перепутать вообще невозможно. Поворотная платформа, 3 или 4 микрофона для наведения и дробовик для котрольной проверки...
Plesser
25.06.2025 09:25А почему не используют звук?
у меня есть 5' дрон его с 2 метров практически не слышно? очень много зависит от лопастей
Yozh-lyudoyed
25.06.2025 09:25если в небе 2-3 карлсона, то по звуку уже не понять кто где, можно только понять что они есть
Rikhmayer
25.06.2025 09:25Как мне кажется, начинать надо со стереозрения - две камеры позволят сразу отсечь самолёты и вертолёты по расстоянию. А оставшееся уже классифицировать на птиц и дроны.
QwertyOFF
25.06.2025 09:25axion-1
25.06.2025 09:25Бедные птицы, раньше только в турбины затягивало, теперь ещё и ПВО их начнёт крошить.
xSVPx
25.06.2025 09:25Не начнет. Дорого очень всех птиц крошить.
Но очевидно, что определение по внешнему виду - плохая идея. Боюсь оптически вообще мало что определишь. Радар нужен и куча кадров, чтобы понимать как именно и куда летит
Yozh-lyudoyed
25.06.2025 09:25не так то и дорого. ну и у птиц случится естественный отбор и они быстро научатся не летать где не надо
axion-1
25.06.2025 09:25Не всех, разумеется. Но придётся их различать и ошибки неизбежно будут случаться. Чаще, если дроны начнут мимикрировать под птиц.
hector
25.06.2025 09:25Тут наверное стоит брать информацию из нескольких источников. Я бы подумал о 3 точках с микрофонами разнесённых допустим на километр друг от друга. По эффекту Доплера и усилению сигнала можно спрогнозировать направление движения. По маске звука сам объект.
А уже на подлёте использовать широкоугольную камеру, зная что 1 пиксель в этом районе - это 87% fpv
thingumajig
25.06.2025 09:25Возможно, для таких задач уже можно мультимодальную модель начинать проектировать, которая объединяет данные оптики, радара, звука и других датчиков по возможности.
Хотя создание датасета для такого будет боль.
nikolz
Можно подробнее, какое оборудование Вы предполагаете в реальных условиях?
Moog_Prodigy
Я сначала подумал, что это на esp32 будет крутиться (не ну делают же на них подобное). Ан нет.
ai_lab_experiments5566 Автор
Модель тестировалась на IP-камере с подключением по Wi-Fi с использованием GPU NVIDIA RTX 3070 Ti (8 ГБ) и CUDA 12.8. В случае встраиваемых решений возможно использование устройств семейства NVIDIA Jetson. Также для реальных условий необходимо оптимизировать датасет и дополнить его данными, полученными в этих самых реальных условиях.
An_Sm_ru
Результаты детекции на тестовых изображениях очень медленно, даже на 3070, 13-17 мс на изображение 640*640.
Подайте на вход 1920*1080, чтобы объект занимал порядка 16*16 пикселей, тогда расскажите какая скорость и качество получилось.
Oxygent
640x640 это вход модели, а не размер кадра. Там в любом случае будет ресайз кадра. А 13 мс вполне себе неплохое значение, около 77 ФПС.