专栏名称: 学姐带你玩AI
这里有人工智能前沿信息、算法技术交流、机器学习/深度学习经验分享、AI大赛解析、大厂大咖算法面试分享、人工智能论文技巧、AI环境工具库教程等……学姐带你玩转AI!
目录
相关文章推荐
笔吧评测室  ·  英伟达 RTX 50 系列 GPU 放弃对 ... ·  4 小时前  
笔吧评测室  ·  真・手有余香:华硕推出 MD102 ... ·  昨天  
胶卷迷俱乐部  ·  胶卷单反的手动对焦与景深控制(新手篇) ·  4 天前  
色影无忌  ·  摄影启示录 |生命力是重点 ·  4 天前  
图虫APP  ·  投稿最后10天|2024图虫OPENSEE摄影奖 ·  3 天前  
51好读  ›  专栏  ›  学姐带你玩AI

理解卷积神经网络中的卷积滤波操作

学姐带你玩AI  · 公众号  ·  · 2025-02-12 18:20

正文

理解卷积神经网络中的卷积滤波操作

卷积滤波器,亦称卷积核,旨在探测输入数据中的特定模式或特征。以图像处理为例,滤波器或许被设计来识别边缘、角落或纹理。在深度学习领域,这些滤波器的权重通过在大规模数据集上的训练而自动习得。

图1展示了卷积操作的原理。我们有一个形状为(1,5,5)的输入矩阵,这可以是一个非常小的黑白图像。图像的像素值即为特征,因为每个像素值代表了特定位置的光强度。为了检测图像中的物体、面部等,我们需要学习这些特征之间的关系。为此,我们应用卷积核,即小的权重矩阵,在本例中大小为(3,3),对输入进行处理。我们从左上角开始,对重叠的输入部分和卷积核执行点积运算。在本例中:9 * 0 + 4 * 2 + 1 * 1 + 1 * 4 + 1 * 1 + 1 * 0 + 1 * 1 + 2 * 0 + 1 * 1 = 16。现在,我们已经完成了第一个3x3像素值的计算,我们将卷积核向右移动一格并重新开始,得到值30。我们重复整个操作,直到卷积核覆盖了输入图像的每一个像素。

输出矩阵被称为特征图。特征图并不能直接被人解读,但它们作为网络捕捉和编码输入数据中特定特征存在的一种方式。随着网络在训练过程中从数据中学习,它会调整其滤波器以识别与手头任务相关的特征,例如对图像中的物体进行分类。

对彩色RGB图像进行卷积操作

彩色RGB格式的图像具有形状(宽度,高度,颜色通道),有时也会以不同的顺序表示:(颜色通道,宽度,高度)。因此,输入图像现在包含三个颜色矩阵。以下部分将解释在RGB图像情况下如何进行卷积核操作。

假设我们在一个5x5像素的彩色输入图像上应用一个卷积层,该卷积层包含2个大小为(3,3)的滤波器。由于输入图像是RGB格式,其形状为(3,5,5),其中“3”代表三个颜色通道(红、绿、蓝),而“5,5”代表图像的宽度和高度。

上述插图展示了将两个滤波器/卷积核应用于一张图像的过程,最终生成了两个特征图。首先,每个滤波器会为每个输入通道初始化一个随机权重矩阵。在我们的例子中,输入图像有三个输入通道(红色、绿色、蓝色),因此每个滤波器都包含三个权重矩阵。在操作过程中,每个滤波器的三个权重矩阵分别应用于对应的三个颜色通道,从而生成三个新的3×3大小的矩阵,称为特征图。每个特征图的新尺寸是通过以下公式计算得出的:

这三个特征图现在以逐元素的方式相加,从而生成第一个滤波器的单一特征图。由于我们初始化了第二个滤波器,同样的过程会重复进行,但这次使用不同的权重。这种组合增强了网络识别复杂模式的能力,这些复杂模式可能涉及不同颜色通道之间的相互作用。每个特征图都突出了模式、边缘或纹理。每个滤波器的权重是通过反向传播学习得到的。

#Same Opertion in Pytorch:
nn.Conv2d(input_channels=3, output_channels=2, kernel_size=3, stride=1, padding=0)

为了更清晰地说明,我们举一个带有随机数字的例子。

有时,当我们创建一个二维卷积层时,很难理解 PyTorch 代码的具体操作。下图展示了三种不同的 nn.Conv2d 配置及其对应的特征图结果。在所有三种情况下,输入图像都是相同的 5×5 RGB 图像,其维度为 (3, 5, 5)。第一个配置展示了使用步长(stride)为 2 的效果,这使得特征图变小。图中的编号灰色和黑色方块说明了卷积核的移动路径,在这个例子中是从位置 1 移动到位置 2。当然,之后卷积核会继续向下移动两行。在右侧,我们看到了输出的特征图。计算结果展示了特征图的预期尺寸,在这个例子中是 2。这里的 2 代表特征图的高度和宽度,因此输出特征图的尺寸为 2×2。

第二种 PyTorch 的 nn.Conv2d 配置使用了 2 个输出通道,从而生成了两个特征图。在这个例子中,我们希望卷积核在移动时没有任何重叠。然而,如果输入图像的尺寸是 5×5,而卷积核的尺寸是 3×3,步长为 3,那么会出现错误,因为预期的特征图尺寸为 ⌊3(5−3)⌋+1=1.66。这是不可能的,因为特征图的尺寸必须是整数。因此,为了使这种配置能够实现,我们需要添加填充(padding)。在这种情况下,填充的大小需要为 2,因为填充为 1 仍然无法解决问题。

理解数据的前向传播过程

让我们通过以下各层来说明数据在 PyTorch 或 TensorFlow 中的流动过程。

  1. 卷积层(2个卷积核,卷积核尺寸为3,ReLU激活函数)
  2. 最大池化层
  3. Dropout层

下图展示了尺寸为(5,5)的黑白输入图像的像素值如何通过这些层进行变换。最初,两个卷积核的权重矩阵(以蓝色表示)被随机初始化,并应用于输入图像。这产生了两个尺寸均为(3,3)的特征图。随后,最大池化层将特征图的尺寸缩小为(2,2)的矩阵。最后,Dropout层以指定的概率随机将每个值设为零。在此例中,Dropout率为50%。为了继续进行全连接层的操作,我们需要将这些矩阵展平并进行拼接。

理解卷积层的感受野 对于较大的输入,我们需要很多层才能理解整个输入。我们可以通过使用步长(stride)、卷积核大小(kernel_size)和最大池化(max_pooling)来对特征进行下采样。这些操作会增加感受野。感受野本质上表达了后续层包含的关于输入层最初信息的多少。考虑一个长度为7的一维数组的例子,我们在其上应用一个大小为3的一维卷积核。在左侧我们可以看到,由于卷积操作,第二层的一维数组长度从7减少到5。第二层的第一个单元现在代表了第一层最初3个单元的信息。

另一个用于展示感受野的示例:

-- END --

关注“ 学姐带你玩AI ”公众号, 回复“ CNN创新

领取7大类CNN创新方案合集+开源代码







请到「今天看啥」查看全文