В CNN, апсэмплинг и транспонирование свертки - то же самое?

12

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

  1. Транспонировать свертку : похоже, что мы можем использовать его, когда мы предлагаем потерю через конвольутональную нейронную сеть.

    http://andrew.gibiansky.com/blog/machine-learning/convolutional-neural-networks/#Backward-Propagation

    https://github.com/vdumoulin/conv_arithmetic

    https://arxiv.org/pdf/1312.6034v2.pdf , раздел 4 «Для сверточного слоя ...»

  2. UPSAMPLING : кажется , что мы используем его , когда мы хотим повышающую дискретизацию с меньшего вклада в больший ввод в структуре convnet-decovnet.

    https://www.youtube.com/watch?v=ByjaPdWXKJ4&feature=youtu.be&t=22m

RockTheStar
источник
1
Перекрестная публикация на datascience.stackexchange.com/questions/15863/… . Пожалуйста, не кросс-пост, а решить, на каком сайте вы хотите получить свой вопрос.
Scortchi - Восстановить Монику
@ Scortchi О, они связаны !? Извините, я удаляю один в науке о данных.
RockTheStar
Интересный пост на так называемых deconvolutions
HANS

Ответы:

9

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

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

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

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

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

Противоположностью объединяющих слоев являются слои повышенной дискретизации, которые в чистом виде изменяют только размер изображения (или копируют пиксель столько раз, сколько необходимо). Более продвинутый метод - удаление, которое восстанавливает максимальное объединение, запоминая расположение максимумов в слоях максимального и в неиспользуемых слоях, копирует значение именно в это местоположение. Цитировать из этого ( https://arxiv.org/pdf/1311.2901v3.pdf ) документа:

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

Для получения дополнительной технической информации и контекста взгляните на это действительно хорошее, наглядное и подробное объяснение: http://deeplearning.net/software/theano/tutorial/conv_arithmetic.html

И посмотрите на https://www.quora.com/What-is-the-difference-between-Deconvolution-Upsampling-Unpooling-and-Convolutional-Sparse-Coding

Maikefer
источник
Ф. Чолле (создатель Кераса) будет утверждать, что это метод самоконтроля .
Ганс
6

Это может зависеть от пакета, который вы используете.

В керасе они разные. Upsampling определяется здесь https://github.com/fchollet/keras/blob/master/keras/layers/convolutional.py условия , что вы используете tensorflow бэкенд, что на самом деле происходит, keras вызовов tensorflow resize_images функции, которая по существу является интерполяцией и не обучаемая.

Транспонированная свертка более сложна. Это определено в том же скрипте Python, указанном выше. Вызывает функцию convord_transpose в tenorflow, имеет ядро ​​и является обучаемым.

Надеюсь это поможет.

Цзянь
источник
1

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

Транспонирование свертки является одной из стратегий для повышения частоты дискретизации.

Франк Дернонкур
источник
Да, я согласен. но похоже, что ссылки объясняют их иначе. Взгляните на видео в № 2, а затем посмотрите на ссылки в № 1 (лично я иду к объяснению № 1)
RockTheStar
@RockTheStar Какая концепция объясняется по-другому? Транспонировать свертку или повышающую дискретизацию?
Франк Дернонкур
1
концепция повышающей дискретизации / деконволюции, объясненная в видео в № 2. Это около нескольких минут.
RockTheStar
0

Вот довольно хорошая иллюстрация различия между 1) транспонированием свертки и 2) повышающей дискретизацией + сверткой. https://distill.pub/2016/deconv-checkerboard/

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

Шаобо Гуан
источник