Беспилотные летательные аппараты (БПЛА), или дроны, становятся всё более распространёнными в различных областях — от коммерческой доставки и мониторинга сельскохозяйственных угодий до разведывательных миссий и обеспечения безопасности.
Однако, по мере роста их числа, возрастает и сложность задачи их распознавания, идентификации и трекинга, особенно когда речь идёт о малых дронах.
Сложно выявить малые дроны, которые благодаря своим компактным размерам и высокой манёвренности могут легко уклоняться от обнаружения радиочастотными и радарными методами. Эта задача становится ещё более сложной в условиях городской застройки или на местности с плотной растительностью.
Привет, Хабр! Меня зовут Кирилл Кухарев и я разработчик в компании 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), то я лишь графически укажу, как каждая модель обрабатывает входное изображение.
В семействе 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 недостаточно, тем более на валидационной выборке. Необходимо было изучить качество обнаружения беспилотников разных размеров на тестовой выборке.
Можно сказать, что наилучшая точность для беспилотников меньшего размера (до 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 п. п. При добавлении трекера акцент делался на повышение значения полноты, особенно для небольших размеров БПЛА. Для определения дронов в режиме реального времени был реализован следующий алгоритм.
На вход системе поступают кадры с видеокамеры. Далее происходит изменение размера изображения до 1080x1080 пикселей, чтобы подать это изображение на вход модели нейронной сети. Если предсказанные значения координат рамки и класса объекта меньше порогового значения достоверности, то ограничивающая рамка не отображается. Если модель определила беспилотник на пяти подряд идущих кадрах со значением
, то запускался трекер. После запуска удаляются ограничивающие рамки детектора и отображаются координаты ограничивающей рамки трекера, а также маршрут беспилотника в видеопотоке.
При инференсе системы скорость обработки 1 кадра составляла, в среднем, 150 мс (~6 фпс). Большую часть времени занимала детекция объектов, так как скорость детекции была обратно пропорциональной количеству БПЛА на изображении. Для оптимизации системы модель YOLO была переведена в формат ONNX и адаптирована для работы на графическом процессоре. В результате скорость обработки одного изображения сократилась до 25-30 мс(~32 фпс).
Какие есть нюансы?
Несмотря на то, что в большинстве случаев система точно определяет беспилотник небольших размеров на изображении, все же существуют случаи, когда детектор теряется и не может распознать дрон. К таким ситуациям можно отнести:
Плохая освещенность территории
В кадр попала только часть беспилотника
Размер БПЛА слишком маленький
Цвет БПЛА сливается с задним фоном
Для решения проблемы детекции в условиях плохой освещённости в наборе данных присутствуют изображения с дроном в инфракрасном режиме. При условии, что видеокамера поддерживает инфракрасный режим, проблема плохой освещённости будет отсутствовать.
В случае, когда объект попадает в кадр неполностью достаточно сложно однозначно отделить является ли он беспилотником или нет. В кадре должно находиться не менее 70% объекта для однозначного определения БПЛА.
Модуль однозначно определяет БПЛА размером не меньше 7x7 пикселей с точностью 83%. Затем, со снижением размера дрона, точность детекции начинает резко снижаться. Это связано с тем, что модель не может извлечь достаточное количество признаков, которые бы соответствовали именно дрону. Решением такой проблемы является камера с оптическим зумом для увеличения размеров подозрительного объекта.
Цвет беспилотника иногда может совпадать с цветом заднего фона.
Однако перечисленные ситуации были решены с помощью трекера при определении траектории движения объекта в видеопотоке.
Выводы
В процессе разработки системы был собран набор данных с беспилотниками, в котором содержится > 400 тыс. аннотированных изображений, обучены модели детекции и трекинга объектов, решены проблемные случаи.
Работа по улучшению системы не заканчивается. На данный момент ведется обучение моделей YOLOv10, RT-DETR, поиск более совершенных трекеров и оптимизация алгоритма работы системы.
Исходный код программы для полуавтоматической разметки видео, обучения моделей YOLO и SSD расположен тут.
По данной теме выложена научная статья в журнал МАИС. Работа велась сотрудниками ЯрГУ. По всем вопросам сотрудничества и совместного взаимодействия по данному проекту обращаться на почту o.dunaeva@uniyar.ac.ru.
Комментарии (18)
MesDes
27.08.2024 07:51+1Не думали кроме визуальной составляющей подключит еще и звук? Они очень хорошо и громко визжат.
Kosmak Автор
27.08.2024 07:51+2Конечно думал, более того реализовывал. В данной статье я пытался акцентировать внимание на том, что одним из вариантов определения беспилотников (не только коптеров, в исследовании и в данных также использовалась модель самолетного типа) может быть ИИ. Однако на практике для реального проекта помимо оптического модуля был реализован радиолокационный и звуковой модули. Модуль распознавания на основе нейронных сетей выступал в нем как валидационный, который подтверждал наличие или отсутствие БПЛА в определенной области(расстояние предварительно рассчитывалось на основании радиолокатора).
4pcbr
27.08.2024 07:51А есть смысл использовать более хитрые камеры со смешенным спектром? Есть ли какие-то узнаваемые тепловые маркеры на дронах (электродвигатели, наверное, должны греться)?
Kosmak Автор
27.08.2024 07:51+1Считаю, что есть, но потребуется тонкая настройка вместе с ИИ для точного определения БПЛА от всего остального, так как тепловые маркеры есть не только у дронов, но и, например, у птиц. К тому же, современные дроны могут быть оснащены хорошей теплоизоляционной системой или системой активного охлаждения.
almaz1c
27.08.2024 07:51помимо оптического модуля был реализован радиолокационный и звуковой модули.
Круто! Очень круто!
Ждать ли следующей статьи? Было бы очень интересно почитать об этом.
almaz1c
27.08.2024 07:51+1Не рассматривали возможность совместить метод фото-контрастного обнаружения малоразмерных малоскоростных беспилотников с аккустическим и /или радиочастотным (пеленгация, не РЛС) методами обнаружения?
П.с. опередили с вопросом. Оставлю комментарий ради ссылки.
NaBarje
27.08.2024 07:51Если сделать беспилотник из прозрачного матового пластика, его распознает? На ютюбе ролик с прозрачным самолетиком - размах крыльев два метра, даже с учетом фанерных непрозрачных элементов фюзеляжа, самолетик с десяти метров уже практически не видно. Поэтому, наверное, помимо оптического распознавания должны быть и иные. Например, акустическое, радио, ИК итд
ret77876
27.08.2024 07:51А вы не тестировали качество детекции SAHI, вроде специально разработана для мелких объектов?
Kosmak Автор
27.08.2024 07:51Спасибо за интересный вопрос. Да, с SAHI были проведены эксперименты, однако основная проблема заключалась в скорости обработки изображений. Поскольку одно из требований заключалось в работе в режиме реального времени, то от данного фреймворка пришлось отказаться. Однако стоит заметить, что во время экспериментов точность детекции все же была выше вместе с SAHI. К сожалению, оптимизации типа квантования и прунинга не дали значительного прироста в балансе между точностью и скоростью. Скорость стала выше, но точность и полнота стали ощутимо меньше на тестовой выборке.
ret77876
27.08.2024 07:51Спасибо за ответ. В теории можно попробовать запускать параллельно "быструю детекцию" и sahi. Т.е. пока нет результатов работы SAHI используются данные с других методов. И в итоге все данные комплексируются. Но для этого нужно дополнительные мощности, а также если дрон летит быстро, то пока SAHI его обработает он может улететь.
Psychosynthesis
27.08.2024 07:51+1Может добавите к репе хотя бы небольшое howto? Я не большой знаток питона, сходу разобраться как и что в каком порядке запускать не так-то просто...
Ещё есть ошибка в публикации
"Не смотря" в главе про нюансы, пишется слитно.
nikolz
Поправьте, если ошибаюсь, но полагаю, что Вы ищите не беспилотники а нечто, что движется в видео потоке.
Если будет аэростат Вы его игнорируете или определите как БПЛА?
Wizard_of_light
Подозреваю, что беспилотник нестандартной формы оно проигнорирует - нейросеть натренирована на стандартных коптерах. Если детектировать каждый летящий предмет, то будет от каждого воробья дёргаться.
nikolz
Уверен, что не будет.
Во-первых, воробей будет меньше,чем 7x7.
Во-вторых, вы дрон размером с воробья не обнаружите.
И самое прикольное, что воробей от дрона отличатся как муха от слона, в основном, по характеру движения.
Но Ваше решение понятно. Оно очевидное.
Wizard_of_light
На дистанции обнаружения беспилотника - конечно. Но так-то и птицы бывают покрупнее воробья, и летательные аппараты отличающиеся от квадрика/октокоптера.
nikolz
Ваша система работает по силуэту дрона. Нет проблем сделать дрон как ящик, шар, или даже в виде утки на видео.
И что вы будете распознавать?
Kosmak Автор
Вы частично правы. Нейросеть натренирована на изображениях не только квадрокоптера, но и на БПЛА самолетного типа. К сожалению не было возможности добавить в набор данных большое количество БПЛА вертолетного типа, чтобы покрыть все типы БПЛА.