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

1. Концепции

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

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

Сверточный декодер принимает выходной сигнал с низким разрешением сверточного кодировщика и повышает его дискретизацию. Последним шагом этого декодера является создание массива, в котором хранится пиксельная маркировка изображения. Как происходит повышающая дискретизация? Интуитивно мы могли бы сделать обратное объединению (unpooling), которое состоит в том, чтобы взять значение одного пикселя и распределить его значение по более высокому разрешению. Что, если бы архитектура могла научиться лучше всего повышать дискретизацию пикселей? Здесь на сцену выходят транспонированные свертки.

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

2. Архитектура

2.1. Полностью сверточная сеть

В 2015, Лонг и др. представляет первый метод обучения полностью сверточной сети путем адаптации сетей классификации (AlexNet, GoogleNet и VGG) и их точной настройки для задачи сегментации.

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

Выше мы можем наблюдать архитектуру FCN. Мы видим, что кодировщик сжимает изображение до изображения с более низким разрешением. Сетки, представляющие слои объединения, также показывают относительную пространственную грубость. После 5-го уровня объединения разрешение уменьшилось в 32 раза, что привело к грубой сегментации после операции повышения дискретизации. В статье обсуждается баланс между поиском того, что и было. Чтобы понять, что присутствует на изображении, необходима общая (грубая) информация, тогда как для точного определения того, где она присутствует, необходима локальная (точная) информация. Таким образом, пропускать соединения (в отличие от реснетов) и медленная повышающая дискретизация в сочетании.

2.2. U-Net

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

Как видно на рисунке выше, первая часть существует из обычного набора сверточных операций, операций ReLU и максимального объединения. Операция объединения 2x2 max с шагом 2 приведет к шагу понижающей дискретизации, при котором количество функциональных каналов удваивается, а размер уменьшается вдвое. Вторая часть состоит из последовательности повышения дискретизации карты признаков, объединения соответствующей обрезанной карты признаков, что необходимо из-за потери граничных пикселей после каждой свертки, свертки и применения ReLU.

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

2.3. FC-DenseNet

FC DenseNet или 100 Layers Tiramisu - это метод сегментации, построенный на архитектуре DenseNet для классификации изображений. DenseNet основан на парадигме, в которой быстрые соединения от ранних уровней выполняются к более поздним уровням. Особенность DenseNet заключается в том, что все слои связаны друг с другом.

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

Ниже мы находим обзор архитектуры. Каждый слой создает k выходных карт функций, которые совпадают с вышеупомянутой скоростью роста. Затем он подается в бутылочное горлышко следующего слоя Dense Block, чтобы уменьшить количество входных карт функций и, таким образом, повысить вычислительную эффективность соответствующих блоков Composite. Перед передачей на следующий слой карты объектов сжимаются путем прохождения переходного слоя.

Ниже мы можем наблюдать, как DenseNet затем использовался для создания FC-DenseNet для сегментации изображений. Мы можем различить аналогичную структуру кодировщика-декодера, найденную в предыдущих FCN и U-Net.

Для сегментации плотные блоки содержат только последовательность составных блоков, для которых применяется коэффициент исключения 0,2. Следует проявлять осторожность, чтобы не допустить взрывного роста карт объектов. Таким образом, каждый слой объединяет только предыдущее объединение. Последний слой выполняет конкатенацию выходных данных всех слоев и, таким образом, содержит 4 * k карт функций. Переход вверх / вниз свертка, который происходит после плотного блока, применяется только к картам характеристик, полученным самым последним плотным блоком, и из-за того, что линейный рост количества функций будет слишком требовательным к памяти.

Из-за уровней объединения некоторая информация из более ранних плотных блоков теряется. Следовательно, пропускаемые соединения, которые помогают нам повторно использовать карты функций, где путь повышающей дискретизации может восстановить некоторую пространственно подробную информацию из пути понижающей дискретизации.

2.4. DeepLab

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

2.4.1. DeepLab v1

DeepLab v1 вводит 2 основные идеи: Свертка Atrous и Полностью связное условное случайное поле (FC CRF). Ниже мы находим архитектуру:

Atrous извилин происходит от французского «à trous», означающего «дыра». Атрозная извилина также называется расширенной извилиной. Ниже мы видим, что расширенная свертка - это стандартная свертка, при которой вы равномерно пропускаете несколько пикселей в обоих измерениях. Чтобы быть более точным, ниже мы наблюдаем разбавленную свертку со скоростью 2, поскольку она отбирает каждые 2 пикселя от входа для перехода к сверточному ядру.

Мы видим, что рецептивное поле расширенной свертки больше по сравнению со стандартным эквивалентом. Вы можете спросить, почему это актуально?

Во всех ранее обсуждавшихся архитектурах использовалась многомасштабная CNN, основанная на пространственном объединении для создания структуры типа кодер-декодер. Это было сделано, чтобы объединить и сбалансировать:

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

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

После создания и масштабирования карт функций применяется FC CRF. CRF - это метод статистического обучения, в котором учитывается контекст. Этот контекст можно понимать как зависимости между прогнозами. В обработке естественного языка CRF - это последовательная зависимость предсказания, тогда как в компьютерном зрении близлежащие пиксели определяются как зависимости. Как следует из названия, FC CRF использует все пиксели для создания модели с большим радиусом действия, которую можно использовать для сглаживания зашумленных карт сегментации. Основная проблема здесь - вычислительный взрыв из-за полностью связного характера модели. В 2012 году в статье был представлен высокоэффективный алгоритм вывода для моделей FC CRF. Эта модель в конечном итоге использовалась в DeepLab v1 и DeepLab v2, в результате чего обе архитектуры не могут использоваться в качестве среды сквозного обучения.

2.4.2. DeepLab v2

В то время как DeepLab v1 использует VGGNet в качестве магистрали, DeepLab v2 использует ResNet, а также представляет Atrous Spatial Pyramid Pooling (ASPP). Это основные различия между обеими архитектурами. Таким образом, давайте рассмотрим ASPP, отходящий от DeepLab v1 в качестве основы.

Как следует из названия, это всего лишь ужасная версия SPP. В 2014 был введен пул пространственных пирамид, устраняющий озабоченность по поводу того, что входные изображения фиксированного размера требовались в CNN из-за того, что полностью связанные слои изначально имеют входной фиксированный размер. Следовательно, это ограничение на размер накладывается при переходе от сверточных слоев к FCN. SPP - это новый слой между сверточными слоями и FCN для сопоставления входных размеров с выходными данными фиксированного размера. Ниже можно увидеть иллюстрацию SPP. Взяв карты характеристик последнего слоя и разделив их на ряд пространственных интервалов, пропорциональных размеру изображения. Это означает, что количество ячеек фиксировано независимо от размера изображения. Как мы видим, ячейки создаются на разных уровнях детализации, а последний слой состоит из всего изображения. Наконец, каждая пространственная ячейка для каждого фильтра объединяется с использованием максимального объединения. Поскольку количество бинов известно, мы можем объединить различные выходы, чтобы получить представление фиксированной длины для F * B, где F - номер фильтра, а B - количество бинов, размерный вектор, который затем передается в FCN.

Atrous SPP похож на SPP, но вместо использования бинов он будет использовать несколько фильтров параллельно с разными частотами дискретизации. Затем извлеченные элементы объединяются для получения окончательного результата.

ASPP учитывает тот факт, что объекты одного класса могут иметь разный масштаб на изображении, что приводит к повышению точности.

2.4.3. DeepLab v3

В Переосмыслении Atrous Convolution для семантической сегментации изображений основные концепции DeepLab v2 были пересмотрены и улучшены, что привело к созданию новой архитектуры, которая значительно превосходит предыдущие. Основные улучшения, которые мы обсудим:

  • Атрозная свертка каскадом или параллельно для захвата многомасштабного контекста за счет принятия нескольких жестких скоростей
  • Улучшения на ASPP

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

Во-вторых, ASPP был пересмотрен путем введения 4 параллельных сверток с разными скоростями, примененными поверх карты функций для сбора многомасштабной информации. Однако было обнаружено, что «по мере увеличения частоты дискретизации количество допустимых весов фильтра становится меньше». Чтобы противостоять этому, к последней карте функций применяется глобальный средний пул. Затем результат передается на свертку 1x1, пакетно нормализуется и, наконец, билинейно повышается дискретизация до требуемых размеров.

2.4.4. DeepLab v3 +

Ниже мы видим, что кодировщик уже предоставлен DeepLab v3. Благодаря расширению DeepLabv3 с помощью модуля декодера v3 + рождается.

DeepLab v3 + также модифицирует грубую свертку на основе разделимой по глубине свертки. Нормальную свертку можно разделить на глубокую свертку и точечную свертку. Используя глубинную свертку, можно резко сократить объем необходимых вычислений. Было показано, что применение тех же оснований для факторизации множества глубинных сверток также снижает вычислительную сложность.

Ниже мы можем наблюдать архитектуру DeepLab v3 +. Из этой иллюстрации ясно видно, что DeepLab v3 действительно представляет собой кодировщик.

Функции кодера сначала билинейно повышают дискретизацию с коэффициентом 4, а затем объединяются с соответствующими низкоуровневыми функциями из магистральной сети. Эти низкоуровневые функции сначала проходят через свертку 1x1, чтобы уменьшить количество каналов, которые могут исказить важность более богатых функций кодера. После этого выполняется еще один набор сверток перед повторной повышающей дискретизацией в 4 раза. Эти последние свертки 3x3 помогают уточнить характеристики перед масштабированием изображения.

В качестве основы были исследованы как ResNet-101, так и Xception, и было показано, что SOTA была достигнута с использованием архитектуры DeepLab v3 + Xception на наборе данных PASCAL VOC 2012.

2.5. Быстрый FCN

В 2019 принцип расширенной свертки был заменен на Joint Pyramid Upsampling (JPU). Авторы обсуждают большую вычислительную сложность и объем памяти, связанные с расширенными свертками, с целью решить эти проблемы с помощью JPU.

Различия между магистралью Fast FCN и DilatedFCN заключаются в двух последних этапах свертки. Обычно входная карта объектов сначала обрабатывается обычным сверточным слоем, а затем - серией расширенных сверток. Fast FCN концептуально обрабатывает входную карту признаков с помощью последовательной свертки, а затем использует несколько регулярных сверток для генерации вывода. Это облегчает вычислительную нагрузку по сравнению с DilatedFCN. Концептуально, потому что это основная суть идеи, но было обнаружено, что во время градиентного спуска требовалось большое время схождения. Таким образом, JPU был создан для приближения этого процесса оптимизации.

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

2.6. Закрытый-SCNN

Летом 2019 года были представлены CNN с закрытой формой для семантической сегментации. GSCNN представляет новую архитектуру CNN с двумя потоками: классический поток, как обсуждалось в предыдущих архитектурах, и поток формы. Обоснование состоит в том, что вышеупомянутому архитектурному дизайну присуща неэффективность, поскольку информация о цвете, форме и текстуре обрабатывается вместе внутри одной глубокой CNN, хотя они, вероятно, содержат очень разные объемы и типы информации.

Хотя задача семантической сегментации и семантической границы тесно связаны, поток формы не использует функции из обычного потока. Вместо этого Gated Convolutional Layers (GCL) помогает потоку формы обрабатывать только релевантную информацию, отфильтровывая остальную. Обычный поток формирует высокоуровневое понимание сцены, используя GCL, мы можем гарантировать, что поток формы фокусируется только на соответствующей информации, а затем передается на следующий уровень в потоке формы для дальнейшей обработки. Интуитивно поток формы можно рассматривать как последовательность процессов, которые генерируют карту внимания, где области с важной информацией о границах становятся все более тяжелыми с точки зрения веса. Наконец, в потоке формы, поскольку может быть получена достоверность краев из масок семантической сегментации регулярного потока, контролируемые двоичные потери кросс-энтропии могут использоваться на выходных границах для наблюдения за потоком формы.

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

Вывод

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

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