Как работают последующие слои свертки?

29

Этот вопрос сводится к тому, «как сделать сверток слоев именно работу.

Предположим, у меня есть изображение в оттенках серого . Таким образом, изображение имеет один канал. В первом слое я применяю свертку с фильтрами и заполнением. Тогда у меня есть еще один слой свертки с сверток и фильтров. Сколько карт у меня есть?3 × 3 k 1 5 × 5 k 2N×м3×3К15×5К2

Тип 1 свертка

Первый слой исполняется. После этого у меня есть карты характеристик (по одной на каждый фильтр). Каждый из них имеет размер . Каждый пиксель был создан путем взятия пикселей из дополненного входного изображения. n × m 3 3 = 9К1N×м33знак равно9

Затем наносится второй слой. Каждый фильтр применяется отдельно к каждой из карт объектов . Это приводит к картам характеристик для каждой карты характеристик . Таким образом, после второго слоя есть карт объектов. Каждый пиксель каждой из новых карт объектов был создан путем взятия "пикселей" карты дополненных объектов из ранее.k 1 k 1 × k 2 5 5 = 25К2К1К1×К255знак равно25

Система должна узнать параметры .К133+К255

Тип 2.1 свертка

Как и прежде: первый слой выполняется. После этого у меня есть карты характеристик (по одной на каждый фильтр). Каждый из них имеет размер . Каждый пиксель был создан путем взятия пикселей из дополненного входного изображения. n × m 3 3 = 9К1N×м33знак равно9

В отличие от ранее: тогда второй слой применяется. Каждый отдельный фильтр применяется к одному и тому же региону, но все карты объектов из предыдущих. Это приводит к тому, что карты характеристик в общей сложности после выполнения второго слоя. Каждый отдельный пиксель каждой из новых карт объектов был создан путем взятия "пикселей" карт дополненных объектов из предыдущих.k 25 5 = 25 k 2К2К255знак равно25К2

Система должна узнать параметры .К133+К255

Тип 2.2 свертка

Как и выше, но вместо параметров на фильтр, которые необходимо изучить и просто скопировать для других карт входных объектов, у вас есть k_1 \ cdot 3 \ cdot 3 + k_2 \ cdot k_1 \ cdot 5 \ cdot 5 параметров, которые должны быть изучены.к 13 3 + K 2K 15 555знак равно25К133+К2К155

Вопрос

  1. Тип 1 или тип 2 обычно используется?
  2. Какой тип используется в Alexnet ?
  3. Какой тип используется в GoogLeNet ?
    • Если вы говорите тип 1: почему 1×1 свертки имеют смысл? Разве они не умножают данные только на константу?
    • Если вы говорите тип 2: объясните, пожалуйста, квадратичную стоимость («Например, в сети глубокого видения, если два сверточных слоя объединены в цепочку, любое равномерное увеличение числа их фильтров приводит к квадратичному увеличению вычислений»)

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

Бонусный вопрос 1

Всегда ли пул применяется только для каждой карты объектов или же для нескольких карт объектов?

Бонусный вопрос 2

Я относительно уверен, что тип 1 правильный, и что-то не так с бумагой GoogLe. Но там и 3D сверток тоже. Допустим, у вас есть 1337 карт объектов размером и вы применяете фильтр . Как вы перемещаете фильтр по картам объектов? (Слева направо, сверху вниз, от первой карты объектов до последней карты объектов?) Имеет ли это значение, если вы делаете это последовательно?3 × 4 × 542×3143×4×5

Мое исследование

Мартин Тома
источник
Некоторое время спустя: анализ и оптимизация сверточных архитектур нейронных сетей , особенно глава 2 и рисунок 2.2 и рисунок 2.3.
Мартин Тома

Ответы:

5

Я не уверен в альтернативах, описанных выше, но обычно используемая методология:

Перед применением нелинейности каждый выходной сигнал фильтра линейно зависит от всех карт объектов, ранее существовавших в патче, поэтому вы получите фильтры после вторых слоев. Общее количество параметров составляет . 3 ˙К23˙3˙К1+К1˙5˙5˙К2

Бонус 1: Объединение выполняется для каждой карты функций отдельно.

Бонус 2: порядок «скольжения» не имеет значения. Фактически каждый вывод вычисляется на основе предыдущего уровня, поэтому ответы выходного фильтра не зависят друг от друга. Они могут быть вычислены параллельно.

ChristianSzegedy
источник
1
Я полностью забыл об этом вопросе. Тем временем я написал магистерскую диссертацию о CNN. Глава 3 объясняет, как они работают.
Мартин Тома
1
Чтобы уточнить: Тип 2.2 является правильным (описано в этом ответе)
Мартин Тома
1
В случае, если кто-то действительно хочет увидеть это в действии, я внедрил глубокую сверточную нейронную сеть в листы Google. Вы можете видеть фильтры и входное изображение, пиксель за пикселем, пока он работает, пока он проходит через CNN, пока CNN не предскажет ответ: docs.google.com/spreadsheets/d/…
bwest87
5

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

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

Теперь этот 3D-стек формирует вход для второго слоя конвона. Поскольку вход на 2-й слой является 3D, фильтры также должны быть 3D. Сделайте размер фильтров второго слоя в третьем измерении равным количеству карт объектов, которые были выходными данными первого слоя.

Теперь вы просто сворачиваете первые два измерения; строки и столбцы. Таким образом, свертка каждого фильтра 2-го уровня со стеком карт объектов (выход первого слоя) дает одну карту объектов.

Таким образом, размер третьего измерения на выходе второго слоя равен количеству фильтров во втором слое.

Алекс Бленкинсоп
источник
2

Проверьте эту лекцию и эту визуализацию

Обычно используется свертка типа 2.1. На входе у вас есть изображение NxMx1, затем после первой свертки вы получите N_1xM_1xk_1, поэтому ваше изображение после первой свертки будет иметь k_1 каналов. Новое измерение N_1 и M_1 будет зависеть от вашего шага S и заполнения P: N_1 = (N - 3 + 2P) / S + 1, вы вычисляете M_1 по аналогии. Для первого слоя конвоя у вас будет 3x3xk_1 + k_1 веса. Добавлена ​​k_1 для смещений в нелинейной функции.

Во втором слое у вас есть входное изображение размером N_1xM_1xk_1, где k_1 - новое количество каналов. И после второй свертки вы получите N_2xM_2xk_2 изображение (массив). У вас есть 5x5xk_2xk_1 + k_2 параметров во втором слое.

Для свертки 1x1 с фильтрами k_3 и входом NxMxC (C - количество входных каналов) вы получите новое изображение (массив) NxMxk_3, поэтому 1x1 имеет смысл. Они были представлены в этой статье

Бонус 1: объединение применяется для каждой карты объектов.

Для получения дополнительной информации см. Слайды для курса CNN по Стэнфорду - у вас есть отличная визуализация суммирования свертки по нескольким входным каналам.

pplonski
источник
2
Ответы только на ссылки не приветствуются - ссылки могут перестать работать. Можете ли вы включить соответствующую информацию?
Шон Оуэн
1
визуализация была действительно полезной. Мой момент прозрения был, когда я понял, что фильтры 3D, а не 2D.
Kmace
1
Отличные ссылки, разберитесь со мной. Но ваш ответ кажется несовместимым с тем, что сказано в ссылках, в частности, в конв слое 2 каждое восприимчивое поле является трехмерным с размерами 5x5xk_1, поэтому число параметров должно быть 5 * 5 * k_1 * k_2 (плюс смещение).
Даниэль Шлауг
@ DanielSchlaug ты прав, я исправил ответ.
pplonski
1

К1331К1

К255К1К2

То есть ядра в сверточном слое охватывают глубину вывода предыдущего уровня.

1×1КN11КN-1

Спекуляция:

Бонусный вопрос 2 - это не то, с чем я знаком, но я предполагаю, что параметр глубины в свертке становится дополнительным измерением.

мNКNмNКN+1КN

geometrikal
источник