Как работает операция DepthConcat в «Идти глубже с извилинами»?

12

Чтение Углубляясь в свертки, я наткнулся на слой DepthConcat , строительный блок предлагаемых начальных модулей , который объединяет выходные данные нескольких тензоров различного размера. Авторы называют это «Фильтр конкатенации». Там , как представляется , реализация для Torch , но я не очень понимаю, что это делает. Может кто-нибудь объяснить простыми словами?

Moi
источник

Ответы:

9

Я не думаю, что выходные данные начального модуля имеют разные размеры.

введите описание изображения здесь

Для сверточных слоев люди часто используют заполнение, чтобы сохранить пространственное разрешение.

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

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

введите описание изображения здесь

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

dontloo
источник
6

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

В коде Факела, на который вы ссылаетесь , написано:

--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :

Слово «глубина» в глубоком обучении немного неоднозначно. К счастью, этот SO Ответ дает некоторую ясность

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

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

Таким образом, DepthConcat объединяет тензоры по измерению глубины, которое является последним измерением тензора и в данном случае 3-м измерением трехмерного тензора.

DepthConcat должен сделать тензоры одинаковыми во всех измерениях, кроме измерения глубины, как говорит код Torch :

-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.

например

A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3). 

введите описание изображения здесь

На диаграмме выше мы видим картину тензора результата DepthConcat, где белая область - это заполнение нулями, красная - это тензор A, а зеленая - тензор B.

Вот псевдокод для DepthConcat в этом примере:

  1. Посмотрите на тензор A и тензор B и найдите наибольшие пространственные размеры, которые в этом случае были бы 16 ширины тензора B и 16 размеров высоты. Поскольку тензор A слишком мал и не соответствует пространственным размерам тензоров B, его необходимо дополнить.
  2. Заполните пространственные размеры тензора А нулями, добавив нули к первому и второму измерениям, создав размер тензора А (16, 16, 2).
  3. Конкатенированный тензор A с тензором B по глубине (3-й) размерности.

Я надеюсь, что это поможет кому-то еще, кто думает о том же вопросе, читая этот документ.

Ashleys
источник
да. идеальное введение. Это связано в направлении глубины. Не в пространственных направлениях.
Шамане Сиривардхана