Как фильтры проходят через изображение RGB на первом уровне CNN? - PullRequest
4 голосов
/ 21 июня 2020

Я смотрел эту распечатку слоев. Я понял, это показывает ввод / вывод, но ничего не говорит о том, как обрабатываются каналы RGB.

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

Если вы посмотрите на block1_conv1, там написано «Conv2D». Но если входные данные имеют размер 224 x 224 x 3, тогда это не 2D. ). Объединяются ли (суммируются или объединяются) каналы RGB в какой-то момент? Когда и где? Для этого нужен какой-то уникальный фильтр? Или модель проходит по разным каналам / цветовым представлениям отдельно от конца до конца?

Ответы [ 2 ]

1 голос
/ 24 июня 2020

2D сверток?

Этот хороший ресурс.

Если вы посмотрите на block1_conv1, там написано «Conv2D». Но если входные данные 224 x 224 x 3, то это не 2D.

Вы неправильно понимаете значение 2D-свертки. Двумерный сверточный алгоритм перемещается по вашему входу по высоте и ширине каждого канала. Он никогда не перемещается в третьем измерении. Поскольку он движется в этой плоскости, это двухмерная свертка. Фактический фильтр - 3D, да.

Но фактически у нас есть 3 изображения (красный, зеленый и синий каналы). Как они используются для генерации только 1D вывода?

к концу архитектуры Con vNet мы сократим полное изображение до единого вектора оценок классов. Веб-сайт Stanford CS231n

Выходные данные каждого слоя фильтра, свёрнутого с соответствующим входным слоем, суммируются по матрице. Если хотите, ко всем элементам добавляется перекос. А может и не . Итак, если у вас есть 3 входных канала и 1 фильтр, вы получите XY-1. Если у вас есть 2 (или 1, или 3, или 4 или 1000) входных каналов и 15 фильтров, вы просто получите XY-15. X и Y - высота вывода, которая будет зависеть от других параметров свертки.

3D свертки

3D свертки отличаются тем, что каждый фильтр является трехмерным и перемещается по разным каналам, поэтому каждый вес используется во всех каналах.

Что такое свертки 1x1?

Это трюк, используемый для снижения вычислительных затрат сети за счет уменьшения количества каналов (уменьшения размерности входных данных) без выполнения какой-либо «реальной» свертки / расчеты. Это полезно, потому что меньшее количество каналов означает меньшее количество весов, которые необходимо вычислить для вычислений, использующих этот выходной сигнал в качестве входных, таких как более крупные (3x3 или 5x5) свертки.

1 голос
/ 24 июня 2020

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

Фактически это делается по каждому каналу отдельно. Например, первый слой Conv2D принимает каждый из 3 слоев 224x224 отдельно, а затем применяет к каждому из них разные фильтры 2D-массива. Но это не сквозной путь для всех слоев модели, только внутри слоя на этапе свертки.

Но, вы можете спросить, есть 64 фильтра свертки для каждого канала , так почему же на выходе Conv2D для 3 каналов нет каналов 3*64 = 192? Это вызывает ваш вопрос

Объединяются ли (суммируются или объединяются) каналы RGB в какой-то момент?

Ответ: да. После того, как фильтр свертки применяется к каждому слою отдельно, добавляются значения для каждого из трех каналов, а затем также смещение, если вы это указали. См. Диаграмму ниже (из Dive Into Deep Learning , под CC BY-SA 4.0 ):

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

Причина этого (добавляются отдельные слои каналов) в том, что на самом деле нет трех отдельных фильтров 2D-массива для каждого канала; технически есть только 1 фильтр 3D-массива, который движется только в двух направлениях. Вы можете думать об этом как о гамбургере: есть один фильтр 2D-массива для одного канала (булочка), другой для следующего канала (салат) и т. Д. c. но все слои сложены и функционируют как единое целое, поэтому веса фильтра складываются сразу. Для этого нет необходимости добавлять специальный вес или фильтр, поскольку веса уже присутствуют на этапе свертки (это просто умножение двух подгоночных параметров вместе, что также может быть одним).

...