Сверточные нейронные сети - несколько каналов

Как выполняется операция свертки, когда на входном слое присутствует несколько каналов? (например, 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 на несколько регионов?

Ответы

Ответ 1

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

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

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

Обратитесь к слайду 64 этого учебника CVPR 2014 от Marc'Aurelio Ranzato:

enter image description here

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

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

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

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

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

Ответ 2

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

Для объединения выходов разных каналов, в основном, нам нужна функция, чтобы сложить вывод вместе. Выбор дополнительных функций здесь, на мой взгляд, может варьироваться в зависимости от вариантов использования. Одна из реализаций - это просто суммирование, в соответствии с реализацией pytorch conv2d. см. https://pytorch.org/docs/stable/nn.html для получения подробной информации.