Погружение в сети глубокой сверточной семантической сегментации и Deeplab_V3

1656663158 pogruzhenie v seti glubokoj svertochnoj semanticheskoj segmentaczii i deeplab v3

от Thalles Silva

1*rZ1vDrOBWqISFiNL5OMEbg

Глубокие сверточные нейронные сети (DCNN) добились чрезвычайного успеха в различных программах компьютерного зрения. Как и другие, задачи семантической сегментации не исключение из этой тенденции.

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

Семантическая сегментация

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

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

0*VMJtEUeJyA-XbDgF
Стандартная модель глубокого обучения для распознавания изображений. Авторы изображения: Convolutional Neural Network MathWorks.

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

Имейте в виду, что семантическая сегментация не различает экземпляры объектов. Здесь мы стараемся назначить индивидуальную метку каждому пикселю цифрового изображения. Таким образом, если у нас есть два объекта одного класса, они будут иметь одинаковую метку категории. Сегментация экземпляров – это класс проблем, которые различают экземпляры одного класса.

0*_VVeYr35i5GM6p6_
Разница между семантической сегментацией и сегментацией экземпляров. (посередине) Хотя это один и тот же объект (автобус), они классифицируются как разные объекты. (слева) Тот же объект, одинаковая категория.

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

Например, вместо того, чтобы объединять и связывать слои, представьте, что изображение проходит через ряд сверток. Мы можем установить для каждой свертки шаг 1 и отступление «SAME». Делая это, каждая свертка сохраняет пространственные размеры входа. Мы можем сложить кучу этих извилин и получить модель сегментации.

0*gAVdLPKbQphFjAYa
Полностью свернута нейронная сеть для задания плотного прогнозирования. Обратите внимание на отсутствие слоев объединения и полной связи.

Эта модель может выводить тензор вероятности с формой. [W,H,C]где W и H представляют ширину и высоту, а C — количество меток класса. Применение argmax функция (на третьей оси) дает нам форму тензора [W,H,1]. После этого мы рассчитываем потерю кросс-энтропии между каждым пикселем наземных изображений и нашими прогнозами. В конце концов мы усредняем это значение и тренируем сеть с помощью опоры.

Однако в этом подходе есть одна проблема. Как мы уже упоминали, использование сверток с шагом 1 и «ЖЕ» padding сохраняет входные размеры. Однако это сделало бы модель более дорогой как по потреблению памяти, так и по сложности вычислений.

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

0*3TxBI1xNIDm_Z615
Архитектура кодера-декодера для семантической сегментации изображения.

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

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

После первой части у нас есть вектор признаков с формой [W, H, D] где W, H и D – ширина, высота и глубина тензора признаков. Заметьте, что пространственные размеры этого сжатого вектора меньше (но плотнее), чем исходные входные данные.

0*dT0gcJavW_LQY4Dm
(Вверху) Сеть ВГГ-16 в оригинальном виде. Обратите внимание на 3 полностью соединенных слоя на вершине стека сверток. (вниз) Модель VGG-16 при замене полносвязанных слоев на свертки 1×1. Это изменение позволяет сети выводить грубые тепловые карты. Авторы изображения: полностью сверточные сети для семантической сегментации.

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

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

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

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

Архитектура модели

В отличие от большинства дизайнов кодера-декодера, Deeplab предлагает другой подход к семантической сегментации. Он представляет архитектуру управления децимацией сигнала и изучения многомасштабных контекстных функций.

0*vPNf03aFqjnKUjt8

Кредиты изображения: Переосмысление Atrous Convolution для семантической сегментации изображения.

Deeplab использует предварительно обученную ImageNet ResNet как свою основную сеть экстрактора функций. Однако он предлагает новый блок Residual для многомасштабного изучения функций. Вместо обычных извилин последний блок ResNet использует атрические свивки. Кроме того, каждая свертка (в этом новом блоке) использует разные скорости расширения для захвата многомасштабного контекста.

Кроме того, в дополнение к этому новому блоку он использует Atrous Spatial Pyramid Pooling (ASPP). ASPP использует расширенные свертки с разными скоростями в качестве попытки классифицировать регионы произвольного масштаба.

Чтобы понять архитектуру deeplab, нужно сосредоточиться на трех компонентах. (i) Архитектура ResNet, (ii) изгибы атруса и (iii) объединение пространственных пирамид Atrous (ASPP). Перейдем к каждому из них.

ResNets

ResNet очень популярен DCNN, который выиграл классификационную задачу ILSVRC 2015. Одним из главных вкладов ResNets было создание основы для облегчения обучения более глубоким моделям.

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

В оригинальном документе представлены два типа остаточных единиц. The базовая линия и узкое место блоки.

Базовая единица содержит два 3×3 свертки с пакетной нормализацией (BN) и активацией ReLU.

0*EDoU4Xh6XPO_0xVy
Строительные блоки ResNet. (слева) базовая линия; (справа) узкое место. Изображение адаптировано с: Deep Residual Learning for Image Recognition.

Второе, узкое место, состоит из трех сложенных операций. Серии 1×1, 3×3 и 1×1 свертки заменяют предварительную конструкцию. Два 1×1 операции предназначены для уменьшения и обновления размеров. Это оставляет 3×3 свертка, посредине, для работы с менее плотным вектором признаков. Кроме того, BN применяется после каждой свертки и перед нелинейностью ReLU.

Чтобы было понятнее, давайте обозначим эту группу операций как функцию. Ф его введение x F(x).

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

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

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

Для нашей реализации мы будем использовать полная предварительная активация Residual Unit. Единственное отличие от стандартного узкого места состоит в порядке размещения активаций BN и ReLU. Для полной предварительной активации BN и ReLU (в этом порядке) происходят перед свертками.

0*_gCQf3VOGmHXzSgY
Различные архитектуры строительных блоков ResNet. (крайний слева) оригинальный блок ResNet. (Крайний правый) улучшена полная версия перед активацией. Кредиты изображения: отображение идентичности в глубоких остаточных сетях.

Как показано в Identity Mappings in Deep Residual Networks, блок полной предварительной активации работает лучше других вариантов.

Заметьте, что единственным отличием между этими схемами является порядок BN и RELu в стеке свертки.

Атрозные извилины

Атрозные (или расширенные) извилины – это регулярные извилины с коэффициентом, позволяющим расширить поле зрения фильтра.

Рассмотрим a 3×3 сверточный фильтр, например. Когда скорость расширения равна 1, она ведет себя как стандартная свертка. Но если мы установим коэффициент расширения равным 2, это приведет к увеличению сверточного ядра.

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

0*owO24EqfB_RNfT7V
Атрозные извилины разной скорости.

Как следствие, свертка с расширенной 2, 3×3 фильтр позволит охватить площадь, эквивалентную a 5×5. Однако, поскольку он действует как разреженный фильтр, только оригинал 3×3 клетки будут выполнять вычисления и выдавать результаты. Я сказал «действовать», потому что большинство фреймворков не реализуют атрические свертки с помощью разреженных фильтров (из-за проблем с памятью).

Подобным образом установка атрального фактора на 3 позволяет регулярный. 3×3 свертка для получения сигналов от a 7×7 соответствующая площадь.

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

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

0*Oa8JJBiKNvMVZrkg
Побочные эффекты настройки большей скорости расширения для меньших карт объектов. Для входного изображения 14×14 фильтр 3×3 со скоростью расширения 15 вынуждает атральную свертку вести себя как обычная свертка 1×1.

Когда скорость расширения очень близка к размеру карты объектов, регулярная 3×3 атральный фильтр является стандартным 1×1 свертка.

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

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

Для исходного шага 16 размер изображения 224x224x3 выводит вектор признаков в 16 раз меньших размеров. Это 14×14.

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

Deeplab сообщает об экспериментах с двумя конфигурациями исходных шагов, 8 и 16. Как и ожидалось, исходный шаг = 8 мог дать лучшие результаты. Здесь мы выбираем исходный шаг = 16 из практических соображений.

Кроме того, поскольку блок atrous не реализует снижение дискретизации, ASPP также работает с тем же размером ответа функции. Как следствие это позволяет изучать функции из многомасштабного контекста, используя относительно большие скорости расширения.

Новый остаточный блок Atrous содержит три остаточных единицы. В общей сложности 3 единицы имеют три 3×3 извилины. По мотивам многосеточный Deeplab предлагает разные скорости расширения для каждой свертки. Суммируя, многосеточный определяет скорость расширения для каждой из трех извилин.

На практике:

Для нового блока4, когда исходный шаг = 16 и Мультисетка = (1, 2, 4)три свертки имеют ставки = 2 · (1, 2, 4) = (2, 4, 8) соответственно.

Atrous Spatial Pyramid Pooling

Для ASPP идея состоит в том, чтобы предоставить модели многомасштабную информацию. Для этого ASPP добавляет серию атральных извилин с разной скоростью расширения. Эти скорости предназначены для захвата дальнего контекста. Кроме того, чтобы добавить информацию о глобальном контексте, ASPP включает функции на уровне изображения с помощью Global Average Pooling (GAP).

Эта версия ASPP содержит 4 параллельных операции. Это а 1×1 свертка и три 3×3 извилины с скорость расширения =(6,12,18). Как уже отмечалось, на этом этапе номинальный шаг карт функций равен 16.

Основываясь на оригинальной реализации, мы используем размеры урожая 513×513 как для обучения, так и для тестирования. Таким образом, использование исходного шага 16 означает, что ASPP получает векторы признаков размера. 32×32.

Кроме того, чтобы добавить больше информации о глобальном контексте, ASPP включает функции на уровне изображения. Во-первых, он применяет GAP к функциям, выведенным из последнего атрального блока. Во-вторых, полученные функции передаются в a 1×1 свертка с 256 фильтрами. Наконец результат билинейно повышает дискретизацию до правильных размеров.

В конце концов, функции всех ветвей объединяются в один вектор с помощью конкатенации. Этот выход затем сворачивается с другим 1×1 ядро – с использованием BN и 256 фильтров.

После ASPP мы передаем результат другому 1×1 свертка – для создания окончательных логитов сегментации.

Детали реализации

Используя ResNet-50 в качестве экстрактора функций, эта реализация Deeplab_v3 использует следующую конфигурацию сети:

  • исходный шаг = 16
  • Исправлены мультисеточные скорости атральной свертки (1,2,4) для нового блока Atrous Residual (блок 4).
  • ASPP со ставками (6,12,18) после последнего блока Atrous Residual.

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

Скорости расширения с несколькими сетками применяются до 3 извилин внутри блока Atrous Residual.

Наконец, каждая из трех параллельная 3×3 свертки в ASPP получает разную скорость расширения. (6,12,18).

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

Основываясь на начальных процедурах обучения, мы масштабируем каждое изображение с использованием случайного коэффициента от 0,5 до 2. Кроме того, мы применяем случайное пролистывание влево-вправо к масштабируемым изображениям.

Наконец, мы обрезаем участки определенного размера 513×513 как для обучения, так и для тестирования.

Чтобы реализовать атрозные свертки с несколькими сетками в блоке resnet, мы просто изменили этот фрагмент в resnet_utils.py файл.

Обучение

Чтобы обучить сеть, мы решили использовать дополненный набор данных Pascal VOC, предоставленный семантическими контурами из инверсных детекторов.

Учебные данные состоят из 8252 изображений. Есть 5623 по учебному набору и 2299 по набору проверки. Чтобы протестировать модель с помощью оригинального набора данных VOC 2012, я удалил 558 изображений из 2299 набора для проверки. Эти 558 образцов также присутствовали в официальном наборе для проверки ЛОС. Кроме того, я добавил 330 изображений из комплекта поездов VOC 2012, которых не было ни среди 5623, ни среди 2299 наборов. Наконец, 10% из 8252 изображений (~825 образцов) хранятся для проверки, остальные остаются для обучения.

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

Результаты

Модель смогла добиться приличных результатов на тесте PASCAL VOC.

  • Точность пикселей: ~91%
  • Средняя точность: ~82%
  • Среднее значение пересечения через Союз (млОд): ~74%
  • Частота взвешенного пересечения через объединение: ~86%.

Ниже можно просмотреть некоторые результаты в различных изображениях из набора проверки PASCAL VOC.

0*0jdZ7ybvv9xVHRqs
0*X1arsScqOqXxjnCn

Вывод

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

Надеюсь, вам понравилось читать!

Первоначально опубликовано на sthalles.github.io.

1*RzOHqzrJEIrB5ZY0nJAcvg

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *