当输入层存在多个通道时,卷积操作是如何进行的?(例如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组件分成几个区域?
回答:
当输入层存在多个通道时,卷积操作是如何进行的?(例如RGB)
在这种情况下,你对每个输入通道(也称为平面)有一个二维卷积核。
因此,你分别进行每个卷积(二维输入,二维卷积核),然后将贡献相加,得到最终的输出特征图。
请参考CVPR 2014教程的第64张幻灯片,由Marc’Aurelio Ranzato提供:
每个特征图是否需要三个独立的权重集,这些权重集在每个颜色之间共享?
如果你考虑一个给定的输出特征图,你有3个二维卷积核(即每个输入通道一个卷积核)。每个二维卷积核在整个输入通道(这里是R、G或B)上共享相同的权重。
因此,整个卷积层是一个4D张量(输入平面数 x 输出平面数 x 卷积核宽度 x 卷积核高度)。
为什么他们要将RGB组件分成几个区域?
如上所述,将每个R、G和B通道视为一个独立的输入平面,每个平面有其专用的二维卷积核。