Как машинное обучение спасает деревья в Екатеринбурге
Привет, Хабр! Мы сотрудники екатеринбургского офиса NAUMEN. Делимся интересным проектом — интерактивной картой деревьев на основе нейросетевых алгоритмов. В ее создании также участвуют студенты УрФУ и волонтеры нашего города.
Многие современные мегаполисы сталкиваются с проблемой недостатка зеленых насаждений, и Екатеринбург не исключение. Точечная застройка центральных районов и, как следствие, незаконные вырубки, сокращение парковых массивов не помогают улучшить ситуацию. Думаем, эта проблема знакома жителям многих российских городов. Одно из решений — создать регулярно обновляемую интерактивную карту деревьев, доступную всем. С ее помощью можно будет узнавать, сколько деревьев уже растет в городе, сколько их должно быть и в каких районах необходимы дополнительные посадки.
Проводить опись зеленых насаждений вручную — долго и неэффективно. На помощь приходят современные технологии: аэрофотосъемка, изображения Street View, съемка LiDAR-систем и дронов. Среди многообразия источников данных для получения информации об объектах городской среды наиболее доступными и относительно дешевыми являются панорамные фотографии со Street View. С их помощью можно обучить нейросеть распознавать на снимках деревья, определять их геолокацию и наносить их на карту города. Как проходил этот процесс и каких результатов удалось добиться — читайте в статье.
В 2019 году по индексу качества городской среды Екатеринбург набрал меньше половины от максимального количества баллов по уровню озеленения. Тем не менее сейчас нет точных данных, сколько деревьев растет в городе, сколько их должно быть, и в каких районах их не хватает.
По оценке качества городской среды Екатеринбург набрал меньше всего баллов за озеленение пространства
Практика подсчета деревьев реализована во многих городах мира. Открытые реестры зеленых насаждений есть в Вене, Амстердаме, Праге. Наиболее удачный пример — карта деревьев центрального района Нью-Йорка. Свыше 2200 сотрудников муниципалитета и волонтеров за один год нанесли на нее порядка 700 000 деревьев и указали их вид. Теперь, подтвердив навыки ухода за насаждениями, любой человек может взять опеку над деревом. Каждый житель Нью-Йорка может пожаловаться на состояние дерева или проблемы с ним.
О создании подобного сервиса в Екатеринбурге давно задумывались в сообществе волонтеров «Парки и скверы», куда входят Илья Котельников и Борис Оводов, сотрудники компании NAUMEN. Ребята решили помочь создать интерактивную карту деревьев Екатеринбурга, ориентируясь на данные которой жители смогут влиять на озеленение города и предотвращать незаконные вырубки.
По задумке, все деревья Екатеринбурга можно будет увидеть на интерактивной карте
В январе 2020 года сообщество волонтеров выполнило первоначальную настройку системы на ресурсе ekbtrees.ru. За две недели они нанесли на карту 150 деревьев, растущих в саду Вайнера. Собирать данные вручную оказалось очень долго, и оперативное обновление информации в будущем представлялось невозможным. Поэтому пришли к решению использовать технологии машинного обучения.
Илья Котельников:
«Используя интеллектуальные алгоритмы, мы хотим создать систему, которая посчитает, сколько деревьев в Екатеринбурге. Базовая задача − защитить то, что есть, а потом раз в 3−5 лет проводить инвентаризацию.
В идеале создать такой механизм, с помощью которого горожане смогут получать полезные сервисы: заказывать высадку зеленых насаждений или уход за ними, жаловаться на поваленные и сломанные деревья, сообщать о незаконных действиях».
Кроме того, такую карту можно будет использовать как доказательную базу во всех гражданских процессах, которые происходят в городе, например, когда на месте лесного массива хотят организовать стройку.
Чтобы ускорить процесс сбора информации о деревьях города, Илья обратился к Татьяне Зобниной, специализирующейся на разработке систем машинного обучения. Он предложил ей попробовать реализовать интерактивную карту с помощью нейросетевых алгоритмов. Изучив накопленный опыт в области распознавания деревьев и определения геопозиции объектов по данным Street View и других источников, Татьяна убедилась, что задача решаема. В январе 2020 года она разместила проект на сайте «Проектного практикума» УрФУ, чтобы привлечь к разработке студентов.
Татьяна Зобнина:
«Я стараюсь выстраивать работу со студентами в рамках «Проектного практикума» так, чтобы они успели прийти к какому-то результату за семестр. Для меня важно, чтобы им было интересно, чтобы они умели взаимодействовать в команде, распределять роли, укладывались в тайминг: в задачах, связанных с машинным обучением, с этим могут возникать проблемы. Получается такая игровая учебная практика. Также реализация проекта с использованием нейронных сетей даст студентам несомненное профессиональное преимущество при поиске работы после завершения учебы в университете».
Созданием интерактивной карты деревьев при помощи алгоритмов машинного обучения заинтересовались 4 студента Радиотехнического факультета: Егор Дёмин, Егор Кипелов, Александр Черных и Георгий Шишкин. Все они в прошлом семестре уже проходили у Татьяны курс «Распознавание эмоций по звуку» и имели достаточно высокий уровень технологических знаний и навыков, чтобы реализовать этот проект.
Студенты получили установочные материалы, узнали, какие есть готовые решения для создания интерактивной карты с помощью нейросети и выбрали из них два наиболее подходящих:
- детектирование деревьев по аэрофотоснимкам;
- использование фотографий со Street View.
Чтобы параллельно тестировать оба варианта, ребята распределились на группы по двое. Работу разделили на этапы и установили приблизительный тайминг, когда будут готовы промежуточные результаты.
По итогам исследования оказалось, что несмотря на все преимущества аэрофотосъемки качественных данных по Екатеринбургу в открытом доступе нет. От этого решения на данном этапе развития проекта пришлось отказаться. Тогда обе группы вместе приступили к реализации варианта со Street View.
Ребятам предстояло:
- Написать код для выгрузки данных со Street View.
- Разметить выгруженные фотографии — выделить на них деревья.
- Обучить нейронную сеть распознавать деревья на фотографиях.
- Написать код для преобразования фотографии со Street View, на которых выделено дерево, в координаты, оценить их точность.
- Загрузить данные на интерактивную карту деревьев Екатеринбурга.
- Проверить точность расположения деревьев на карте с помощью волонтеров.
Google и Yandex предоставляют доступ к огромному количеству городских панорам. При этом существует обширная база деревьев Нью-Йорка с геопозицией каждого растения, но без снимков. Появилась гипотеза, что можно обогатить базу фотографиями и с ее помощью обучить нейросеть по картинке определять координаты, а также другие параметры деревьев: высоту, диаметр, видовую принадлежность. После можно будет использовать обученную нейросеть, чтобы распознать деревья на панорамах Екатеринбурга и указывать их характеристики, включая геолокацию.
Однако у этого метода есть свои минусы. Дело в том, что карта деревьев Нью-Йорка была создана в 2015 году, а съемка Street View содержит более актуальную информацию. Соответственно, данные на карте и на фотографиях могут не совпадать, из-за чего в системе могут возникать ошибки. Тем не менее, это было лучшим решением для обучения нейросети на данном этапе, и ребята приступили к его реализации.
Для работы над проектом компания NAUMEN предоставила вычислительные мощности на одном из своих серверов. Студенты написали код для выгрузки данных со Street View, оптимизировали его на своих ноутбуках и перенесли на сервер.
Дальше нужно было определиться с подходящей для проекта нейросетью. Ребята остановили свой выбор на Open Source решении — сверточной нейросети YOLOv3. Основная задача, которую студенты ставили перед ней, — классифицировать размеченные данные и распознавать деревья на снимках со Street View.
YOLOv3 обучена на больших объемах данных и может распознавать более 100 разных объектов, поэтому теоретически должна была с этим справиться. Но деревья достаточно сложный объект с множеством разновидностей, поэтому на практике оказалось, что сеть неплохо бы дообучить для лучшего решения задачи.
Нужно было сделать как можно больше размеченных снимков деревьев и загрузить их в нейросеть. Для этой цели студенты сделали телеграм-бота, в котором любой человек может помочь отсортировать фотографии, отметив, есть ли в выделенной рамке дерево и с какой стороны оно расположено. Также к разметке снимков подключили волонтеров. Когда часть данных была готова, по ней стали дообучать нейросеть.
С помощью телеграм-бота каждый может поучаствовать в обучении нейросети
Помимо этого, нашими наработками заинтересовались в МГТУ им. Н.Э. Баумана. Оказалось, что Михаил Ухов, участвовавший в сборе данных для карты деревьев Нью-Йорка в качестве волонтера, реализует подобный проект в Москве. Чтобы помочь коллегам, Татьяна поделилась дообученной YOLOv3.
Тем временем студенты написали код, который при помощи нейросети распознает и выделяет на панорамах со Street View деревья и позволяет получить их координаты. Однако во время тестов выяснилось, что такой подход не дает нужной точности в определении геолокации дерева. Непростой по форме объект и искажение, которое присутствует на снимках Street View, препятствует получению правильной широты и долготы расположения зеленых насаждений.
Искажение на снимках со Street View мешает нейросети точно определять геопозицию деревьев
Чтобы понять, как точнее определять координаты деревьев по фотографиям и в каком направлении двигаться вместе со студентами дальше, Татьяна снова приступила к исследованию. Оказалось, что есть готовое решение, описанное нашим соотечественником, который преподает в университете Дублина, Владимиром Крыловым. В статье он описал алгоритм, позволяющий точно распознавать геопозицию столбов электропередач и светофоров по Street View, и разместил ссылку на GitHub с кодом алгоритма.
Гипотетически описанный Владимиром алгоритм мог подойти для распознавания деревьев. На летней стажировке в NAUMEN студенты занялись доработкой и компоновкой кода и настроек. Также подключили к работе дообученную нейросеть YOLOv3.
Получился пайплайн из трёх нейросетей и алгоритма, работающий следующим образом:
- Система собирает снимки со Street View.
- Первая нейросеть сегментирует деревья, выделяя их силуэт на фотографии.
- YOLOv3 уточняет сегмент, выделяя дерево в квадратную рамку.
- Третья нейросеть определяет расстояние от машины, с которой шла съемка Street View, до нужного объекта — в нашем случае до дерева.
- Далее алгоритм геотегирования определяет координаты дерева.
Этот метод позволяет сразу определять координаты деревьев на снимках Екатеринбурга, пропустив этап обучения нейросети с помощью карты деревьев Нью-Йорка.
В результате первого теста таким способом удалось распознать по снимкам Street View 68 деревьев по улице Сурикова и определить их координаты.
Так на карте обозначаются метки распознанных деревьев на одной из улиц Екатеринбурга
Следующим шагом планируется подключить волонтеров и оценить точность полученных данных. По итогам проверки студенты УрФУ и сотрудники NAUMEN продолжат работу над проектом в следующем семестре.
Отметим, что обучение нейросетевых алгоритмов продолжается, поэтому любой желающий может подключиться к проекту и помочь. Для этого необходимо скачать телеграм-бота и отсортировать размеченные фотографии. Более весомый вклад можно внести, размечая подобранные фотографии самостоятельно в программе YoloLabel. Если хотите поучаствовать, пишите в комментариях.