卷积神经网络之卷积核为啥能够识别图像特征?

先梳理下整个卷积神经网络工作主要过程

卷积神经网络(Convolutional Neural Network,简称 CNN)是一种深度学习模型,尤其擅长处理图像数据。CNN 通过多层结构逐步提取图片的特征。以下是 CNN 提取图片特征的主要过程:

1.卷积层(Convolutional Layer):

  • 滤波器(Filters):卷积层的核心组件是滤波器(也称为卷积核,Kernel)。滤波器是一个小矩阵,它在图像上滑动(进行卷积操作),用来检测特定的特征(如边缘、纹理等)。
  • 卷积操作:滤波器在图像上滑动,每次滑动时滤波器矩阵与图像的对应部分进行元素级别的乘积并求和,生成一个单一值。这个过程在图像的每个位置重复,生成一个特征图(Feature Map)。
  • 多通道:通常会使用多个不同的滤波器,因此在每个卷积层中会生成多个特征图,捕捉图像中的不同特征。

2.激活函数(Activation Function):

  • 常用的激活函数是 ReLU(Rectified Linear Unit)。ReLU 会将输入中的所有负值变为零,保持正值不变。这样可以引入非线性,使网络能够学习更复杂的特征。

3.池化层(Pooling Layer):

  • 最大池化(Max Pooling):这是最常见的池化操作。它通过取局部区域(通常是 2x2 或 3x3 矩阵)内的最大值来下采样特征图。这减少了特征图的尺寸,同时保留了最重要的特征。
  • 平均池化(Average Pooling):取局部区域内的平均值,下采样特征图。虽然不如最大池化常用,但在某些情况下也会使用。

4.全连接层(Fully Connected Layer):

  • 在经过若干次卷积和池化操作后,特征图被展平成一个向量,输入到全连接层。全连接层与传统的神经网络类似,每个神经元与上一层的所有神经元相连,用于组合提取到的特征并进行最终分类。

5.输出层(Output Layer):

  • 最后一层通常是一个 Softmax 层(用于分类任务),输出每个类别的概率。

通过这些步骤,CNN 能够逐层提取图片的低级和高级特征,从边缘和纹理,到更复杂的结构和对象。每一层都在前一层的基础上提取更抽象的特征,从而实现对图像的理解和分类。

进入正题,卷积核如何提取到特征的?

假设我们有一个简单的 5x5 的灰度图像(灰度图像的每个像素值是一个单一的数值,表示亮度),以及一个 3x3 的卷积核。我们来看看卷积操作是如何进行的。

原始图像(5x5):

复制代码
1 2 3 0 1
4 5 6 1 2
7 8 9 2 3
1 0 1 3 4
2 1 0 4 5

卷积核(3x3):

复制代码
1 0 -1
1 0 -1
1 0 -1

这个卷积核可以用来检测垂直边缘。

卷积操作步骤:

1.将卷积核放在图像的左上角,并计算覆盖区域的点积:

  • 覆盖区域(图像的左上角 3x3 部分):

    1 2 3
    4 5 6
    7 8 9

  • 计算点积:

scss 复制代码
(1*1 + 2*0 + 3*(-1)) + (4*1 + 5*0 + 6*(-1)) + (7*1 + 8*0 + 9*(-1))
= (1 + 0 - 3) + (4 + 0 - 6) + (7 + 0 - 9)
= -2 + -2 + -2
= -6

这样,卷积核在图像左上角的卷积结果是 -6。

2.将卷积核向右移动一格,并重复计算:

  • 覆盖区域:

    2 3 0
    5 6 1
    8 9 2

  • 计算点积:

scss 复制代码
(2*1 + 3*0 + 0*(-1)) + (5*1 + 6*0 + 1*(-1)) + (8*1 + 9*0 + 2*(-1))
= (2 + 0 - 0) + (5 + 0 - 1) + (8 + 0 - 2)
= 2 + 4 + 6
= 12

所以在这个位置的卷积结果是 12。

3.继续滑动卷积核,直到覆盖整个图像:

通过这种方式,我们可以计算出整个特征图(Feature Map)。假设步长为 1,并且没有使用填充(Padding),则特征图的尺寸将会是 (5-3+1) x (5-3+1) = 3x3。

最终的特征图(3x3):

diff 复制代码
-6  12  1
-6  12  1
-6  12  1

解释:

  • 卷积核在图像上滑动时,每次计算的点积都反映了卷积核与图像局部区域的匹配程度。在这个例子中,卷积核检测的是垂直边缘。
  • 负值(-6)表示图像局部区域中的某些像素值与卷积核的负值部分匹配较好(例如,左侧的高亮像素和右侧的暗像素)。
  • 正值(12)表示图像局部区域中的某些像素值与卷积核的正值部分匹配较好(例如,右侧的高亮像素和左侧的暗像素)。

为什么这个卷积核就能用来检测垂直边缘?

复制代码
1  0 -1
1  0 -1
1  0 -1

垂直边缘检测的原理:

1.卷积核的结构:

  • 左侧的列全是正值(1),右侧的列全是负值(-1),中间的列是零(0)。

2.计算卷积时的效果:

  • 当这个卷积核覆盖在图像的某个局部区域时,它会对该区域的像素进行加权求和。
  • 左侧的像素值会被乘以正值(1),右侧的像素值会被乘以负值(-1),中间的像素值对结果没有贡献(因为乘以0)。

3.边缘检测的逻辑:

  • 如果图像的某个局部区域存在垂直边缘,那么左侧和右侧的像素值将有显著差异。例如,左侧可能是高亮(大像素值),而右侧是暗(小像素值),或反之。
  • 在这种情况下,卷积操作的结果将是一个较大的正值或负值,因为左侧和右侧的像素差异显著。
  • 如果某个局部区域没有垂直边缘(即左右侧的像素值变化不大),那么卷积操作的结果将接近零,因为正负部分的加权和会相互抵消。

总结

以上例子只是一个简单的识别垂直边缘特征,但是通过这个例子,我们知道了提取图像的特征的关键是卷积核,构造不同的卷积核可以识别不同的图像特征。

相关推荐
爱思德学术22 分钟前
中国计算机学会(CCF)推荐学术会议-B(交叉/综合/新兴):BIBM 2025
算法
冰糖猕猴桃33 分钟前
【Python】进阶 - 数据结构与算法
开发语言·数据结构·python·算法·时间复杂度、空间复杂度·树、二叉树·堆、图
lifallen1 小时前
Paimon vs. HBase:全链路开销对比
java·大数据·数据结构·数据库·算法·flink·hbase
liujing102329292 小时前
Day04_刷题niuke20250703
java·开发语言·算法
2401_881244402 小时前
Treap树
数据结构·算法
乌萨奇也要立志学C++2 小时前
二叉树OJ题(单值树、相同树、找子树、构建和遍历)
数据结构·算法
网安INF2 小时前
深度学习中的逻辑回归:从原理到Python实现
人工智能·python·深度学习·算法·逻辑回归
wsxqaz2 小时前
浏览器原生控件上传PDF导致hash值不同
算法·pdf·哈希算法
NAGNIP3 小时前
Transformer注意力机制——MHA&MQA&GQA
人工智能·算法
摘星编程3 小时前
多模态AI Agent技术栈解析:视觉-语言-决策融合的算法原理与实践
人工智能·算法·多模态ai·视觉语言融合·ai决策算法