Наблюдение и отслеживание судов с помощью TensorFlow 2.0 - часть 1: базовое решение

Вопрос не в том, «если», а в том, «как» использовать статистику на основе изображений

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

Для компаний, привыкших к использованию структурированных данных, это означает:

  • Посвящение нескольких специалистов по обработке данных для развития навыков обработки изображений собственными силами, или
  • Потребление уже обработанных фидов, например Vortexa и его SDK или его наборов данных для обмена данными AWS в случае судовой аналитики.

Целевая аудитория этого сообщения:

  • Специалист по данным, которому поручено развивать навыки обработки изображений, будет заинтересован в простой реализации Части 1, а также в процессе мышления при работе с часто невысказанной архитектурой и вариантами оптимизации, сделанными в Частях 2 и 3.
  • Читатель, заинтересованный в использовании уже обработанных каналов, может захотеть взглянуть на изображения и их подписи в обоих сообщениях и почувствовать, что связано с обнаружением объектов и их интерпретируемостью.

Это первая часть из 3 сообщений в блоге:

  • Обнаружение корабля - Часть 1: обнаружение корабля, то есть двоичное предсказание того, есть ли хотя бы 1 корабль или нет. Часть 1 - простое решение, показывающее отличные результаты в нескольких строках кода.
  • Обнаружение кораблей и ранняя локализация - Часть 2: в направлении сегментации объектов с (а) обучением полностью сверточной NN посредством передачи обучения для создания кодировщика для U-Net, и (b) первые появляющиеся свойства локализации с интерпретируемостью внимания CAM
  • Локализация кораблей - Часть 3: определите, где находятся корабли на изображении, создав U-Net из кодировщика, разработанного в Части 2.

Что вы узнаете из этого сообщения (Обнаружение корабля - часть 1):

  • Контекст: контекст и возможности спутниковой съемки
  • Предварительная обработка на лету генераторов с помощью Tensorflow
  • Методика выбора скорости обучения
  • Простая реализация ConvDenseNet (стиль LeCun) с точностью 95% при просмотре набора данных только 2,5 раза.

Код доступен на github

Контекст, мотивация и возможности.

С увеличением количества спутников на орбите, ежедневные снимки большей части мира теперь широко доступны. Источники данных включают как бесплатные (USGS, Landviewer, ESA's Copernicus и т. Д.), Так и коммерческие (Planet, Orbital Insight, Descartes labs, URSA и т. Д.). Конкуренция жесткая и, кажется, приводит к очень быстрым инновациям: такие компании, как Capella Space, теперь предоставляют ежечасные обновления, запуская группировки небольших спутников всего в несколько килограммов. Эти спутники все чаще выходят за пределы оптического видимого спектра, в частности радар с синтезированной апертурой (SAR), который позволяет работать независимо от облаков или дневного света. Наряду с ростом количества других источников изображений, способность интерпретировать данные изображений является ключом к неиспользованным коммерческим возможностям.

Мониторинг человеческой деятельности усиливается в целях рыболовства, бурения, разведки, грузовых и пассажирских перевозок, туризма, как для государственных, так и для коммерческих целей, особенно на море. В частности, для отслеживания судов спутниковые изображения представляют собой богатое дополнение к базовым системам совместного слежения, таким как AIS, LRIT и VMS.

Кормление зверя: предварительная обработка

  • Обозначьте каждое изображение как корабль / нет.
  • Мини-пакет данных в 40 фрагментов изображений. Использование пакетов ›1 усиливает векторизацию и ускоряет вычисления по сравнению со стохастическим градиентным спуском (т.е. размер пакета = 1). Использование меньших пакетов (~ 20–500), чем весь набор данных (здесь 200 000 изображений), сначала позволяет данным уместиться в памяти, а дополнительный шум имеет тенденцию предотвращать преждевременную сходимость на локальных минимумах.
  • Уменьшите размер изображения с 768 x 768 x 3, например, до 256 x 256 x 3, чтобы ускорить обучение и уменьшить переобучение. Используя современную сеть ConvNet (полностью сверточную или с GAP / GMP), рекомендуется начинать обучение с небольших изображений и позже настраивать более крупные изображения.
  • Увеличение данных: сначала переверните по горизонтали и вертикали. Дополнительные искажения могут быть добавлены позже, когда модель начнет переобучаться, чтобы добиться дополнительных характеристик.
  • Перенормируйте величину с [0, 255] на [0, 1].

Вот как мы проводим эту предварительную обработку "на лету" с помощью класса Keras ImageDataGenerator, с маркировкой, выполненной с помощью flow_from_dataframe, и все это потом подается в fit / fit_generator API. :

1-я архитектура - простая сеть ConvDense

Начнем с простого и повторяющегося:

  • Изображения представлены в виде четырехмерных тензоров: размер пакета, высота, ширина и каналы (RGB на входе, слои объектов глубже в сети)
  • 3 блока сверточного + максимального объединения для извлечения функций из изображения (с скользящими окнами 3x3). По мере того, как мы углубляемся в сеть и работаем с все более абстрактными функциями, размер изображения уменьшается (256 - ›128 -› 64 - ›32), а количество каналов увеличивается (3 -› 16 - ›32 -› 64)
  • 1 слой исключения для регуляризации (т. Е. Предотвращения чрезмерной подгонки)
  • 2 плотных слоя, чтобы разобраться во всех этих извлеченных объектах, и объединить их присутствие или отсутствие, чтобы решить, есть ли на изображении корабль или нет.

Для оптимизации этой модели нам потребуются:

  • потеря: sparse_categorical_crossentropy при использовании softmax в качестве последней активации или поскольку есть только две категории binary_crossentropy с сигмоидом в качестве последняя активация (также может работать с raw logit, с изюминкой, см. Часть 2)
  • оптимизатор: один из вариантов - использовать Адама и настроить (изображение ниже) или цикл скорости обучения (чтобы выйти из локальных минимумов, подробнее об этом в Части 2). Для этого первого прогона я выбрал скорость обучения 3E-4. Другие параметры, управляющие экспоненциально взвешенными усредненными моментами градиента, используют значения по умолчанию (первый порядок называется импульсом и параметром бета1, второй порядок называется среднеквадратичной опорой и параметром бета2).

Вот реализация Tensorflow 2.0:

Вот базовый код Tensorflow / Keras для обучения модели с используемыми параметрами.

Показав эту простую нейронную сеть на нашем обучающем наборе примерно в 2,5 раза, мы достигли точности перекрестной проверки 94,8%. Наивный подход с учетом классового дисбаланса составил бы 77,5%.

Обратите внимание, что модель все еще обучается, и мы еще не наблюдаем признаков переобучения. Это сделано намеренно из-за относительно небольшого размера модели по сравнению с размером набора данных (увеличение 200k + 600k) и уровнем исключения.

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

Улучшение этой модели

Проверенное улучшение этой модели - добавление пакетной нормализации между весами и активацией: это позволяет модели достичь точности 93% всего за 10 псевдоэпох по сравнению с 25 псевдоэпохами без. Плато кажется таким же, близким к 95% (всего тренировалось 40 псевдоэпох).

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

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

  • Уровни глобального усреднения / максимального объединения (GAP / GMP) в конце, непосредственно перед одним или несколькими плотными слоями, для глобального агрегирования по пространственным измерениям (размер пакета, высота, ширина, каналы) - › (размер пакета, 1, 1, каналы), независимо от размера изображения.
  • Полностью сверточная сеть (FCN), использующая аналогичную идею, но обобщающая ее с помощью изученной пространственной операции с помощью фильтра глубины 1x1.

Во второй части этого поста мы исследуем прежнюю архитектуру, а также более глубокую сеть. Щелкните здесь, чтобы прочитать часть 2!