Псс… Эй, парень, хочешь использовать машинное обучение для классификации данных NASA UAVSAR?

Подожди, что мы делаем?

Прежде чем мы начнем кодировать, давайте быстро определим нашу проблему. Рассмотрим следующую ситуацию:

Ураган обрушивается на берег в Остине, штат Техас. Люди ранены и нуждаются в эвакуации, но дороги затоплены. Как нам добраться до них? Какие районы пострадали больше всего? Какие районы недоступны?

Что нам нужно, так это карта, которая точно показывает, какие регионы были затоплены.

Геологическая служба США в настоящее время использует датчики для отслеживания уровня воды. Эти датчики экономичны, но должны быть установлены заранее и обеспечивают отображение с очень низким разрешением. В идеале нам нужно более гибкое решение.

Мы могли бы попытаться использовать спутниковые снимки, но из-за облачного покрова очень трудно увидеть, что происходит на уровне земли.

Что нам действительно нужно, так это что-то среднее. Нам нужны изображения из-под облачного покрова. Нам нужен БПЛА.

Это птица… Это самолет… Это НАСА!

К счастью, добрые люди из НАСА нас прикрыли. С 2007 года программа НАСА UAVSAR осуществила сотни полетов с использованием самых современных радиолокационных датчиков, собрав тонны высококачественных данных. Мы будем использовать выбранную часть этих данных для нашего проекта.

Так что же означает UAVSAR? Итак, начнем… UAVSAR расшифровывается как «необитаемый летательный аппарат с синтезированной апертурой». Фу! Это был полный рот. Ну и как выглядят эти данные?

Вы можете скачать необработанные данные с веб-сайта НАСА. Если вы хотите следовать этой серии руководств, вы можете загрузить наш тщательно отобранный набор данных с Kaggle. Мы выполнили трудную задачу по ручной маркировке некоторых из них. Чтобы пометить больше данных самостоятельно, вы можете перейти на наш сайт.

Полировка данных

Прежде чем мы обучим нашу модель, нам нужно выполнить некоторую предварительную обработку, чтобы стандартизировать наши данные. Используя opencv, мы конвертируем наши полигоны geojson в изображение «маски». Обратите внимание, что наше изображение маски и необработанное изображение должны иметь одинаковые размеры. Затем мы выполняем четырехточечное преобразование перспективы как для нашего необработанного изображения, так и для изображения-маски.

Детали реализации выходят за рамки этой вводной статьи, но если вам интересно, посмотрите мой исходный код. Наши полученные данные выглядят так…

Упрощение предположений

Мы рассматривали каждую полосу данных как двумерную плоскость. Данные UAVSAR проецируются с использованием равноугольной системы координат, а не проекции Меркатора. Если ваши изображения находятся вблизи экватора, это не должно вас сильно волновать. Однако, если вы используете наборы данных ближе к полюсам, вам следует пересчитать свою проекцию.

Использование преобразования перспективы приводит к ошибкам алиасинга. Чтобы смягчить это, вы можете увеличить исходное изображение в 3 раза, прежде чем деформировать его. Это гарантирует, что каждый исходный пиксель отображается как минимум в один новый пиксель. Имейте в виду, что это существенно увеличивает вычислительную сложность.

Мы также предположили, что каждый из классов (открытая вода, затопление, засушливость и т. д.) является дискретным значением. В действительности эти границы не так четко определены, и наши классы могут быть не совсем взаимоисключающими.

Предстоящие

Теперь у нас есть конвейер для классификации и стандартизации данных. В следующий раз мы начнем определять нашу модель машинного обучения.

Кредит

Особая благодарность профессору Мариам Саллум за руководство этим проектом и за то, что она была отличным наставником. Также следует поблагодарить Харини Венкатесан за ручную классификацию данных и за то, что познакомил меня с Google Colab. Наконец, все это было бы невозможно без неустанной работы блестящих сотрудников НАСА.