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