Представлять себе

Вы открываете Google Maps и вводите «кофе», чтобы найти магазины поблизости. Приложение загружает карту всего вашего города с максимальной детализацией. Вы ждете минуты и сотни мегабайт загрузки на свой телефон, прежде чем 4 или 5 контактов местоположения упадут к вам ближе всего.

Если бы приложение делало это каждый раз, когда вы попадаете в новый район или ищете что-то новое, вы, вероятно, перестанете его использовать. Это крайний, даже абсурдный сценарий, но мы часто делаем что-то подобное с геопространственными данными в глубоком обучении.

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

Если нам нужно максимальное разрешение и полное покрытие всех изображений для обучения наших моделей, это сработает. Но что, если мы хотим оценить модели на небольших выбранных подобластях новых изображений или проанализировать очень большие области с большей скоростью и меньшей детализацией, чем то, что предоставляет исходный файл?

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

Краткое введение в COG

В геопространственном мире многие интересные разработки подталкивают нас к более интероперабельной облачной архитектуре для обработки и анализа данных:

Почему, что и как эти связанные инициативы были хорошо объяснены Крисом Холмсом в его серии из трех частей Облако - Нативная Геообработка, поэтому я не буду вдаваться в подробности. что здесь. Я коснусь их, поскольку они относятся к геопространственному глубокому обучению, в следующих статьях.

Сегодня все о COG. Подводя итог в отличной презентации об эффективных облачных рабочих процессах от @echeipesh от GeoTrellis, мы хотим этого:

"Эй, давай не будем скачивать каждый раз весь файл".

COG обеспечивают: доступ к огромным геопространственным файлам становится быстрой и выборочной потоковой передачей данных с использованием тех же веб-технологий, которые позволяют запускать воспроизведение видео до того, как будет загружен весь файл. Вот несколько последних достижений и внедрений, показывающих, что нового возможно:

COG для глубокого обучения

Функциональность, на которой мы сосредоточимся для глубокого обучения, заключается в том, как COG используют мозаику и обзоры:

Мозаика создает ряд внутренних "плиток" внутри фактического изображения вместо использования простых "полос" данных. При наличии полосы данных необходимо прочитать весь файл, чтобы получить ключевой фрагмент. С помощью плиток возможен гораздо более быстрый доступ к определенной области, так что доступна только часть файла, которую необходимо прочитать.

Обзоры создают версии одного и того же изображения с уменьшенной дискретизацией. Это означает, что оно «уменьшено» по сравнению с исходным изображением - в нем гораздо меньше деталей (1 пиксель, в то время как у оригинала может быть 100 или 1000 пикселей), но он также намного меньше. Часто у одного GeoTIFF будет много обзоров для соответствия разным уровням масштабирования. Они увеличивают размер всего файла, но их можно обслуживать намного быстрее, поскольку средство визуализации просто должно возвращать значения в обзоре вместо того, чтобы выяснять, как представить 1000 различных пикселей как один.

Организация этих плиток и обзоров, предоставляемых сервером плиток COG (например, tile.rdnt.io благодаря Radiant.Earth и Seth Fitzsimmons), как правило, следует скользкой соглашение об именах фрагментов карты »:

  • Плитки - это файлы в формате PNG или JPG размером 256 × 256 пикселей или 512 × 512 пикселей.
  • Формат имени файла (URL): /{zoom}/{x}/{y}.png.
  • Каждый уровень масштабирования - это каталог {zoom}, каждый столбец - это подкаталог {x}, а каждая плитка в этом столбце - это файл {y}

Хм, квадратные изображения размером 512 и 256 пикселей. Звучит знакомо?

Плитки и обзоры COG передают нам геопространственные данные на блюде: последовательно привязанные и внутренне организованные, оптимизированные для быстрого доступа и видимости на каждом уровне масштабирования и отформатированные знакомым образом для моделей глубокого обучения.

Чтобы проверить потенциал, я создал рабочий процесс Входная COG → Модель Inference → Output COG, который:

  1. получает обзорные плитки из любого COG на любом уровне масштабирования (или нескольких уровнях)
  2. выполняет вывод для каждой плитки и повторно собирает результаты
  3. сохраняет выходные данные как правильно привязанный и проверенный файл COG

Пример, шаг за шагом

Вот этот рабочий процесс в действии. Мы будем использовать это изображение с дрона с разрешением 7 см, сделанное Международной организацией ООН. по миграции лагерей беженцев рохинджа возле Кокс-Базара, Бангладеш, размещенных в качестве COG на OpenAerialMap:

1. Получите плитки с уровнями масштабирования 17, 18 и 19, обслуживаемые tile.rdnt.io.

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

* модель, используемая для демонстрации рабочего процесса; не соответствует этим данным, поэтому результаты могут показаться неоптимальными. Об обучении и выводах моделей будет рассказано в одной из следующих публикаций.

3. Повторно собирайте мозаичные результаты в полную выходную карту на каждом уровне масштабирования

4. Ансамбль в окончательную выходную карту (с новым цветовым диапазоном)

5. Рассчитайте географические границы и сохраните как геопривязанный COG.

Насколько это быстро?

Выполнение примера рабочего процесса на удаленном экземпляре графического процессора (машина Paperspace P5000) заняло ~ 30 секунд:

starting inference for zoom level: 17
100%|██████████| 15/15 [00:01<00:00,  9.36it/s]
starting inference for zoom level: 18
100%|██████████| 50/50 [00:10<00:00,  4.78it/s]
starting inference for zoom level: 19
100%|██████████| 152/152 [00:13<00:00, 11.04it/s]
CPU times: user 14.2 s, sys: 968 ms, total: 15.1 s
Wall time: 25.9 s

Я также был впечатлен разумной скоростью при использовании только центрального процессора: ~ 12 минут на моем обычном Macbook Pro 2015 года, хотя код не оптимизирован для производительности:

CPU times: user 14min 51s, sys: 1min 26s, total: 16min 17s
Wall time: 11min 43s

Это быстрее, потому что использование обзорных плиток COG с определенными разрешениями (уровнями масштабирования) позволяет напрямую получать необходимую информацию, избегая ненужного и тяжелого управления данными, типичного для подготовки геопространственных данных для глубокого обучения.

В первом примере исходный размер файла COG составляет всего 30 МБ, что не будет очень заметной разницей. Используя гораздо более крупный пример, это исходное изображение размером 900 МБ большей площади было обработано на GPU за 90 секунд. Работая традиционно, я бы все равно скачивал файл (на типичных скоростях широкополосного доступа):

Увеличенный и наложенный вид того же вывода, что и выше, показывает, что важные детали (где есть застроенные территории) сохраняются вблизи:

О, возможности

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

Эти данные включают спутниковые и аэрофотоснимки с Landsat на AWS, OpenAerialMap и Planet и многое другое, поскольку провайдеры все чаще обращаются к COG:

Развитие COG для глубокого обучения означает, что мы можем:

  • выборочно работайте с подобластями любого размера и с любым количеством уровней масштабирования исходных изображений, которое нам нужно для получения полезных результатов.
  • выберите отдельные спектральные диапазоны или смешайте и сопоставьте любую комбинацию диапазонов с одним изменением параметра тайлового сервера (т. е. rgb=1,1,1).
  • создавать новые модели, подавая плитки COG непосредственно в наши обучающие конвейеры с метками, генерируемыми на лету, возможно, с помощью инструментов подготовки данных геопространственного машинного обучения, таких как Robosat или Label Maker.
  • протестируйте множество моделей на изображениях одной области или одну модель на многих областях и в широком диапазоне визуальных условий, чтобы оценить их применимость к данным реального мира.
  • развертывать модели для любого поставщика данных COG с меньшими затратами и инфраструктурой (облачные, только ЦП), что делает более доступным ИИ-улучшение многих локализованных гуманитарных, экологических и местных геопространственных проектов, подобных тем, которые выполняются WeRobotics Летающие лаборатории.

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

Я с нетерпением жду возможности увидеть и поделиться тем, что вы придумали!

Нравится то, что вы читаете? Хотите защитить свое здоровье и подготовить наши сообщества к изменению климата? Если вы хотите наилучшим образом поработать в области геопространственного анализа и глубокого обучения, чтобы справиться с самыми сложными системными проблемами в области охраны окружающей среды и справедливости, Anthropocene Labs ищет вас! Свяжитесь с dave (at) anthropo dot co