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

Системы обнаружения дронов должны выполнять следующие функции:
Обнаружение БПЛА;
Идентификация типа объекта (дрон, самолёт , птица и др.);
Классификация по типу и назначению;
Определение местоположения объекта в пространстве;
Отслеживание траектории перемещения;
Оповещение оператора/системы безопасности;
Автоматическая активация контрмер, при необходимости.
Системы обнаружения БПЛА можно разделить на следующие категории:
Радиочастотные сканеры — анализируют сигналы управления и передачи данных;
Радарные комплексы — определяют объект по отражённому радиосигналу;
Оптические системы (видеокамеры) — фиксируют объект визуально;
Акустические датчики — регистрируют характерный звук дронов.
Не все существующие системы обнаружения могут выполнять одновременно все перечисленные функции.
Функция обнаружения заключается в том, что система может обнаруживать беспилотные летательные аппараты. Но одного только обнаружения обычно бывает недостаточно. Например, радар может обнаруживать не только БПЛА, но и самолёты или птиц. По этой причине без функции идентификации и классификации БПЛА не обойтись. Указанная функция позволяет отделять дроны от других объектов (самолётов, птиц и т. п.)
Цель - разработка системы обнаружения беспилотных летательных аппаратов (БПЛА), таких как дроны, с использованием методов искусственного интеллекта и компьютерного зрения.
Задача - создание модели машинного обучения, способной автоматически обнаруживать дроны, различать их от других летательных аппаратов, а также птиц, на основе визуальной информации, полученной с видеокамер наблюдения.
Одним из вариантов такой системы, является система машинного зрения 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) целесообразно провести дополнительное дообучение модели с балансировкой обучающего датасета.
Комментарии (18)
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пикс.
Plesser
25.06.2025 09:25А вот эти фотографии они с неподвижных камер или камеры в это время двигались и присутствовала тряска?
ps
и я правильно понимаю что это все работает только при хорошем освещении?
RusikR2D2
25.06.2025 09:25Все зависит от выдержки. Чем короче выдержка - тем больше нужно света. Зато трясти камеру можно сильнее. Впрочем, такая система скорее на неподвижных объектах нужна.
DrZlodberg
25.06.2025 09:25А почему не используют звук? У всей летающей мелочи довольно характерный звук, который прекрасно слышно даже когда визуально его не видно. С крупной техникой или птицей перепутать вообще невозможно. Поворотная платформа, 3 или 4 микрофона для наведения и дробовик для котрольной проверки...
Rikhmayer
25.06.2025 09:25Как мне кажется, начинать надо со стереозрения - две камеры позволят сразу отсечь самолёты и вертолёты по расстоянию. А оставшееся уже классифицировать на птиц и дроны.
nikolz
Можно подробнее, какое оборудование Вы предполагаете в реальных условиях?
Moog_Prodigy
Я сначала подумал, что это на esp32 будет крутиться (не ну делают же на них подобное). Ан нет.