Количество карт характеристик, созданных после каждого слоя свертки в CNN - PullRequest
0 голосов
/ 16 мая 2018

Мой вопрос о количестве карт объектов после каждого слоя свертки. Основываясь на моих исследованиях, в каждом слое свертки, На основе фильтров, которые мы хотим, В точном количестве мы получаем карты объектов. Но в некоторых уроках я встречал некоторые архитектуры, которые не следуют этому. Например, в этом примере:

enter image description here

Выход первого слоя свертки после объединения составляет 6 карт характеристик (красная линия). Используя эти карты объектов в следующем слое Convolution, было создано 16 новых карт объектов (Зеленая линия). Но как? карты объектов каждого из предыдущих слоев должны создавать 1,2,3 ... новые карты объектов, и мы не должны получать 16 новых карт объектов в следующем слое. Как это случилось? Мое предположение не правильно?

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Позвольте мне дать вам общее представление о том, как свертка работает, на простом примере:

  • Если у нас есть входное изображение размером 32x32 с 3 каналами, и если мы решим использовать фильтр 5x5, размеры фильтра будут 5x5x3 (неявно).

  • Таким образом, теперь свертка будет происходить между соответствующими каналами входного изображения и фильтра, образуя 3 канала, которые будут добавлены для получения одного выхода для данного фильтра 5x5x3.

  • Следовательно, всякий раз, когда мы говорим о глубине, мы имеем в виду количество фильтров, которые мы хотим добавить. В случае, если нам нужна глубина 6, это означает, что мы используем 6 фильтров размером 5x5x3, производящих только 6 слоев вывода.

Чтобы ответить на ваш вопрос, в данной архитектуре они используют 6 фильтров для входного изображения, затем используют 16 фильтров размера (yxyx 6), где у предполагается высота и ширина выбранного фильтра.

0 голосов
/ 11 сентября 2018

У меня тоже было некоторое замешательство некоторое время, и только после некоторого копания туман рассеялся.

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

Операция свертки с одним каналом

Когда мы думаем о простом изображении серой шкалы 32X32 и операции свертки, мы применяем 1 или более матриц свертки в первом слое.

Согласно вашему примеру, каждая из этих сверточных матриц размерности 5X5 создает матрицу 28x28 в качестве выходных данных. Почему 28X28? Потому что вы можете сдвинуть окно с квадратом 5 пикселей в 32-5 + 1 = 28 позиций, предполагая, что stride = 1 и padding = 0.

enter image description here

В таком сценарии каждая матрица свертки имеет 5X5 = 25 обучаемых весов + 1 обучаемое смещение . Вы можете иметь столько ядер свёртки, сколько захотите. Но каждое из ядер будет двухмерным, и каждое из ядер будет создавать выходную матрицу размера 28X28, которая затем подается на уровень MAXPOOL.

Сверточная работа с несколькими каналами

Что если изображение было бы изображением RGB 32X32? Согласно популярной литературе, изображение должно рассматриваться как состоящее из 3 каналов, и операция свертки должна выполняться на каждом из этих каналов. Я должен признать, что поспешно сделал некоторые вводящие в заблуждение выводы . У меня сложилось впечатление, что мы должны использовать три независимых матрицы свертки 5X5 - по 1 для каждого канала. Я был не прав .

Если у вас есть 3 канала , каждая ваша матрица свертки должна иметь размерность 3X5X5 - представьте, что это единое целое, состоящее из матрицы 5X5, сложенной 3 раза. Поэтому у вас есть 5x5x3 = 75 обучаемых весов + 1 обучаемое смещение .

Что происходит во втором сверточном слое?

enter image description here

В вашем примере мне было проще представить, что 6 карт объектов, созданных первым слоем CONV1 + MAXPOOL1, представляют собой 6 каналов. Поэтому, применяя ту же логику RGB, что и раньше, любое ядро ​​свертки, которое мы применяем во втором слое CONV2, должно иметь размерность 6X5X5. Почему 6? Поскольку мы, CONV1 + MAXPOOL1, выпустили 6 карт характеристик. Почему 5x5? В вашем примере вы выбрали измерение windo 5x5. Теоретически я мог бы выбрать 3x3, и в этом случае размер ядра был бы 6X3X3.

Поэтому в текущем примере, если у вас есть N2 сверточных матриц в слое CONV2, тогда каждое из этих ядер N2 будет матрицей размера 6X5X5. В текущем примере N2 = 16 и операция свертки ядра измерения 6X5X5 на входном изображении с 6 каналами X 14X14 создаст N2 матрицы, каждая из которых имеет размер 10X10. Почему 10? 10 = 14-5 + 1 (шаг = 1, отступ = 0).

Теперь у вас есть N2 = 16 матриц, выстроенных для слоя MAXPOOL2.

Ссылка: архитектура LeNet

http://deeplearning.net/tutorial/lenet.html

enter image description here Обратите внимание на окруженную область. Вы можете видеть, что во втором слое свертки показано, что операция распространяется на каждую из 4 карт объектов, созданных первым слоем.

Ссылка: лекции Эндрю Нг

https://youtu.be/bXJx7y51cl0

Ссылка: Как выглядит арифметика Convolution с несколькими каналами?

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

enter image description here

Обратите внимание, что в приведенном примере информация по 3 каналам сведена в двумерную матрицу. Вот почему ваши 6 карты объектов из слоя CONV1 + MAXPOOL1, похоже, больше не влияют на размер первого полностью связанного слоя.

0 голосов
/ 16 мая 2018

Вторая свертка работает следующим образом:

  • форма входной матрицы: 6 @ 14x14 (6 каналов - результат применения 6 фильтров на предыдущем (первом) этапе свертки)
  • входная матрица 6 @ 14x14 будет свернута с использованием 16 фильтров ( каждый фильтров должен иметь 6 каналов, чтобы соответствовать количеству каналов во входной матрице
  • это приведет к выходной матрице 16 @ 5x5

ПРИМЕЧАНИЕ: Количество каналов входной матрицы и количество каналов в каждый фильтр должен совпадать, чтобы можно было выполнять поэлементное умножение.

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

Для второй свертки входная матрица имеет 6 каналов (feature maps), поэтому каждый фильтр для этой свертки также должен иметь 6 каналов. Например: каждый из 16 фильтров будет иметь форму 6@3x3.

Результатом шага свертки для одиночного фильтра 6@3x3 формы будет одиночный канал WxH (ширина, высота). После применения всех 16 фильтров (где каждый из них имеет форму: 6@3x3) мы получим 16 каналов, где каждый канал является результатом свертки одного фильтра.

...