Снимки с воздуха и спутников дают нам уникальную возможность взглянуть на землю с высоты птичьего полета. Он используется для измерения обезлесения, картирования поврежденных территорий после стихийных бедствий, обнаружение разграбленных археологических памятников и имеет множество других текущих и неиспользованных вариантов использования. Поскольку эти изображения имеют высокое разрешение, человеческому глазу трудно обнаружить соответствующую информацию из данных. Именно здесь компьютерное зрение добавляет отличную ценность для понимания.
Пиксельная сегментация изображений - сложная и ответственная задача компьютерного зрения и обработки изображений. Этот блог посвящен сегментации зданий по аэрофотоснимкам (спутниковым / дронам). Доступность данных дистанционного зондирования с высоким разрешением открыла возможности для интересных приложений, таких как более детальная попиксельная классификация отдельных объектов. Благодаря использованию сверточной нейронной сети (CNN) сегментация и классификация изображений стали очень эффективными и интеллектуальными.
Что такое сегментация изображений? Какие типы сегментации изображений доступны?
Сегментация разделяет изображение на отдельные области, содержащие каждый пиксель со схожими атрибутами. Области должны быть тесно связаны с изображенными объектами или интересующими особенностями, чтобы их можно было использовать для анализа и интерпретации изображений. Осмысленная сегментация - это первый шаг от низкоуровневой обработки изображения, преобразования полутонового или цветного изображения в одно или несколько других изображений к высокоуровневому описанию изображения с точки зрения функций, объектов и сцен. Успех анализа изображений зависит от надежности сегментации, но точное разбиение изображения, как правило, является очень сложной задачей.
Для изображений доступны два типа сегментации - 1. Семантическая сегментация 2. Сегментация экземпляра.
Семантическая сегментация - это процесс присвоения метки каждому пикселю изображения. Это резко контрастирует с классификацией изображений, в которой всему изображению присваивается одна метка. Семантическая сегментация рассматривает несколько объектов одного класса как одну сущность. С другой стороны, Сегментация экземпляра обрабатывает несколько объектов одного и того же класса как отдельные отдельные объекты (или экземпляры). Обычно сегментация экземпляра сложнее семантической сегментации.
Набор данных: в этом проекте используются данные из набора данных маркировки аэрофотоснимков Inria (ссылка). Этот набор данных состоит из 180 аэрофотоснимков городских поселений в Европе и США и помечен как здание, а не классы зданий. Каждое изображение в наборе данных является RGB и имеет разрешение 5000 × 5000 пикселей, где каждый пиксель соответствует 30 см × 30 см поверхности Земли. Этот проект завершается в рамках сайта fastennial.ai.
Предварительная обработка данных. Поскольку мы не можем использовать изображения с высоким разрешением непосредственно в нашем коде, мы разрезали изображение на несколько изображений с малым разрешением (256 × 256) с некоторыми перекрывающимися пикселями. Эти нарезанные изображения используются для обучения модели. Итак, из одного исходного изображения мы получили 400 нарезанных изображений. Кроме того, сохраняется информация о местоположении нарезанного изображения. Для предварительной обработки мы использовали библиотеку Pytorch.
Разделение на обучение и проверку: для каждого состояния первые пять изображений были взяты в качестве изображений проверки, как указано в документе (ссылка).
Построение модели: для построения модели мы использовали библиотеку fastai (которая находится поверх PyTorch). Мы использовали архитектуру U-Net с предварительно обученным resnet18 (resnet34 / 50 может дать лучшие результаты. Мы придерживаемся resnet18 из-за вычислительных проблем) в качестве кодировщика. Мы также использовали flip_vertical, max_lighting, max_zoom, max_warp в качестве преобразований вместе с преобразованиями по умолчанию, предоставляемыми fastai.
Предварительно обученная модель обучается другой задаче, чем текущая задача, но обеспечивает удобную отправную точку, поскольку функции, изученные во время обучения на старой задаче, полезны для новой задачи.
Если вы хотите понять архитектуру U-net, здесь - это блог с очень хорошо объясненным содержанием. В нем также подробно рассматриваются основные концепции сегментации изображений.
Мы обучили модель для 15 эпох (fit_one_cycle), и каждая эпоха занимала около 45 минут для всех изображений (поезд: 155 * 400 = 62000 и проверка: 25 * 400 = 10000 изображений).
Модель была обучена с использованием Google Colab GPU.
Метрики:
Функция потерь: комбинация потери двоичной кросс-энтропии и потери игральных костей с долговым обязательством как True.
Потеря двоичной кросс-энтропии: двоичная кросс-энтропия - это функция потерь, используемая для задач, связанных с решениями да / нет (бинарными). Например, в задачах с несколькими метками, когда пример может принадлежать нескольким классам одновременно, модель пытается решить для каждого класса, принадлежит ли пример этому классу или нет.
Где ŷ - прогнозируемое значение.
Двоичная кросс-энтропия измеряет, насколько далеко от истинного значения (которое равно 0 или 1) прогноз для каждого из классов, а затем усредняет эти классовые ошибки, чтобы получить окончательную потерю. Этот показатель используется для измерения производительности в моделях классификации изображений.
Потеря кости: это потеря перекрытия для области сегментации. В нашем случае это строительная доступная часть. Коэффициент при игре в кости аналогичен проигрышу Жаккара (IOU).
Пересечение по объединению - это просто показатель оценки. Любой алгоритм, который предоставляет предсказанные ограничивающие прямоугольники в качестве выходных данных, можно оценить с помощью IoU.
Более формально, чтобы применить Intersection over Union для оценки (произвольного) детектора объектов, нам понадобится следующее (применимо также для сегментации):
- ограничивающие прямоугольники достоверности (т. Е. Помеченные вручную ограничивающие прямоугольники из набора для тестирования, которые указывают где на изображении находится наш объект).
- предсказанные ограничивающие рамки из нашей модели.
Пока у нас есть эти два набора ограничивающих прямоугольников, мы можем применить Intersection к Union.
Подробнее о долговых расписках читайте здесь.
Тестовые изображения. Выполнены те же шаги предварительной обработки, что и обучающие изображения, и наши прогнозы представляют собой результат нарезанных тестовых изображений (256 × 256). После предсказания маски для нарезанных тестовых изображений мы сшили предсказанную маску обратно в изображение исходного размера (5K × 5K). Здесь нам пригодится информация, которую мы сохранили на этапе предварительной обработки.
Результат таблицы лидеров: после отправки результатов на веб-сайт Inria мы получили точность 96% и долговую расписку 70%.
P.S: Я не могу поделиться кодом этого проекта (сделанного в рамках сообщества сообщества).
Я рад продолжить обсуждение любых разъяснений. Приветствуются любые предложения по улучшению подхода к блогу / проекту.
Соавторы проекта: Джханси Анумула, Паллави Аллада и Зохеб Абай