Знакомство с пропуском соединений в сверточных нейронных сетях с использованием архитектуры U-Net

Общие проблемы с компьютерным зрением:

  1. Классификация изображений
  2. Классификация изображений + локализация
  3. Обнаружение объекта
  4. Семантическая сегментация: далее можно подразделить и рассматривать как а. бинарная классификация для варианта 2 классов на пиксель b. мультиклассовая классификация, если пиксель может принадлежать более чем 2 классам
  5. Сегментация экземпляра

Приложения задач семантической сегментации:

  1. Автономные транспортные средства
  2. Медицинская визуализация
  3. Геозондирование
  4. Точное земледелие

Ю-Нет

Несколько терминов:

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

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

Давайте копать глубже

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

Выходное изображение размером = ((input_size + (2 * padding_size) — kernel_window_size)/шаг) +1

Сверточная матрица: матричное представление окна ядра сверточного слоя, назовем матрицу A. Матричное представление, чтобы мы могли выполнять матричное умножение между этой сверточной матрицей A и матрицей изображения I, чтобы получить одну будущую матрицу карты, скажем, представленную с помощью F.

A*I = F

Итак, если наше исходное изображение было матрицей 4 на 3, и мы использовали окно ядра 3 на 3 для выполнения операции свертки, мы получим матрицу 2 на 2. Теперь представьте, что я конвертирую матрицу изображения в одномерную матрицу (16 на 1), вектор размером 16. Также представьте, что я конвертирую матрицу свертки размером 3 на 3 в матрицу размера 16 на 4, так что каждая строка имеет 0 в своей ячейке, если этот конкретный элемент не участвует в рецептивном поле, представленном этой строкой. В противном случае в заданной строке столбец i имеет значение, равное значению элемента матрицы окна ядра, которое должно быть умножено на i-й элемент строки векторного представления матрицы изображения.

Транспонированная свертка:

Этот термин происходит от того факта, что на самом деле эта операция делает обратное тому, что делает сверточная операция (сверточный слой). Он используется для повышения частоты дискретизации изображения, в основном для увеличения размера изображения. Обратная в том смысле, что операция свертки уменьшает размер входного изображения, тогда как транспонирующая операция свертки или слой свертки с дробным шагом или слой свертки, как вам угодно, увеличивает размер изображения. Как это делается, матрица входного изображения умножается на другую матрицу (которую можно рассматривать как транспонирование матрицы свертки). Теперь представьте, что у меня есть матрица 2 на 2, и я хочу повысить ее разрешение до изображения размером 4 на 4. Если бы это было наоборот, я бы использовал окно ядра 3 на 3, представив его в матрице 16 на 4. и умножил его на векторное представление 16 на 1 изображения 4 на 4. Чтобы обратить эту операцию вспять, операция свертки транспонирования умножает векторное представление 4 на 1 изображения 2 на 2 на матрицу 4 на 16 (давайте назовем это матрицей свертки транспонирования), чтобы получить векторное представление 16 на 1 восстановленного изображения (изображение с повышенной дискретизацией). ).

Зачем это делать: почему повышающая дискретизация: в основном в процессе изучения функций изображения путем применения слоев свертки мы применяем слой понижающей дискретизации (в данном случае максимальное объединение). Слой понижения дискретизации привел к уменьшению изображения, уменьшая размер изображения. Хотя это хорошо для того, чтобы иметь возможность сфокусироваться на «важных функциях» изображения, сверточный слой может за один раз просмотреть более широкий контекст (теперь рецептивные поля соответствуют более крупным функциям). В основном это означает, что, отбрасывая некоторые значения в матрице изображения, я позволяю рецептивному полю уменьшить масштаб и иметь возможность сфокусироваться, скажем, на всем глазу, если интересующее изображение — чье-то лицо. Если бы я не отбросил некоторые значения, рецептивное поле смотрело бы на очень детализированные черты, скажем, только на ресницы. Итак, мы уменьшили рецептивное поле, убрав некоторые элементы. Чтобы сделать это систематически, мы применяем объединяющие слои. Максимальное объединение является распространенным, когда задана, скажем, матрица 4 на 4, а объединение имеет размер 2, затем, начиная с верхнего левого угла, вы берете часть 2 на 2 матрицы 4 на 4 и выбираете максимум из этих 4 элементов. Вы продолжаете для полной матрицы 4 на 4 и получаете на выходе матрицу 2 на 2. Преимущество теперь заключается в том, что применение сверточного слоя к этой матрице 2 на 2 приведет к изучению большего контекста (более крупных функций) изображения. Недостатком является то, что это приведет к потере пространственного контекста изображения.

Вывод из этого: Пулирующий (или вообще повышающий дискретизацию) слой улучшает изучение «ЧТО» части изображения, но теряет информацию о «ГДЕ» части изображения. Это дает более широкий контекст, но теряет основную информацию.

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

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

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

Зачем пропускать соединения: недостаточно ли повышающей дискретизации??

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

Клетчатый эффект: в основном при создании исходного изображения с использованием слоя деконволюции происходит перекрытие рецептивного поля. Представьте, что при выполнении операции обратного преобразования произошло перекрытие рецептивного поля при движении слева направо и сверху вниз. Это же перекрытие отражается на уровне deconv, где мы пытаемся получить отношение «один ко многим». Это перекрытие приводит к клетчатому артефакту. По сути, в некоторых позициях в результирующем изображении более чем (я думаю, обычно 2) элемент входного изображения для деконвекции пытается сформировать отношение. Тайский дает клетчатый эффект. Это снова символ утраченного пространственного контекста, и это более заметно на ярких изображениях. Причина: поскольку сеть может в конечном итоге взять среднее значение двух вкладов, но яркие цвета ближе к крайности, поэтому они больше отличаются от среднего и, следовательно, больше страдают, взяв среднее, из-за этого клетчатого артефакта. Это была проблема в нейронных сетях и называлась клетчатым артефактом. Ссылка, приведенная ниже для более подробной информации.

Использованная литература :

  1. https://towardsdatascience.com/understanding-semantic-segmentation-with-unet-6be4f42d4b47
  2. https://theaisummer.com/skip-connections/
  3. https://naokishibuya.medium.com/up-sampling-with-transposed-convolution-9ae4f2df52d0
  4. Клетчатый эффект слоя деконволюции: https://distill.pub/2016/deconv-checkerboard/
  5. Слой свертки: https://cs231n.github.io/convolutional-networks/
  6. https://lmb.informatik.uni-freiburg.de/people/ronneber/u-net/
  7. https://arxiv.org/abs/1505.04597