В чем разница между дилатацией и деконволюцией?

11

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

Я читал о расширенном сверточном слое в этой статье: WAVENET: ОБЩАЯ МОДЕЛЬ ДЛЯ СЫРЬЕГО АУДИО

и Деконволюция в этой статье: полностью сверточные сети для семантической сегментации

Оба, кажется, улучшают изображение, но в чем разница?

Шамане Сиривардхана
источник

Ответы:

9

В смысле механистических / изобразительных / основанных на изображении терминов:

Дилатация: ### ПОСМОТРЕТЬ КОММЕНТАРИИ, РАБОТАЯ НА ЭТОМ РАЗДЕЛЕ

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

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

Для того, чтобы сделать это более конкретным, давайте рассмотрим очень простой пример:
у вас есть 9x9 изображение, х без заполнения. Если взять стандартное ядро 3х3, с шагом 2, первое подмножеством концерна от входа будет й [0: 2, 0: 2], и все девять точек в пределах этих границ будут считаться ядром. Вы бы тогда захлестнуть х [0: 2, 2: 4] и так далее.

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

Но если вы не хотите добавлять больше слоев и / или чувствуете, что передаваемая информация чрезмерно избыточна (т. Е. Ваши восприимчивые поля 3х3 во втором слое на самом деле содержат только разную информацию «2х2»), можно использовать расширенный фильтр. Для ясности расскажем об этом и скажем, что мы будем использовать 3-диаллированный фильтр 9x9. Теперь наш фильтр будет «окружать» весь ввод, поэтому нам вообще не придется его скользить. Тем не менее, мы все равно будем брать только 3x3 = 9 точек данных из ввода, x , как правило:

x [0,0] U x [0,4] U x [0,8] U x [4,0] U x [4,4] U x [4,8] U x [8,0] U x [8,4] U x [8,8]

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


Дробно-шаговый или транспонированный или «деконволюция»:

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

В нашем случае 9x9, скажем, мы хотим увеличить частоту до 11x11. В этом случае у нас есть два общих варианта: мы можем взять ядро ​​3x3 и с шагом 1 и провести его по нашему входу 3x3 с заполнением 2 так, чтобы наш первый проход был над областью [left-pad-2: 1, выше-pad-2: 1], затем [left-pad-1: 2, over-pad-2: 1] и так далее и так далее.

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

транспонированный конв, вход синий, выход зеленый

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

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

Дуг Браммелл
источник
1
Пожалуйста, имейте в виду, я не эксперт, просто кто-то, кому недавно пришлось различать эти понятия самостоятельно. Пожалуйста, дайте мне знать, если есть какие-либо прямые ошибки или чрезмерные упрощения, которые могут подорвать общую правильность ответов. Спасибо!
Даг Браммелл
Даг Браммел: Ничего себе, объясни. У меня была та же идея. Я хотел бы знать ваше мнение о применении расширенной свертки, Как мы должны начать применять это в CNN. Должны ли мы сначала к некоторой нормальной свертке, а затем применить расширенную свертку? Еще одна вещь, расширенная свертка может пропустить информацию, если мы не обнуляем. Так что я думаю, что мы должны применить расширенную свертку после нескольких нормальных слоев конвеета?
Шамане Сиривардхана
Я полагаю, что стандартная идея состоит в том, чтобы увеличивать степень расширения, двигаясь вперед, начиная с не расширенных, регулярных фильтров для l = 1, переходя к 2-, а затем к 3-расширенным фильтрам и так далее, по мере продвижения по глубине вашей сети. Это позволяет вам гарантировать, что все данные на одном уровне передаются на следующий (включая, что важно, в саму сеть), в то же время позволяя экспоненциально ускорять понижающую дискретизацию с каждым уровнем, но без увеличения параметров. Целью является широкая восприимчивость полей без ущерба для включения данных. И да, внимание к заполнению должно быть важным на раннем этапе.
Даг Браммелл
См. [Этот документ] ( arxiv.org/pdf/1511.07122.pdf ), на него есть ссылки выше, и он содержит много полезного о том, что я прочитал по этой теме.
Даг Браммелл
Еще одна вещь, эта статья утверждает, что в такой растущей схеме расширения нет потери разрешения ... Я полагаю, я просто опасаюсь других потерь, которые я мог бы скрыть под "разрешением". Конечно, если вы можете заменить несколько слоев конвоя на меньшее количество расширенных слоев и сохранить точность, прекрасно, вы должны это сделать. Но для меня (и мне придется вернуться к книгам по этому вопросу), я думаю о потенциальных потерях в случае, когда вы с самого начала
Даг Браммелл
5

Хотя оба, кажется, делают одно и то же, что увеличивает уровень слоя, между ними есть четкое поле.

Сначала мы поговорим о дилатационной свертке

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

Вот расширенная диаграмма свертки из бумаги .

Изображение 3

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

Этот блог действительно объясняет, что нового в расширенной свертке и как это сравнивается с обычной сверткой.

Блог: дилатационные извилины и факторические конволюции Кронекера

Теперь я объясню, что такое деконволюция

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

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

Вот хороший ресурс с фотографиями .

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

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

Он пытается научиться улучшать, совмещая с окончательной потерей

Это лучшее объяснение, которое я нашел для деконволюции. Лекция 13 в cs231, с 21.21 дальнейшими .

Шамане Сиривардхана
источник
не могли бы вы уточняя , как дилатационная свертка помогает увеличить пространственный размер выходных? Кажется, он требует еще большего заполнения, чем традиционные свертки, и, следовательно, хуже в отношении выходного размера.
wlnirvana