16

Как выполняется операция свертки, когда на входном слое присутствует несколько каналов? (например, RGB)Сверточные нейронные сети - несколько каналов

После некоторого чтения по архитектуре/реализации CNN я понимаю, что каждый нейрон в карте характеристик ссылается на NxM пикселей изображения, как определено размером ядра. Каждый пиксель затем учитывается с помощью карт характеристик, вычисленных с помощью набора NxM (ядро/фильтр), суммируется и вводится в функцию активации. Для простой серой шкалы изображения, я полагаю, операция будет что-то придерживаться следующего псевдокода:

for i in range(0, image_width-kernel_width+1): 
    for j in range(0, image_height-kernel_height+1): 
     for x in range(0, kernel_width): 
      for y in range(0, kernel_height): 
       sum += kernel[x,y] * image[i+x,j+y] 

     feature_map[i,j] = act_func(sum) 
     sum = 0.0 

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

Ссылка на раздел «Общие веса» этого учебника: http://deeplearning.net/tutorial/lenet.html Каждый нейрон в карте характеристик ссылается на слой m-1 с цветами, на которые ссылаются отдельные нейроны. Я не понимаю отношения, которые они выражают здесь. Являются ли ядра нейронов или пиксели и почему они ссылаются на отдельные части изображения?

Основываясь на моем примере, кажется, что единственное ядро ​​нейронов является исключительным для конкретной области изображения. Почему они разделили компонент RGB на несколько регионов?

+0

Я голосовал, чтобы закрыть этот вопрос как не относящийся к теме, потому что он принадлежит к stats.stackexchange – jopasserat

ответ

27

Как выполняется операция свертки, когда на входном слое присутствует несколько каналов? (Например RGB)

В таком случае у Вас есть один 2D ядро ​​каждого входного канала (a.k.a плоскости).

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

Пожалуйста, обратитесь к слайду 64 этого CVPR 2014 tutorial по Marc'Aurelio Ranzato:

enter image description here

Существуют три отдельных набора веса, необходимые на особенность карты, общие для каждого цвета?

Если вы считаете данную карту характеристик выходных данных, у вас есть 3 x 2D ядра (то есть одно ядро ​​на входной канал). Каждое двумерное ядро ​​имеет одинаковые веса по всему входному каналу (здесь R, G или B).

Таким образом, весь сверточный слой представляет собой 4D-тензор (nb. Входные плоскости x nb., Выводные плоскости x ширина ядра x высота ядра).

Почему они разделили компонент RGB на несколько регионов?

Как подробно описано выше думать о каждом R, G и B канала как отдельный входной плоскости с его выделенной 2D ядра.

+0

Ядро 2D conv не распространяется среди всех трех каналов?Считающий уровень conv - это 1 * conv_kernel_num * kernel_width * kernel_height тензор. Если ядро ​​conv не разделяется между каналами, могу ли я интерпретировать ядро ​​conv как тензор kernel_width * kernel_height * channel_num (3 в этом случае)? – user2696499

Смежные вопросы