Краткое описание DATASET:

В этом посте я покажу вам, как получить почти современные характеристики на спутниковых изображениях Sentinel-2 (цветовое пространство RGB), предоставленных в рамках программы наблюдения Земли Copernicus. Этот пост является небольшой частью моего проекта (Отображение инфраструктуры и мониторинг урбанизации в европейских странах с использованием глубокого обучения), который я выполнял в Немецком исследовательском центре искусственного интеллекта. Набор данных находится в свободном доступе и может быть загружен с сайта «http://madm.dfki.de/downloads Фак (изображения цветового пространства RGB).

Какая стратегия сработала

Тонкая настройка / передача обучения архитектуре ResNet-50, уже обученной на наборе данных imagenet, действительно хорошо справилась с этой задачей.

Что такое точная настройка / передача обучения сети?

Тонкая настройка - это процесс, при котором мы настраиваем существующие сети (также известные как Transfer Learning), такие как vgg-16, resnet-50, googleNet и т. Д., Которые уже обучены на более крупном наборе данных, таком как ImageNet (1,2 млн изображений с метками), продолжая обучение. это (то есть обратное распространение) на меньшем наборе данных, который у нас есть. Учитывая это, наш набор данных не должен сильно отличаться по контексту от исходного набора данных (например, ImageNet), предварительно обученная модель уже будет изучать функции, которые имеют отношение к нашей собственной проблеме классификации.

Зачем настраивать сеть?

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

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

Как работает тонкая настройка / передача обучения сети?

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

Тонкая настройка в Керасе

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

Загрузите необходимые библиотеки

Загрузите предварительно обученную модель Resnet-50

Мы загрузим модель ResNet-50 без верхнего уровня (который в основном представляет собой полностью связанный уровень).

resnet_model = resnet50.ResNet50 (weights = ’imagenet’, include_top = False, input_shape = (64, 64, 3))

Визуализация состояния некоторых слоев в архитектуре ResNet-50

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

Создать новую модель

Теперь, когда у нас есть все обучаемые параметры нашей базовой сети, мы хотели бы добавить классификатор поверх сверточной базы. Мы просто добавим полностью связанный слой, а затем слой softmax с 10 выходами. Это делается, как указано ниже. Посмотрите на огромное количество обучаемых параметров, если бы нам пришлось обучать все эти параметры с нуля, подумайте, сколько вычислительных ресурсов и времени потребуется, чтобы достичь хороших результатов. Поэтому спасибо технике Fine-Tuning за спасение нас!

Настройка генераторов данных

Я уже разделил данные на train и test и сохранил их в папках «train» и «test». Мы можем использовать ImageDataGenerator, доступный в Keras, для пакетного чтения изображений прямо из этих папок и, при необходимости, для увеличения данных. Мы будем использовать два разных генератора данных для папок поездов и тестов.

Давайте определим характеристики набора данных и визуализируем некоторые изображения в наборе данных

Обучение классификатора CNN на спутниковых снимках EuroSAT

На данный момент мы создали модель и настроили данные для обучения. Итак, приступим к обучению и проверим производительность. Нам нужно будет указать оптимизатор и скорость обучения и начать обучение с помощью функции model.fit (). По окончании обучения сохраним модель. В дополнение к этому мы будем использовать функцию ModelCheckpoint, которая сохраняет веса в файле «.h5» всякий раз, когда точность проверки увеличивается во время обучения.

Теперь давайте построим кривые потерь и точности

Загрузите в модель веса с максимальной точностью проверки

Чтобы получить прогнозы на тестовом наборе, мы загрузим модель с оптимальными весами, чтобы получить лучшие результаты классификации.

Матрица неточностей настроенной CNN ResNet-50 на предлагаемом наборе данных спутниковых снимков EuroSAT

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

Отчет о классификации:

Ссылка на полный код

Вы можете просмотреть полный код по этой ссылке Github: GitHub. Я буду рад ответить на любые вопросы, связанные с указанной выше статьей. Следуйте за мной на Medium, где я буду публиковать больше материалов, связанных с машинным обучением, глубоким обучением и искусственным интеллектом. В следующем посте я расскажу вам, как получить современные результаты по классификации спутниковых изображений 13 Band EuroSAT с помощью Keras.

Благодарности

Я хотел бы поблагодарить лабораторию глубокого обучения MindGarage за то, что позволили мне использовать их Cool GPU, и Саураба Варшнею за просмотр этого блога.

Ссылки

Https://arxiv.org/abs/1709.00029