Наблюдение и отслеживание судов с помощью 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 раза.
Контекст, мотивация и возможности.
С увеличением количества спутников на орбите, ежедневные снимки большей части мира теперь широко доступны. Источники данных включают как бесплатные (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!