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

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

1. История

Этот пост предполагает некоторое предварительное понимание машинного обучения, глубоких нейронных сетей и работы в Python, Keras и TensorFlow 2.0.

Спутниковые изображения. Спутниковое и дистанционное зондирование за последние годы значительно продвинулось вперед, и одним из ключевых катализаторов стало снижение стоимости запуска от частных космических компаний. Это позволило более широкому кругу субъектов и организаций развернуть больше спутников. Качество изображений, доступных для широкой публики, таких как снимки Sentinel-2, также повышается; хотя все еще далеко от частных платных спутниковых услуг. Sentinel-2 имеет типичное разрешение в пикселях полосы 10 м, что означает, что каждый пиксель представляет собой область 10 м x 10 м.

CNN: сверточные нейронные сети — это современная архитектура нейронной сети для задач распознавания изображений и компьютерного зрения. Существует множество различных вариантов CNN, но обычно они состоят из свертки, объединения и слоев с плотным подключением. CNN работают намного лучше, чем обычные нейронные сети с прямой связью в изображениях, благодаря своей способности уменьшать разрешение (размеры) изображения на картах функций, сохраняя при этом кодирование ключевых функций этого изображения. Это значительно снижает сложность и вычислительную потребность сети. Типичная архитектура CNN показана ниже.

FCN.Обычные CNN отлично подходят для классификации целых изображений, но с трудом классифицируют объекты и сегменты внутри изображений. Это связано с тем, что слои свертки и пула по существу кодируют ключевые особенности изображения во все более мелкие карты характеристик, а затем передают их в полностью связанные слои перед окончательным слоем активации Sigmoid или Softmax для окончательной классификации. Закодированные функции или окончательные классификации не могут быть легко сопоставлены с исходным изображением.

Именно здесь Long et al. (2015) полностью сверточная сеть (FCN)². FCN такие же, как CNN, за исключением того, что они имеют ряд сверточных слоев и слоев повышающей дискретизации, чтобы отражать сверточные слои и слои объединения вместо плотно связанных слоев. Это позволяет сети кодировать (понижать разрешение), а затем декодировать (повышать дискретизацию) обратно в исходное разрешение и пространственные размеры изображения, что позволяет классифицировать по пикселям. Если мы отредактируем типичный слой CNN ранее, мы можем получить конфигурацию, которая выглядит так, как показано ниже.

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

Семантическая сегментация определяет, какие пиксели изображения принадлежат к какому классу, как показано ниже. Для этих задач важна попиксельная классификация и локализация объектов и краев в изображении, и поэтому они являются хорошим применением FCN.

2. Набор данных

Задача классификации земного покрова DeepGlobe и, следовательно, набор данных регулируются Правилами DeepGlobe, Лицензионным соглашением DigitalGlobe для внутреннего использования и Лицензионным соглашением по аннотациям.

Используемый набор данных был получен из DeepGlobe Land Cover Classification Challenge⁶.

@InProceedings{DeepGlobe18,
   author = {Demir, Ilke and Koperski, Krzysztof and Lindenbaum, David and Pang, Guan and Huang, Jing and Basu, Saikat and Hughes, Forest and Tuia, Devis and Raskar, Ramesh},
  title = {DeepGlobe 2018: A Challenge to Parse the Earth Through Satellite Images},
  booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR) Workshops},
  month = {June},
  year = {2018}
}

Обучающие данные. Набор данных состоит из 803 спутниковых изображений в формате RGB размером 2448 x 2448, один набор состоит из спутниковых изображений, а другой — из помеченных маски. Каждое спутниковое изображение имеет разрешение 50 см в пикселях , полученное спутником DigitalGlobe. Разрешение 50 см в пикселях является довольно высоким для типичных общедоступных стандартов разрешения спутниковых изображений, которые обычно находятся в диапазоне разрешения от 5 до 10 м пикселей.

Тестовые данные. Набор данных также содержал 171 проверочноеи 172 тестовых изображения, оба без помеченных масок. В итоге я объединил эти две группы в тестовый набор данных и случайным образом выбрал подмножество обучающих данных для проверки.

Вот несколько примеров обучающих изображений:

Каждое спутниковое изображение может иметь до 7 различных классов сегментации, где каждый класс обозначается разным цветом в метках Ground Truth Mask. В приведенной ниже таблице показаны семь различных классов, значения их каналов RGB и связанные с ними цвета в метках маски заземления.

3. Архитектуры нейронных сетей

После некоторых исследований и испытаний я остановился на реализации двух разных сетевых архитектур для своего набора задач.

Ю-Нет

Первая сетевая архитектура — Ronneberger et al. (2015) U-Net⁴. Первоначально сеть U-Net была разработана для сегментации биомедицинских изображений, но с тех пор широко используется сообществом машинного обучения для сегментации многих типов изображений. Архитектура показана ниже, где сверточный и максимальный объединяющие слои выполняют операцию кодирования над изображением, а сверточный слой и повышающий уровень дискретизации выполняют соответствующую операцию декодера в выходной карте сегментации с полным разрешением. Он также реализует соединения с длинным пропуском (серые стрелки), которые объединяют карты объектов из слоев соответствующего размера в слоях кодировщика и декодера, чтобы помочь с локализацией объектов и краев в изображении.

U-Net с магистралью кодировщика ResNet50

Во второй архитектуре используется трансферное обучение архитектуры ResNet50, обученной на ImageNet, для замены кодирующей части U-Net. Пример того, как может выглядеть такая архитектура, показан ниже. Теоретически такая архитектура может иметь хорошую производительность, поскольку она уже обучена высокоуровневым функциям изображений из ImageNet и может сократить объем необходимого обучения по сравнению с совершенно новой необученной архитектурой.

4. Код

Я просто расскажу о некоторых ключевых шагах и рассуждениях в моем процессе написания кода, но код всего проекта и то, как его настроить, можно найти в моем GitHub Repo. Я решил использовать Google Colab, чтобы использовать их графические процессоры для обучения. Я разработал нейронные сети в Keras и TensorFlow 2.0, вдохновившись реализациями Zizhaozhang’s U-Net⁸ и Nikhilroxtomar’s ResNet_U-Net⁹.

Предварительная обработка

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

Поскольку каждое изображение имело размер 2448x2448x3, а соответствующие маски были 2448x2448x7 (каждый канал на класс), каждая обучающая выборка была довольно большой, поэтому вместо этого мне пришлось разрезать их на более мелкие участки размером 612x612.

Нам также понадобился пользовательский генератор данных для получения изображений или пакетов изображений во время обучения, вместо того, чтобы сразу загружать весь набор обучающих данных в ОЗУ.

Обучение

Во время обучения нашими функциями метрики и потерь являются Dice Coefficient и Dice Coefficient Loss соответственно.

В приведенном ниже коде я показываю, как создается и обучается U-Net. См. репозиторий GitHub для второй реализации модели обучения ResNet50_U-Net.

5. Результаты

После обучения ResNet50_U-Net имел коэффициент кости проверки 0,803, а U-Net имел коэффициент кости 0,784.

Вот некоторые из результатов проверки, показывающие исходное спутниковое изображение, маску наземной истины, спрогнозированную маску из архитектуры RestNet50_U-Net и спрогнозированную маску из архитектуры U-Net. Меньшие квадраты под начальным первым уровнем показывают активацию каждого из 7 классов для архитектуры RestNet50_U-Net.

Вот пара примеров архитектуры U-Net.

6. Заключительные мысли

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

Одной из областей улучшения этого проекта будет попытка использовать архитектуру, специально разработанную и предварительно обученную задачам семантической сегментации для трансферного обучения, вместо использования ResNet50, который обычно используется для классификации изображений с несколькими классами. Кроме того, варианты DeepLab, представленные Chen et al. в Переосмысление Atrous Convolution для семантической сегментации изображений⁷ обнаружили, что они очень хорошо справляются с задачами сегментации изображений. Возможно, стоит попробовать архитектуру DeepLabv3.

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

  • Картографирование лесов и деревьев для мониторинга вырубки лесов
  • Мониторинг ледяной шапки
  • Умный город/городское планирование
  • Мониторинг находящихся под угрозой исчезновения диких животных

об авторе

Джош Тинг, инженер по машинному обучению в области климата и устойчивого развития.

Если вам понравилась статья, пожалуйста, подпишитесь на меня, чтобы получать больше интересного контента!

Также проверьте:

Рекомендации

  1. Практическое машинное обучение с помощью Scikit-Learn, Keras и TensorFlow (2-е издание)
  2. Лонг и др. (2015) «Полностью сверточная сеть (FCN)
  3. Джереми Джордан о семантической сегментации
  4. Роннебергер и др. (2015) Ю-Нет
  5. Невен, Робби и Гудеме, Тун. (2021). Многоветвевая сеть U-Net для сегментации типа дефекта поверхности стали и серьезности. Металлы. 11.870.10.3390/мет11060870.
  6. Конкурс наборов данных по классификации земного покрова DeepGlobe
  7. Чен и др. в Переосмысление Atrous Convolution для семантической сегментации изображений
  8. U-Net Цзычжаожан
  9. ResNet_U-Net Нихилрокстомара