В настоящее время аэрофотосъемка с помощью беспилотных летательных аппаратов (БПЛА) становится все более популярным способом мониторинга местности. Данный способ позволяет получить информацию, которая очень важна для принятия верных управленческих решений, направленных на охрану и рациональное использование природных ресурсов, кадастровый учет, транспортный надзор, и многих других целей.
С каждым днем растет количество компаний, занимающихся поиском объектов с помощью воздушной разведки местности. Для ее проведения чаще всего используется БПЛА, оборудованный цифровой профессиональной фотокамерой, которому задается определенный маршрут. При этом в результате съемки создается огромная коллекция изображений, в которой доля искомых объектов незначительна. Большинство организаций, таких как «ZALA AERO», «Finco AnimalCount» и «Русгеоком», предоставляющих подобные услуги, выполняют поиск данных объектов вручную. В случае очень больших коллекций (несколько тысяч и более) обработка изображений становится достаточно трудоемкой. В связи с этим становится актуальной автоматизация поиска целевых объектов на цифровых изображениях (аэрофотоснимках) (рис. 1).
Целью исследования является разработка комбинированного метода детектирования целевых объектов на основе алгоритма Виолы – Джонса и сортировки его результатов с помощью сверточной нейронной сети.
Комбинированный метод
Процесс обнаружения объектов технически представляет собой формирование множества областей в виде набора координат прямоугольников на основе анализа содержимого исходного изображения. Участки исходного изображения, соответствующие сформированным прямоугольным областям, будут считаться найденными объектами.
Рис. 1. Пример аэрофотоснимка с выделенными объектами
Множество найденных объектов можно разделить на 2 подмножества: множество релевантных объектов, то есть тех, что соответствуют искомому классу, и множество нерелевантных объектов. На основе соотношения релевантных и нерелевантных объектов определяются количественные характеристики качества работы алгоритма обнаружения: полнота и точность.
Полнота вычисляется как отношение найденных релевантных документов к общему количеству релевантных документов. Полнота характеризует способность системы находить нужные пользователю объекты, но не учитывает количество нерелевантных объектов, выдаваемых пользователю.
Точность вычисляется как отношение найденных релевантных объектов к общему количеству найденных документов. Точность характеризует способность системы выдавать в списке результатов только релевантные объекты [1].
Зачастую, если рассматривать различные модификации одного и того же алгоритма, точность и полнота будут находиться в обратной зависимости. То есть можно добиться высокой точности, жертвуя полнотой, и наоборот. Поэтому в настоящее время для обнаружения различных объектов с высокими показателями и точности, и полноты применяется комбинированный метод.
Общая схема работы комбинированного метода выглядит следующим образом. На первом этапе изображения из коллекции подаются на вход детектора. Для достижения наилучших показателей используется алгоритм обнаружения с параметрами, соответствующими результатам с наибольшей полнотой, в результате работы которого получается набор найденных объектов. Среди них могут быть релевантные и нерелевантные объекты. На втором этапе найденные объекты подаются на вход классификатора, задачей которого является сортировка объектов (требуется оставить релевантные объекты и отбросить нерелевантные). Таким образом удается повысить точность поиска целевых объектов.
В данном исследовании в качестве алгоритма обнаружения рассматривается алгоритм Виолы – Джонса, который основан на использовании каскадов из слабых классификаторов, таких как детекторы Хаара [2, 9]. Данный алгоритм реализован в библиотеке OpenCV [3, 8], однако для его работы требуется обученный каскад классификаторов. Помимо детектора Хаара в качестве алгоритма поиска объектов может использоваться метод локальных бинарных шаблонов и другие методы детектирования [4].
Качество работы каждого слабого классификатора в отдельности мало отличается от случайного выбора, поэтому для построения сильного классификатора используется так называемый «бустинг» [2]. «Бустинг» (от англ. boosting – повышение, усиление, улучшение) – это процедура последовательного построения композиции алгоритмов машинного обучения, когда каждый следующий алгоритм стремится компенсировать недостатки композиции всех предыдущих алгоритмов. Основная задача такой процедуры – из множества слабых классификаторов (в данном случае – это признаки Хаара) построить эффективный сильный классификатор (каскад).
Классификатор называется сильным потому, что, в отличие от слабого, точность классификации значительно лучше чем при случайном выборе. А точность целого каскада уже стремится к 1.
Полученный в результате обучения каскад необходимо сохранить. Для этого можно использовать XML-файлы, как это сделано в библиотеке «OpenCV».
Представленный выше алгоритм обучения реализован в библиотеке «OpenCV» в виде утилиты opencv_traincascade. Данная утилита требует наборы позитивных и негативных образов (релевантных и нерелевантных объектов соответственно).
Далее формируется специальный конфигурационный файл с помощью утилиты opencv_createsamples, который затем подается на вход opencv_traincascade. После того, как opencv_traincascade завершит свою работу, обученный каскад будет сохранен в XML-файл. Это готовый обученный классификатор, который можно использовать для поиска объектов на изображении.
Сверточные нейронные сети
Сверточные нейронные сети (СНС, CNN), предложенные Яном Лекуном, в отличие от простых искусственных нейронных сетей благодаря своей архитектуре позволяют эффективно распознавать изображения [7]. В структуру такой сети входят так называемые сверточные (convolution) и субдискретизирующие (subsampling) слои. Архитектура типичной СНС представлена на рис. 2.
Рис. 2. Архитектура типичной сверточной нейронной сети
На данный момент существует несколько различных программных платформ и библиотек для работы с СНС. Наиболее распространенной среди них является библиотека «Caffe», разработанная в Berkeley Vision and Learning Center (BVLC) [6].
Для обучения и применения нейросетевых классификаторов библиотека «Caffe» предлагает несколько утилит.
Утилита convert_imageset формирует обучающую выборку в формате «LevelDB», пригодном для работы алгоритма обучения. Данная утилита принимает на вход текстовый файл, содержащий строки следующего вида: image.jpg < class > , где < class > – числовой идентификатор класса изображения.
Для вычисления среднего значения изображения предназначена утилита compute_image_mean, которая на вход принимает сформированную базу данных типа LevelDB и возвращает на выходе файл, содержащий среднее значение изображения.
Для обучения сверточной нейронной сети в библиотеке «Caffe» существует программа caffe, которая принимает на вход специальный текстовый файл с конфигурационными параметрами. В данном файле указываются такие параметры обучения, как максимальное количество итераций (эпох обучения), периодичность и длительность тестирования промежуточных состояний и конфигурационный файл нейронной сети. Последний представляет собой текстовое описание слоев сети с указанием источника данных для обучения и тестирования и количеством выходных параметров.
Выходные значения представляют собой некоторые веса, которые вычисляются в процессе работы нейронной сети и сумма которых равна 1. Количество выходных параметров фактически определяет количество поддерживаемых классов. Оно также связано с теми значениями классов, которые указываются в файле обучающей выборки.
Практические результаты
Для обучения каскада классификаторов была подготовлена обучающая выборка размером 640 релевантных и 9800 нерелевантных объектов. Для тестирования полученного каскада была сформирована выборка из 13 цифровых аэрофотоснимков, на которых были размечены 24 релевантных объекта.
При обучении использовались параметры:
numStages = 16 – количество уровней каскада, которые программа будет обучать;
minhitrate = 0,99 – минимальная доля релевантных объектов, которые были корректно распознаны при обучении;
maxFalseAlarmRate = 0,5 – уровень ложного распознавания нерелевантных объектов, при котором обучение будет остановлено;
mode = ALL – использовать полный комплект Хаар-признаков, так как нам важна ориентация объекта.
Тестирование было произведено на языке Python с помощью библиотеки OpenCV и следующего кода:
cascade_path = «/path/to/cascade.xml»
cascade = cv2.CascadeClassifier (cascade_path)
faces = cascade.detectMultiScale(image, scaleFactor, minNeighbors)
Результаты поиска объектов
№ п/п |
Обозначение |
Всего объектов найдено |
Релевантных объектов найдено |
Точность |
Полнота |
1 |
haar |
340 |
23 |
0,068 |
0,958 |
2 |
haar_pr |
50 |
22 |
0,440 |
0,917 |
3 |
haar_NN |
83 |
21 |
0,253 |
0,875 |
4 |
haar_pr_NN |
30 |
21 |
0,700 |
0,875 |
Результаты работы функции detectMultiScale зависят от входных параметров scaleFactor и minNeighbors, которые обозначают коэффициент увеличения скользящего окна и минимальное количество обнаружений одной и той же области при разных размерах скользящего окна соответственно. Для поиска оптимальных значений параметров был запущен тест с использованием перебора диапазона допустимых значений. В результате тестирования были отобраны 2 группы значений параметров, показавшие наилучшие результаты с точки зрения полноты и точности («haar» и «haar_pr»). Результаты работы алгоритма с этими параметрами представлены в таблице.
Для обучения сверточной сети, соответствующей данной предметной области, была взята за основу структура сети CIFAR-10, конфигурация которой также представлена в Caffe [5]. Единственным отличием в данном проекте является только входной слой и количество классов выходного слоя (0 – нерелевантный объект, 1 – релевантный объект).
В качестве обучающей выборки было подготовлено множество из 640 релевантных объектов и 640 нерелевантных. В качестве тестовой выборки было подготовлено множество, содержащее 23 релевантных и 31 нерелевантный объект. В результате классификации 50 объектов из 54-х были классифицированы правильно с точностью 92,6 %.
Полученный нейросетевой классификатор был использован для сортировки результатов алгоритма Виолы –Джонса и был применен к результатам, обозначенным как «haar» и «haar_pr». Полученные отсортированные выборки («haar_NN» и «haar_pr_NN» соответственно) были оценены с точки зрения полноты и точности. Результаты работы алгоритма сортировки представлены в таблице.
Заключение
В результате исследования удалось разработать комбинированный метод обнаружения целевых объектов фауны, обладающий точностью 70 % и полнотой 87,5 %. Несмотря на это, в процессе исследования обнаружились некоторые проблемы. Так, распознавание с помощью каскада Хаара с параметрами, направленными на детектирование наибольшего количества релевантных объектов («haar»), хотя и показало наибольшую полноту, точность результатов оказалась незначительной. При этом сортировка позволила повысить точность только до 25 %. Причиной такой работы каскада Хаара является недостаточное наполнение обучающей выборки изображениями различных типов из-за изначально ограниченной коллекции данных. Подобные проблемы так же проявились и при обучении нейронной сети.
В дальнейшем для решения вышеуказанных проблем предполагается использовать обучающие выборки с множеством классов, что в перспективе позволит заметно повысить точность и полноту поиска.
Работа выполнена при финансовой поддержке Программы стратегического развития ПетрГУ в рамках реализации комплекса мероприятий по развитию научно-исследовательской деятельности.
Рецензенты:
Питухин Е.А., д.т.н., профессор, Петрозаводский государственный университет, г. Петрозаводск;
Печников А.А., д.т.н., доцент, ведущий научный сотрудник, Институт прикладных математических исследований Карельского научного центра РАН, г. Петрозаводск.