Непрерывный конвейер для глубокого изучения спутниковых изображений
Застряли за платным доступом? Нажмите здесь, чтобы прочитать всю историю с помощью моего Friend Link!
Обнаружение судов по изображениям дистанционного зондирования является важным приложением для обеспечения безопасности на море, которое включает, среди прочего, наблюдение за движением, защиту от незаконного рыболовства, контроль сбросов нефти и мониторинг загрязнения моря. Обычно это делается с помощью автоматизированной системы идентификации (AIS), которая использует радиочастоты УКВ для беспроводной передачи местоположения, пункта назначения и опознавания судов ближайшим приемным устройствам на других судах и наземных системах.
AIS очень эффективны при наблюдении за судами, которые по закону обязаны установить ретранслятор УКВ, но не могут обнаружить те, которые не установлены, и те, которые отключают их транспондер. Итак, как вы обнаруживаете эти отказывающиеся от сотрудничества корабли? Здесь могут помочь спутниковые снимки. В изображениях, полученных с помощью радаров с синтезированной апертурой (SAR), используются радиоволны для изображения поверхности Земли. В отличие от оптических изображений, длины волн, которые используются приборами, не зависят от времени суток или метеорологических условий, что позволяет получать изображения днем или ночью, при облачном или ясном небе. Спутники собирают эти изображения, которые можно использовать для создания алгоритмов обнаружения и сегментации судов.
Этот проект является частью Airbus Ship Detection Challenge, проводимого на Kaggle.
Соревнование
Создайте алгоритм для автоматического определения того, является ли дистанционно обнаруженная цель кораблем или нет. Алгоритм должен был быть предельно точным, потому что на карту поставлены жизни и миллиарды долларов в энергетической инфраструктуре.
Окружающая среда и инструменты
- scikit-learn
- scikit-изображение
- тупой
- панды
- matplotlib
Данные
Набор данных можно скачать с веб-сайта kaggle, который находится здесь.
Основы
Это типичная проблема сегментации экземпляра. В этом проекте я использовал Mask-R-CNN.
- Классификация изображения: классифицируйте основную категорию объекта в изображении.
- Обнаружение объекта: определите категорию объекта и определите положение, используя ограничивающую рамку для каждого известного объекта на изображении.
- Семантическая сегментация. Определите категорию объекта каждого пикселя для каждого известного объекта в изображении. Ярлыки учитывают классы.
- Сегментация экземпляров: идентифицируйте каждый экземпляр объекта каждого пикселя для каждого известного объекта в изображении. Ярлыки зависят от экземпляра.
Где код?
Без лишних слов, давайте начнем с кода. Полный проект на github можно найти здесь.
Я начал с загрузки всех необходимых библиотек и зависимостей.
Затем я настраиваю рабочий каталог и файлы.
Я продолжил определение функций для показа некоторых образцов изображений с маской корабля и закодированной и декодированной маской. Здесь маски используются как наземные изображения.
Затем я разделил изображения на два набора: обучающий и проверочный.
После этого я загрузил модель Mask-R-CNN из своего разветвленного репозитория. Исходный репозиторий можно найти здесь.
Затем я создал класс с тремя функциями для загрузки набора данных, загрузки масок и использования изображений в качестве ссылки.
Еще я создал еще один класс для аналогичной работы с включенным графическим процессором. Из-за огромного размера набора данных в этом случае необходимо работать с графическим процессором. В качестве дополнительной информации, ядра google colab и kaggle в настоящее время являются бесплатными облачными поставщиками графических процессоров.
Я продолжил писать сценарии для загрузки набора обучающих данных.
Давайте представим себе, что у нас есть до сих пор.
Все идет нормально. Я продолжил загрузку предварительно натренированных весов кокоса из моего разветвленного репозитория на github.
Затем я обучил модель. Я тренировался всего две эпохи для более быстрых результатов. Для правильной конвергенции и хороших результатов потребуется гораздо больше. Не стесняйтесь поиграть с гиперпараметрами здесь.
Полученные результаты
В некоторых случаях модель терпела неудачу, когда она обнаруживала небольшой остров или прибрежные скалы в качестве корабля. Другими словами, модель генерирует ложные срабатывания.
В других случаях модель не могла обнаружить корабль, как показано на изображении ниже. Другими словами, модель порождает ложноотрицательные результаты.
Выводы
Хотя этот проект далек от завершения, но примечательно видеть успех глубокого обучения в таких разнообразных реальных проблемах. Если мы сможем обнаруживать и сегментировать корабли на изображении, это будет большим подспорьем для логистической и транспортной команды в северных странах, таких как Швеция, Норвегия и Канада. Это может открыть совершенно новое измерение для контейнеровозов и судов, отслеживая суда по спутниковым изображениям в режиме реального времени.
Ссылки / Дополнительная литература
Прежде чем ты уйдешь
Соответствующий исходный код можно найти здесь.
Приятного чтения, удачного обучения и удачного кодирования.
Контакты
Если вы хотите быть в курсе моих последних статей и проектов, подписывайтесь на меня на Medium. Вот некоторые из моих контактных данных:
- "Персональный сайт"
- Средний профиль
- GitHub
- Kaggle