![](https://habrastorage.org/getpro/habr/upload_files/f86/adf/1d5/f86adf1d529d4378b8393dc1f617ce0e.png)
Беспилотные летательные аппараты (БПЛА), или дроны, становятся всё более распространёнными в различных областях — от коммерческой доставки и мониторинга сельскохозяйственных угодий до разведывательных миссий и обеспечения безопасности.
Однако, по мере роста их числа, возрастает и сложность задачи их распознавания, идентификации и трекинга, особенно когда речь идёт о малых дронах.
Сложно выявить малые дроны, которые благодаря своим компактным размерам и высокой манёвренности могут легко уклоняться от обнаружения радиочастотными и радарными методами. Эта задача становится ещё более сложной в условиях городской застройки или на местности с плотной растительностью.
Привет, Хабр! Меня зовут Кирилл Кухарев и я разработчик в компании Raft. В этой статье я расскажу про разработку системы для детекции и трекинга БПЛА небольших размеров с помощью модели ИИ.
О чем пойдет речь в статье:
Расскажу о том, как формировался набор данных для обучения;
Опишу, по какому принципу выбирались модели из всего многообразия архитектур CV;
Поделюсь, как происходил процесс обучения;
Рассмотрю, какие метрики использовались для оценки качества работы моделей;
Затрону принцип работы алгоритма;
Приведу примеры сложных случаев и дальнейшие планы по улучшению работы алгоритма.
Откуда взялись данные и что с ними делали?
При решении конкретной узко-направленной задачи в компьютерном зрении на первом этапе всегда возникает вопрос, на чем обучать модель? Первое, что приходит в голову - это поискать общедоступные наборы данных на Kaggle или других профильных сайтах. Так я и поступил. Получилось найти несколько общедоступных наборов данных:
Набор данных БПЛА, созданный Mehdi Ozel в 2019 г. и
опубликованный на Kaggle. Этот набор данных состоит из 1359
изображений дронов и аннотаций к ним (txt, xml). Размер набора данных
составляет 725.28 Мбайт.Набор данных Amateur Unmanned Air Vehicle Detection
опубликованный на Mendeley Data. Этот набор данных содержит
около 4500 изображений любительских дронов. Размер набора данных
составляет 157 Мбайт.Набор данных с конкурса «Birds-vs-Drones».
Содержит 104426 аннотированных изображений
беспилотников.
Во втором столбце таблицы представлена статистика по количеству беспилотников разного размера в общедоступных наборах данных. Размеры изображений 1920×1080 px.
Площадь БПЛА на изображении, px | Количество БПЛА, публичный набор данных | Количество БПЛА, авторский + публичный набор данных | Размер БПЛА |
[1, 10] | 3534 | 73321 | ~3x3 |
(10, 50] | 17977 | 149012 | ~5x5 |
(50, 100] | 17463 | 56254 | ~10x10 |
(100, 500] | 50934 | 114019 | ~22x22 |
(500, 1000] | 10086 | 16590 | ~100x100 |
>1000 | 10291 | 17898 | >100x100 |
Итого | 110285 | 427094 |
Проанализировав таблицу можно сказать, что в публичных наборах данных содержится большое количество изображений беспилотников, размер которых больше 1000 пикселей. Следовательно, такие изображения не соответствуют требованиям для решения поставленной задачи (определение БПЛА небольших размеров). Для повышения качества предсказания модели было принято решение увеличить набор данных путём формирования собственных изображений для обучения. Для этого было отснято 13 видеороликов с беспилотником, летающим в разных локациях (городская и сельская местность), при разных погодных условиях (дождь, снег, солнце, пасмурно) и на разном удалении от камеры. Общая продолжительность отснятого материала составила 19 часов. Для записи видео использовались две камеры HIKVISION HiWatch (модель DSI200 (C) 2.8 mm, модель DSI200 (B) 4mm) с разрешением в 1920x1080 px и скоростью записи кадров в 25 фпс. В исследовании использовались три модели дронов: DJI Phantom 4 Pro, DJI Mini 2 Fly More Combo, ZALA Z-16 VTOL. Далее с помощью скрипта на Python видео были проаннотированы в формат XML в полуавтоматическом режиме и разделены на кадры. Распределение количества беспилотников на изображении по размеру в общем наборе данных представлено в столбце 3 таблицы 1. Как можно заметить количество беспилотников меньшего размера в общем наборе данных стало гораздо больше.
Что обучали ?
Следующий этап - это выбор архитектуры модели для обучения. Прежде чем перейти к рассмотрению архитектур стоит сказать, что есть два вида моделей детекции.
Двухэтапные (two-stage) детекторы. Как можно заметить из названия, процесс детекции происходит в два шага. На первом шаге выделяются регионы изображения, которые представляют особый интерес для дальнейшего анализа и обработки (regions of interest, ROI). На втором шаге выбранные регионы анализируются классификатором для определения принадлежности к заданным классам и регрессором, который уточняет местоположение ограничивающих рамок.
Одноэтапные (one-stage) детекторы. Подход, который заключается в предсказании координат и характеристик (класс, степень уверенности) фиксированного набора ограничивающих рамок.
Поскольку стоит задача детектирования объектов в режиме реального времени, то главными аспектами является скорость и точность обработки изображений. При сравнении двухэтапных и одноэтапных детекторов разумеется в скорости выигрывают одноэтапные детекторы. После того как определились с видом моделей стоит выделить еще два критерия, на основании которых отбирались модели:
Оценка скорости и качества работы модели детекции на общедоступных наборах данных, таких как MS COCO, PASCAL VOC.
Возможность обучить модель на доступных вычислительных мощностях. (Все вычисления производились на NVIDIA DGX-1)
Учитывая вышеуказанные требования были выбраны архитектуры детекторов семейства YOLO и SSD. Поскольку данная статья не посвящена рассмотрению принципов и описанию работы YOLO (You Only Look Once) и SSD (Single Shot Detector), то я лишь графически укажу, как каждая модель обрабатывает входное изображение.
![Принцип работы модели SSD Принцип работы модели SSD](https://habrastorage.org/getpro/habr/upload_files/826/5d2/055/8265d2055f81c537b199f4bdba88b611.png)
![Принцип работы модели YOLO (на примере YOLOv5) Принцип работы модели YOLO (на примере YOLOv5)](https://habrastorage.org/getpro/habr/upload_files/a10/3e8/4c8/a103e84c88c41682b85b2c63ac980740.png)
В семействе YOLO были выбраны несколько версий моделей - YOLOv5 (n, s, m), YOLOv8 (n, s, m), GELAN-C и GELAN-E (модификации YOLOv9).
Модель SSD обучалась без изменений архитектуры с использованием чекпоинтов и регуляризации для предотвращения переобучения. Для модели YOLO был изменен размер входного изображения с 640 на 1280 для лучшего захвата мелких деталей. Также добавлены дополнительные слои и увеличено повторение слоев C2f (Cross Stage Partial Networks with Bottleneck) на разных уровнях пирамиды признаков. Также был произведен тюнинг гиперпараметров модели для их оптимизации. В качестве тюнинга каждая из версий YOLO обучалась 5 эпох с разными гиперпараметрами. Для примера показан сгенерированный после тюнингования файл с наилучшими гиперпараметрами модели YOLOv8n.
# 150/150 iterations complete ✅
# Best fitness hyperparameters are printed below.
lr0: 0.00652
lrf: 0.00402
momentum: 0.90918
weight_decay: 0.00039
warmup_epochs: 3.44701
warmup_momentum: 0.70386
box: 7.82823
cls: 0.63425
dfl: 1.40253
hsv_h: 0.0169
hsv_s: 0.67409
hsv_v: 0.19965
translate: 0.08151
scale: 0.4757
fliplr: 0.56036
mosaic: 0.9791
Далее каждая модель YOLO была обучена с учетом чекпоинтов и с размером батч пакета равным 32.
Что получили и как оценили?
После обучения моделей необходимо было оценить, насколько хорошо модели могут определять беспилотник на изображении. Для оценки эффективности работы алгоритмов использовались метрики IoU, Precision, Recall, mAP@0.5 и mAP@0.5:0.95. Сначала сравнивались обученные модели внутри одной версии, а затем между версиями. Я лишь представлю результаты сравнения лучших моделей между версиями YOLO на валидационной выборке.
Название модели | IoU | Порог уверенности | Precision | Recall | F1-мера | mAP@0.5 | mAP@0.5:0.95 |
YOLOv5n | 0,5 | 0,2 | 0,84 | 0,61 | 0,71 | 0,73 | 0,33 |
YOLOv8n | 0,3 | 0,2 | 0,57 | 0,35 | 0,43 | 0,43 | 0,15 |
GELAN-C | 0,25 | 0,3 | 0,71 | 0,31 | 0,43 | 0,50 | 0,19 |
SSD | 0,3 | 0,3 | 0,53 | 0,44 | 0,48 | 0,36 | 0,12 |
Однако определить качество работы модели, основываясь только на метриках F-меры и mAP недостаточно, тем более на валидационной выборке. Необходимо было изучить качество обнаружения беспилотников разных размеров на тестовой выборке.
![Сравнение точности и полноты моделей в зависимости от размера БПЛА Сравнение точности и полноты моделей в зависимости от размера БПЛА](https://habrastorage.org/getpro/habr/upload_files/c2b/e81/178/c2be81178034c0b039f4f25366931bb5.png)
Можно сказать, что наилучшая точность для беспилотников меньшего размера (до 100 px) у модели GELAN-C, а наилучшая полнота у YOLOv8n. Если сравнивать одновременно и по точности, и по полноте, то лучшие результаты на тестовой выборке получились у YOLOv8n. Следовательно в качестве базовой модели для создания системы определения БПЛА в реалтайме использовалась YOLOv8n.
И будет хорошо определять?
Разумеется нет, при рассмотрении движущихся объектов в видеозаписях с камер видеонаблюдения или в режиме реального времени иногда возникают ситуации, когда объект на соседних кадрах может детектироваться прерывисто или вовсе может быть не распознанным. Для таких случаев существуют трекеры, которые могут отслеживать как один, так и несколько объектов одновременно. Трекер включает в себя последовательную оценку положения, размера и ориентации объекта на нескольких подряд идущих кадрах. В процессе изучения трекеров вместе с моделью YOLOv8n были протестированы трекеры BotSORT, ByteTrack и DeepSORT.
Размер БПЛА | BotSORT | ByteTrack | DeepSORT | |||
Precision | Recall | Precision | Recall | Precision | Recall | |
[1, 20] | 0,56 | 0,52 | 0,58 | 0,54 | 0,61 | 0,57 |
(20, 50] | 0,67 | 0,59 | 0,69 | 0,61 | 0,69 | 0,63 |
(50, 100] | 0,78 | 0,71 | 0,78 | 0,74 | 0,77 | 0,76 |
(100, 200] | 0,89 | 0,93 | 0,90 | 0,92 | 0,91 | 0,91 |
(200, 500] | 0,97 | 0,93 | 0,96 | 0,95 | 0,97 | 0,96 |
>500 | 0,98 | 0,96 | 0,98 | 0,96 | 0,98 | 0,97 |
Итого | 0,74 | 0,67 | 0,78 | 0,74 | 0,82 | 0,78 |
Наилучших результатов удалось достичь с трекером DeepSORT. В среднем, для каждого размера беспилотника точность повысилась на 3-4 п. п. Полнота повысилась, в среднем, на 4-5 п. п. При добавлении трекера акцент делался на повышение значения полноты, особенно для небольших размеров БПЛА. Для определения дронов в режиме реального времени был реализован следующий алгоритм.
![Принцип работы системы определения БПЛА Принцип работы системы определения БПЛА](https://habrastorage.org/getpro/habr/upload_files/29f/052/ee8/29f052ee831acd122dbb04323a5f9c1f.jpeg)
На вход системе поступают кадры с видеокамеры. Далее происходит изменение размера изображения до 1080x1080 пикселей, чтобы подать это изображение на вход модели нейронной сети. Если предсказанные значения координат рамки и класса объекта меньше порогового значения достоверности, то ограничивающая рамка не отображается. Если модель определила беспилотник на пяти подряд идущих кадрах со значением
, то запускался трекер. После запуска удаляются ограничивающие рамки детектора и отображаются координаты ограничивающей рамки трекера, а также маршрут беспилотника в видеопотоке.
При инференсе системы скорость обработки 1 кадра составляла, в среднем, 150 мс (~6 фпс). Большую часть времени занимала детекция объектов, так как скорость детекции была обратно пропорциональной количеству БПЛА на изображении. Для оптимизации системы модель YOLO была переведена в формат ONNX и адаптирована для работы на графическом процессоре. В результате скорость обработки одного изображения сократилась до 25-30 мс(~32 фпс).
Какие есть нюансы?
Несмотря на то, что в большинстве случаев система точно определяет беспилотник небольших размеров на изображении, все же существуют случаи, когда детектор теряется и не может распознать дрон. К таким ситуациям можно отнести:
Плохая освещенность территории
В кадр попала только часть беспилотника
Размер БПЛА слишком маленький
Цвет БПЛА сливается с задним фоном
Для решения проблемы детекции в условиях плохой освещённости в наборе данных присутствуют изображения с дроном в инфракрасном режиме. При условии, что видеокамера поддерживает инфракрасный режим, проблема плохой освещённости будет отсутствовать.
![Сравнение детекции беспилотника в обычном и инфракрасном режиме Сравнение детекции беспилотника в обычном и инфракрасном режиме](https://habrastorage.org/getpro/habr/upload_files/505/df5/80a/505df580a0cd24105bcd468f8132bb52.png)
В случае, когда объект попадает в кадр неполностью достаточно сложно однозначно отделить является ли он беспилотником или нет. В кадре должно находиться не менее 70% объекта для однозначного определения БПЛА.
Модуль однозначно определяет БПЛА размером не меньше 7x7 пикселей с точностью 83%. Затем, со снижением размера дрона, точность детекции начинает резко снижаться. Это связано с тем, что модель не может извлечь достаточное количество признаков, которые бы соответствовали именно дрону. Решением такой проблемы является камера с оптическим зумом для увеличения размеров подозрительного объекта.
![Слева птица, справа БПЛА, но определяются одинаково Слева птица, справа БПЛА, но определяются одинаково](https://habrastorage.org/getpro/habr/upload_files/cb0/8b9/199/cb08b9199d2902c6e2fca1feffd68d8c.png)
Цвет беспилотника иногда может совпадать с цветом заднего фона.
![Детектор не смог определить дрон на уровне окон пятого этажа. Детектор не смог определить дрон на уровне окон пятого этажа.](https://habrastorage.org/getpro/habr/upload_files/f54/404/1c6/f544041c688a8a4a87a7f1ee6667ae54.png)
Однако перечисленные ситуации были решены с помощью трекера при определении траектории движения объекта в видеопотоке.
Выводы
В процессе разработки системы был собран набор данных с беспилотниками, в котором содержится > 400 тыс. аннотированных изображений, обучены модели детекции и трекинга объектов, решены проблемные случаи.
Работа по улучшению системы не заканчивается. На данный момент ведется обучение моделей YOLOv10, RT-DETR, поиск более совершенных трекеров и оптимизация алгоритма работы системы.
Исходный код программы для полуавтоматической разметки видео, обучения моделей YOLO и SSD расположен тут.
По данной теме выложена научная статья в журнал МАИС. Работа велась сотрудниками ЯрГУ. По всем вопросам сотрудничества и совместного взаимодействия по данному проекту обращаться на почту o.dunaeva@uniyar.ac.ru.