ПОСМОТРЕТЬ СЕГМЕНТАЦИЮ ИЗОБРАЖЕНИЯ С ПОМОЩЬЮ CNNS

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

С развитием методов глубокого обучения сегментация изображений значительно улучшилась за последние несколько лет; с точки зрения как точности, так и скорости. Теперь мы можем генерировать сегменты изображения за доли секунды и при этом оставаться очень точными и точными.

ЦЕЛЬ НАСТОЯЩЕГО ПОСТА

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

Давайте начнем!

СЕМАНТИЧЕСКАЯ СЕГМЕНТАЦИЯ

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

ПОЛНОСТЬЮ КОНВОЛЮЦИОННЫЕ СЕТИ (FCNS) [1]

Архитектура FCN

Чтобы создать FCN, просто замените все полносвязные слои CNN (например, VGG и т. Д.) На свертки 1 × 1. Количество фильтров этого сверточного слоя будет равно количеству нейронов (выходов) полносвязного слоя. Это сделано потому, что для сегментации пространственное расположение каждого пикселя важно и усложняется. слои, естественно, могут справиться с этим, тогда как полносвязные слои терпят неудачу. В результате местоположения в более высоких слоях соответствуют местоположениям на изображении, к которым они связаны, то есть их рецептивным полям.

Архитектура FCN очень проста и состоит из кодировщика CNN (в статье используется VGG) со всеми полносвязными слоями, соответствующим образом преобразованными, как описано ранее. К этому добавляется дополнительный сверточный слой, состоящий из N + 1, 1 × 1 фильтров, где N - количество классов, а дополнительный - для фона. Это завершает сеть кодировщиков FCN. Как видно, количество каналов в выходной карте характеристик кодера равно N + 1.
За кодером следует сеть декодера. Он состоит только из одного обратного сверточного слоя (иногда также называемого транспонированной сверткой или деконволюцией). Выходные данные имеют те же пространственные размеры, что и входное изображение, и имеют N + 1 каналов. Каждый канал предсказывает маску сегментации только для одного класса. Обратная свертка - это свертка с дробным входным шагом 1 / f, где f - коэффициент повышающей дискретизации. Реализация - это просто реверсирование прямого и обратного проходов нормальной свертки.

Шаговая обратная свертка. Синяя карта вводится, а голубая карта выводится. Источник: https://github.com/vdumoulin/conv_arithmetic

Принимая VGG в качестве основной сверточной сети: поскольку характеристики последнего слоя pool-5 являются грубыми, также используются функции pool-4 и pool-3. Это помогает улучшить сегментирование за счет более точного определения границ. Все эти функции объединены, как показано на следующем рисунке:

Следует отметить, что все используемые функции объединения сначала проходят через конв. слой с N + 1, 1 × 1 фильтрами перед повышением дискретизации.

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

U-NET [2]

Архитектура U-Net

Эта модель в основном используется для данных медицинских изображений. Он также следует структуре кодировщика-декодера FCN. Он также не использует полносвязные слои. Кодер - это просто обычная сверточная сеть, состоящая из 10 усл. слои с максимальным объединением слоев между ними.
Декодер состоит из повышающей дискретизации карты функций и выполнения обычных сверток на ней несколько раз. Повышающая дискретизация выполняется с использованием обратной свертки, состоящей из фильтров 2 × 2, а на выходе половина каналов по сравнению с входом. Конечная конв. слой декодера - это 1 × 1 усл. слой, который дает на выходе количество каналов, равное количеству классов плюс фон. Всего 13 усл. слои (включая слои обратной свертки) в сети декодера. Следовательно, вся архитектура состоит из 23 обучаемых усл. слои.

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

СЕГНЕТ [3]

Архитектура SegNet

Архитектура SegNet также следует шаблону кодировщика-декодера. Фактически, большинство архитектур семантической сегментации имеют один и тот же базовый шаблон! Кодировщик сети - полностью сверточный VGG16. Декодер очень похож на декодер U-Net: повторяется повышающая дискретизация, за которой следуют свертки. Однако есть несколько важных ключевых отличий:

Повышающей дискретизации невозможно научиться.

Сеть декодера имеет тот же тип сверток, что и кодер (размеры фильтров и каналы соответствующих уровней одинаковы).

Шаг повышения дискретизации в SegNet - это своего рода операция обратного максимального объединения. Во время прямого прохода в кодере индексы максимального объединения сохраняются, то есть местоположение пикселя с наивысшим значением в окне максимального объединения 2 × 2 в каждой скользящей позиции слоя. Затем они используются для повышения дискретизации в декодере (соответствующий шаг повышения дискретизации до максимального пула в кодере). Остальные пиксели в выводе с повышенной дискретизацией устанавливаются на ноль.

Повышение частоты дискретизации в SegNet

Нормальные свертки выполняются на этой разреженной карте признаков для создания плотной карты признаков. Это отличается от того, что делается в U-Net, где хранится вся карта функций кодировщика, что требует большего объема памяти для хранения значений с плавающей запятой карты функций. С другой стороны, индексы максимального пула, используемые в SegNet, могут быть очень эффективно сохранены, используя всего два бита!
Следовательно, сеть декодеров SegNet состоит из иерархии декодеров, по одному на каждый кодировщик и соответствующий декодер. использует индексы максимального объединения от соответствующего кодировщика для выполнения нелинейной повышающей дискретизации своих входных карт функций.

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

Сегментация дорожной сцены с использованием SegNet.

Теперь перейдем к сегментации экземпляров.

ИНСТАНЦИОННАЯ СЕМАНТИЧЕСКАЯ СЕГМЕНТАЦИЯ

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

ГЛУБОКАЯ МАСКА [4]

Архитектура DeepMask

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

патч содержит объект примерно по центру в нем

объект полностью содержится в патче и в заданном диапазоне масштабов

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

Архитектура состоит из сети VGG-A со всеми полностью подключенными уровнями и удаленным последним уровнем максимального объединения. На выходе получается коэффициент понижающей дискретизации 16. Затем он передается в две параллельные ветви: одну для прогнозирования класса (оценки), а другую - для генерации масок.

Ветвь оценки состоит из слоя max-pooling 2 × 2, за которым следуют два полностью связанных уровня с 512 и 1024 скрытыми блоками соответственно. Оба этих уровня используют нелинейность ReLU и отсев с вероятностью 0,5. Затем последний линейный слой генерирует оценку объекта.
Ветвь сегментации начинается с одного конв. слой с 512 фильтрами. Карта характеристик вывода полностью связана с низкоразмерным выводом размером 512, который дополнительно полностью связан с каждым классификатором пикселей для генерации вывода размером 56 × 56. Слой билинейной передискретизации используется для преобразования этого вывода в разрешение входного фрагмента изображения.

Результаты с использованием DeepMask.

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

МНОГОЗАДАЧНЫЕ СЕТЕВЫЕ КАСКАДЫ (MNC) [5]

Архитектура MNC. На верхнем правом изображении показана упрощенная схема.

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

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

Оценочные маски. В этой подзадаче прогнозируется маска на уровне пикселей.

Категоризация объектов. В этой подзадаче метка категории прогнозируется для каждого экземпляра уровня маски.

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

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

Подзадача 1: Регрессирование экземпляров уровня блока
Сеть предлагает экземпляры объектов в форме ограничивающих прямоугольников. Эти ограничивающие прямоугольники не зависят от класса и прогнозируются с помощью показателя объектности (вероятность содержать объект или нет). Структура сети аналогична сетям предложений регионов (RPN). О них читайте в моем посте на Faster R-CNN.

Подзадача 2: Регрессирование экземпляров на уровне маски
Используя предсказание блока, полученное на этапе 1, функция этого блока извлекается из общих сверточных функций с использованием объединения областей интереса (RoI). Затем он проходит через два полностью связанных слоя. Первый слой fc уменьшает размеры до 256, за ним следует второй слой fc, который регрессирует пиксельную маску. Маска имеет предварительно определенное пространственное разрешение m × m (= 28), которое параметризуется м²-мерным вектором. Это похоже на метод прогнозирования маски, используемый в DeepMask. DeepMask применяет уровни регрессии к плотным скользящим окнам (полностью сверточно), но MNC регрессирует маски только из нескольких предложенных блоков, поэтому вычислительные затраты значительно снижаются.

Подзадача 3: Категоризация экземпляров
Так же, как на этапе 2, с использованием предсказаний блока, заданных на этапе 1, карта функций извлекается с помощью объединения RoI. За этим следуют два параллельных пути: на основе маски и на основе блоков.
В пути на основе маски извлеченная карта признаков RoI «маскируется» предсказаниями маски этапа 2. Это приводит к функции, сфокусированной на переднем плане маски прогнозирования. К замаскированному объекту применяются два слоя 4096-d fc. Путь на основе боксов просто состоит из объекта, извлеченного с помощью пула RoI, который передается на слои 4096-d fc. Путь на уровне прямоугольника предназначен для решения тех случаев, когда функция в основном маскируется путем на уровне маски (например, на фоне или на очень больших объектах). Пути на основе масок и блоков объединяются, за ними следует классификатор softmax для прогнозирования классов N + 1: N категорий плюс одна фоновая категория.

Даже после использования такой сложной архитектуры всю сеть можно обучать от начала до конца!

INSTANCEFCN [6]

Этот метод адаптирует FCN, которые действительно хорошо подходят для семантической сегментации, например семантической сегментации с учетом экземпляра. В отличие от исходного FCN, где каждый выходной пиксель является классификатором категории объекта, в InstanceFCN каждый выходной пиксель является классификатором относительного положения экземпляров. Например, для карты оценок №6 на рисунке ниже каждый пиксель является классификатором того, находится ли он «правой стороной» экземпляра.

FCN применяется к входному изображению для создания карт оценок k², каждая из которых соответствует определенному относительному положению. Это так называемые карты оценок, зависящие от экземпляра. Для создания экземпляров объектов из этих карт оценок используется скользящее окно размером m × m. Окно размером m × m разделено на размерные окна k², m ⁄ k × m ⁄ k, соответствующие каждому из k² относительных положений. Каждое подокно m ⁄ k × m ⁄ k вывода напрямую копирует значения из того же подокна в соответствующую карту оценок. Подокна k² собираются вместе в соответствии с их относительными положениями для сборки выходных данных сегментации m × m. Например, подокно # 1 выходных данных на рисунке выше берется непосредственно из верхнего левого подокна m ⁄ k × m ⁄ k окна m × m на чувствительной к экземпляру карте оценок № 1. Это называется модулем сборки экземпляра.

Архитектура состоит из полностью сверточного применения VGG-16 к входному изображению. На выходной карте признаков есть две полностью сверточные ветви; один для оценки экземпляров сегмента (как описано выше), а другой - для оценки экземпляров.

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

Для первого ответвления 1 × 1 512 сут. Усл. слой, за которым следует конв. Слой используется для создания набора карт оценок, зависящих от k². Модуль сборки (как описано ранее) используется для прогнозирования маски сегментации m × m (= 21).
Вторая ветвь состоит из 3 × 3 512-d усл. слой, за которым следует конв. слой. Это 1 × 1 конв. Layer - это попиксельная логистическая регрессия для классификации экземпляра / не экземпляра скользящего окна размером m × m с центром в этом пикселе. Следовательно, выходом ветви является карта оценки объектности, в которой одна оценка соответствует одному скользящему окну, которое генерирует один экземпляр. Следовательно, этот метод не учитывает различные категории объектов.

Результаты InstanceFCN.

FCIS [7]

Семантическая сегментация, полностью учитывающая сверточные экземпляры (FCIS), основана на методе IntanceFCN. InstanceFCN может предсказывать только фиксированную размерную маску m × m и не может классифицировать объект по различным категориям. FCIS исправляет все это, прогнозируя различные размерные маски, а также прогнозируя различные категории объектов.

ПРОГНОЗ И КЛАССИФИКАЦИЯ СОВМЕСТНОЙ МАСКИ

Карты оценок FCIS Instance Sensitive Score.

При заданном RoI попиксельные карты оценок создаются с помощью операции сборки, как описано выше в разделе InstanceFCN. Для каждого пикселя в ROI есть две задачи (следовательно, создаются две карты оценок):

Обнаружение: принадлежит ли он ограничивающей рамке объекта в относительной позиции (обнаружение +) или нет (обнаружение-).

Сегментация: находится ли он внутри границ экземпляра объекта (сегментация +) или нет (сегментация-).

Исходя из этого, возникают три случая:

высокий внутренний балл и низкий внешний балл: обнаружение +, сегментация +

низкий внутренний балл и высокий внешний балл: обнаружение +, сегментация-

обе оценки низкие: обнаружение-, сегментация-

Для обнаружения используется операция max, чтобы отличить случаи 1 и 2 (обнаружение +) от случая 3 (обнаружение-). Оценка обнаружения всей рентабельности инвестиций получается путем объединения среднего значения вероятностей всех пикселей, за которым следует оператор softmax по всем категориям.
Для сегментации используется softmax, чтобы отличить случай 1 (сегментация +) от остальных (сегментация-) . Маска переднего плана области интереса представляет собой объединение оценок сегментации на пиксель для каждой категории.

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

ResNet используется для полного сверточного извлечения функций из входного изображения. RPN добавляется поверх слоя conv4 для генерации областей интереса. Из карты характеристик conv5 создаются карты оценок 2k² × C + 1 (категории объектов C, одна фоновая категория, два набора карт оценок k² для каждой категории) с использованием conv. слой. RoI (после исключения не максимального значения) классифицируются как категории с наивысшими классификационными баллами. Чтобы получить маску переднего плана, берутся все RoI с оценками пересечения по объединению выше 0,5 с рассматриваемым RoI. Маска категории усредняется на попиксельной основе и взвешивается по их классификационным баллам. Затем усредненная маска преобразовывается в двоичную форму.

МАСКА R-CNN [8]

Mask R-CNN - это усовершенствованная модель Faster R-CNN, в которой другая ветвь добавляется параллельно с ветвями классификатора категорий и ограничивающего прямоугольника регрессора для прогнозирования масок сегментации. Ветвь маски состоит из FCN поверх общей карты функций, которая дает размерность Km² для каждого RoI, кодируя K двоичных масок с разрешением m × m, по одной для каждого из K классов. Это позволяет сети генерировать маски для каждого класса без конкуренции между классами. Класс, предсказанный ветвью классификации, используется для выбора соответствующей маски. Это разделяет предсказания маски и класса.

Архитектура Mask R-CNN с упором на ветвь прогнозирования маски.

Чтобы предсказать точные маски, необходимо внимательно следить за пространственной структурой входного изображения, что хорошо подходит для сверток. Однако такое поведение от пикселя к пикселю также требует, чтобы функции RoI (которые сами по себе представляют собой небольшие карты функций) были хорошо выровнены. Однако RoIPool, используемый для извлечения этих функций, не всегда соответствует выравниванию. Причина в том, что размеры RoI не обязательно должны быть интегралами, но могут также принимать числа с плавающей запятой. RoIPool квантует эти размеры, округляя их до ближайшего целого числа. Не только это, но и квантованная RoI дополнительно подразделяется на квантованные пространственные интервалы, по которым выполняется объединение. Эти квантования влияют на выравнивание пикселей с пикселями с RoI и извлеченными функциями RoI, вызывая ошибки в прогнозировании масок сегментации.

ROIALIGN

RoIAlign. Пунктирная сетка представляет карту функций, сплошные линии - RoI (в этом примере с ячейками 2 × 2), а точки - 4 точки выборки в каждой ячейке.

Для решения этой проблемы представлен новый способ извлечения функций, называемый RoIAlign. Идея заключается в том, что, поскольку квантования вызывают несовпадения, избегайте всех квантований! Например, предположим, что проекция RoI на извлеченной карте признаков имеет размеры 2,86 × 5,12. RoIPool квантует это значение до 3 × 5, вызывая несовпадения. С другой стороны, RoIAlign ничего не сделает и будет использовать размеры 2,86 × 5,12 как есть. RoI далее подразделяется на более мелкие пространственные ячейки (как и RoIPool) без каких-либо квантований. Теперь каждая меньшая ячейка может содержать доли пикселей, и поэтому выполнение операций объединения будет абсурдным. Вместо этого используется двоичная интерполяция для вычисления значений входной характеристики в четырех фиксированных точках в каждом меньшем интервале и агрегирования с использованием максимального или среднего значения. Следует отметить, что функции RoI, извлеченные с помощью RoIAlign, имеют фиксированные пространственные размеры, как и у RoIPool.

Прогнозируемые маски всегда имеют фиксированные размеры, m × m, но их размер изменяется до размера RoI и преобразуется в двоичную форму.

ВЫВОД

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

Однако было испробовано множество различных методов для решения задачи семантической сегментации с учетом экземпляра. Конечно, FCN по-прежнему остаются неотъемлемой частью, но методы, основанные на изменении задач обнаружения для сегментации, также дают хорошие, если не лучшие результаты (Mask R-CNN против FCIS).

МОХАММЕД ШУАИБ