news 2026/4/3 4:51:29

【计算机视觉(13)】卷积神经网络基础篇:从全连接层到卷积层

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【计算机视觉(13)】卷积神经网络基础篇:从全连接层到卷积层

文章目录

    • 📚 学习路线图
    • 本文内容一览(快速理解)
    • 一、卷积神经网络的应用(ConvNets Applications):无处不在的深度学习
      • 1.1 ConvNets的广泛应用(ConvNets are Everywhere):从分类到生成
    • 二、全连接层的局限性(Limitations of Fully Connected Layers):丢失空间结构
      • 2.1 全连接层的问题(Problem with Fully Connected Layers):丢失空间信息
    • 三、卷积层(Convolutional Layer):保留空间结构的层
      • 3.1 卷积层的基本概念(What is Convolutional Layer):滤波器滑动计算
      • 3.2 卷积操作的详细过程(Convolution Operation Details):点积计算
      • 3.3 多个滤波器产生多个激活映射(Multiple Filters, Multiple Activation Maps):构建特征图
    • 四、空间维度计算(Spatial Dimensions):理解步长和填充
      • 4.1 输出尺寸的计算(Output Size Calculation):基本公式
      • 4.2 步长(Stride):控制滑动的步距
      • 4.3 填充(Padding):控制边界处理
      • 4.4 参数数量的计算(Parameter Count):理解卷积层的参数
    • 五、池化层(Pooling Layer):降低空间维度
      • 5.1 池化层的作用(What is Pooling Layer):降维和不变性
      • 5.2 最大池化(Max Pooling):取局部最大值
    • 六、全连接层(Fully Connected Layer):最终分类
      • 6.1 全连接层的作用(Role of Fully Connected Layer):全局决策
    • 七、完整的CNN架构(Complete CNN Architecture):组合所有层
      • 7.1 典型的CNN架构(Typical CNN Architecture):层叠结构
      • 7.2 1×1卷积(1×1 Convolution):深度方向的卷积
    • 📝 本章总结
    • 📚 延伸阅读
      • 推荐资源

📌适合对象:计算机视觉初学者、深度学习入门者
⏱️预计阅读时间:50-60分钟
🎯学习目标:理解卷积神经网络的基本原理,掌握卷积层、池化层和全连接层的作用,学会计算卷积层的输出尺寸和参数数量


📚 学习路线图

全连接层
局限性
卷积层
保留空间结构
卷积操作
滑动窗口
激活映射
多个滤波器
空间维度
步长和填充
池化层
降维
全连接层
最终分类
完整CNN
架构

本文内容一览(快速理解)

  1. 卷积神经网络的应用(ConvNets Applications):卷积神经网络在图像分类、检测、分割等任务中的广泛应用
  2. 全连接层的局限性(Limitations of Fully Connected Layers):全连接层会丢失图像的空间结构信息
  3. 卷积层(Convolutional Layer):通过卷积操作保留空间结构,使用滤波器提取局部特征
  4. 卷积操作(Convolution Operation):滤波器在图像上滑动,计算点积得到激活映射
  5. 空间维度计算(Spatial Dimensions):理解步长、填充对输出尺寸的影响
  6. 池化层(Pooling Layer):通过池化操作降低空间维度,减少参数数量
  7. 全连接层(Fully Connected Layer):在CNN末尾进行最终分类

一、卷积神经网络的应用(ConvNets Applications):无处不在的深度学习

这一章要建立的基础:了解卷积神经网络在计算机视觉中的广泛应用

核心问题:卷积神经网络在哪些任务中取得了成功?


[!NOTE]
📝 关键点总结:卷积神经网络(ConvNets)在图像分类、目标检测、语义分割、图像生成、图像描述等任务中都有广泛应用,是现代计算机视觉的基础。

1.1 ConvNets的广泛应用(ConvNets are Everywhere):从分类到生成

概念的本质

卷积神经网络已经成为计算机视觉领域的核心技术,在多个任务中都取得了突破性的成果。从图像分类到目标检测,从语义分割到图像生成,ConvNets无处不在。

图解说明

卷积神经网络
ConvNets
图像分类
Classification
目标检测
Detection
语义分割
Segmentation
图像生成
Generation
图像描述
Captioning
风格迁移
Style Transfer

💡说明

  • 图像分类:识别图像中的物体类别(如猫、狗、汽车)
  • 目标检测:不仅识别物体,还定位物体的位置
  • 语义分割:对图像中的每个像素进行分类
  • 图像生成:生成新的图像
  • 图像描述:用自然语言描述图像内容
  • 风格迁移:将一幅画的风格应用到另一幅图像上

类比理解

想象卷积神经网络就像一个"万能工具箱":

  • 图像分类:就像识别"这是什么"
  • 目标检测:就像不仅知道"是什么",还知道"在哪里"
  • 语义分割:就像给图像的每个部分贴上标签
  • 图像生成:就像"画一幅画"
  • 图像描述:就像"看图说话"
  • 风格迁移:就像"用梵高的风格画一幅照片"

实际例子

ConvNets的应用实例: 1. 图像分类(ImageNet): - 输入:一张图像 - 输出:物体类别(如"猫"、"狗"、"汽车") - 准确率:超过人类水平 2. 目标检测(Faster R-CNN): - 输入:一张图像 - 输出:多个边界框和类别标签 - 应用:自动驾驶、监控系统 3. 语义分割: - 输入:一张图像 - 输出:每个像素的类别标签 - 应用:医学图像分析、场景理解 4. 图像生成(GANs): - 输入:随机噪声 - 输出:逼真的图像 - 应用:艺术创作、数据增强 5. 图像描述(Image Captioning): - 输入:一张图像 - 输出:自然语言描述 - 例如:"一只白色的泰迪熊坐在草地上" 6. 风格迁移(Neural Style Transfer): - 输入:内容图像 + 风格图像 - 输出:具有风格图像风格的合成图像 - 例如:将照片转换为梵高风格

二、全连接层的局限性(Limitations of Fully Connected Layers):丢失空间结构

这一章要建立的基础:理解为什么全连接层不适合处理图像,以及为什么需要卷积层

核心问题:全连接层处理图像时有什么问题?如何解决?


[!NOTE]
📝 关键点总结:全连接层需要将图像展平成一维向量,这会丢失图像的空间结构信息。卷积层通过保留空间结构,能够更好地处理图像数据。

2.1 全连接层的问题(Problem with Fully Connected Layers):丢失空间信息

概念的本质

全连接层(Fully Connected Layer)在处理图像时,需要将32 × 32 × 3 32 \times 32 \times 332×32×3的图像展平成3072 × 1 3072 \times 13072×1的向量。这个过程丢失了图像的空间结构信息,即像素之间的相对位置关系。

图解说明

32×32×3图像
空间结构
展平
拉伸成一维
3072×1向量
丢失空间信息
全连接层
10×3072
10个类别分数

💡说明

  • 问题:展平操作丢失了像素之间的空间关系
  • 影响:无法利用图像的局部特征(如边缘、纹理)
  • 解决:使用卷积层保留空间结构

类比理解

想象你在看一幅拼图。全连接层就像:

  • 展平:把拼图拆散,所有拼图片混在一起
  • 问题:失去了拼图片之间的位置关系
  • 结果:很难理解图像的整体结构

卷积层就像:

  • 保留结构:保持拼图片的相对位置
  • 优势:能够识别局部模式(如边缘、角点)

实际例子

全连接层的问题: 输入图像:32×32×3 = 3072个像素 - 像素(0,0)和像素(0,1)在空间上相邻 - 像素(0,0)和像素(31,31)在空间上相距很远 展平后: - 所有像素变成一维向量 - 失去了"相邻"和"相距远"的概念 - 无法利用局部特征 卷积层的优势: - 保留32×32的空间结构 - 能够识别局部模式(如5×5的区域) - 利用像素之间的空间关系

三、卷积层(Convolutional Layer):保留空间结构的层

这一章要建立的基础:理解卷积层如何工作,以及它如何保留图像的空间结构

核心问题:卷积层是如何工作的?它如何保留空间结构?


[!NOTE]
📝 关键点总结:卷积层通过滤波器(filter)在图像上滑动,计算局部区域的点积,生成激活映射(activation map)。多个滤波器产生多个激活映射,堆叠成新的特征图。

3.1 卷积层的基本概念(What is Convolutional Layer):滤波器滑动计算

概念的本质

卷积层(Convolutional Layer)使用滤波器(filter,也称为卷积核kernel)在输入图像上滑动,在每个位置计算滤波器与图像局部区域的点积,生成激活映射。多个滤波器产生多个激活映射,堆叠在一起形成新的特征图。

图解说明

32×32×3图像
5×5×3滤波器
滑动计算
点积
28×28激活映射
6个滤波器
6个激活映射
28×28×6特征图

💡说明

  • 滤波器:小的权重矩阵(如5 × 5 × 3 5 \times 5 \times 35×5×3),用于提取局部特征
  • 滑动:滤波器在图像上逐位置移动
  • 点积:计算滤波器与图像局部区域的点积
  • 激活映射:每个滤波器产生一个激活映射
  • 特征图:多个激活映射堆叠成新的特征图

类比理解

想象你在用放大镜看一幅画。卷积层就像:

  • 滤波器:放大镜(只看到局部区域)
  • 滑动:移动放大镜,看不同的区域
  • 点积:比较放大镜下的图案与你要找的图案的相似度
  • 激活映射:记录每个位置的相似度
  • 多个滤波器:用不同的放大镜找不同的图案

实际例子

卷积层的例子: 输入:32×32×3图像 滤波器:5×5×3(一个滤波器) 计算过程: 1. 滤波器放在图像左上角(位置(0,0)) 2. 计算5×5×3区域与滤波器的点积 3. 得到激活值(一个数字) 4. 将滤波器向右移动1个像素 5. 重复步骤2-4,直到覆盖整个图像 结果: - 输出尺寸:28×28(32-5+1=28) - 一个滤波器产生一个28×28的激活映射 多个滤波器: - 使用6个5×5×3滤波器 - 得到6个28×28的激活映射 - 堆叠成28×28×6的特征图

3.2 卷积操作的详细过程(Convolution Operation Details):点积计算

概念的本质

卷积操作本质上是计算滤波器与图像局部区域的点积。对于5 × 5 × 3 5 \times 5 \times 35×5×3的滤波器,它与图像中5 × 5 × 3 5 \times 5 \times 35×5×3的区域进行点积运算,得到一个标量值。这个值表示该局部区域与滤波器的匹配程度。

图解说明

图像局部区域
5×5×3
点积运算
滤波器
5×5×3
激活值
一个数字
激活映射
28×28

💡说明

  • 点积:对应元素相乘后求和
  • 维度5 × 5 × 3 = 75 5 \times 5 \times 3 = 755×5×3=75维的点积
  • 偏置:通常还会加上一个偏置项
  • 激活函数:通过ReLU等激活函数得到最终激活值

类比理解

想象你在用模板匹配。卷积操作就像:

  • 图像局部区域:你要检查的图像片段
  • 滤波器:模板(你要找的图案)
  • 点积:比较图像片段与模板的相似度
  • 激活值:相似度分数(越高越匹配)

实际例子

卷积操作的例子: 图像局部区域(5×5×3): - 75个像素值 滤波器(5×5×3): - 75个权重值 点积计算: - 对应位置相乘:像素值 × 权重 - 所有乘积求和 - 加上偏置:sum + bias - 通过ReLU:max(0, sum + bias) 结果: - 一个激活值(标量) - 表示该区域与滤波器的匹配程度 滑动过程: - 滤波器在图像上滑动 - 每个位置计算一次点积 - 得到28×28的激活映射

3.3 多个滤波器产生多个激活映射(Multiple Filters, Multiple Activation Maps):构建特征图

概念的本质

一个卷积层通常使用多个滤波器(如6个、32个、64个等)。每个滤波器提取不同的特征(如边缘、角点、纹理等),产生一个激活映射。所有激活映射堆叠在一起,形成新的特征图。

图解说明

32×32×3图像
滤波器1
提取边缘
滤波器2
提取角点
滤波器3
提取纹理
...
更多滤波器
激活映射1
28×28
激活映射2
28×28
激活映射3
28×28
激活映射...
28×28
堆叠
28×28×6

💡说明

  • 多个滤波器:每个滤波器学习不同的特征
  • 激活映射:每个滤波器产生一个激活映射
  • 特征图:所有激活映射堆叠成新的特征图
  • 深度:特征图的深度等于滤波器的数量

类比理解

想象你在用多个不同的"探测器"扫描图像。多个滤波器就像:

  • 滤波器1:专门检测"水平边缘"的探测器
  • 滤波器2:专门检测"垂直边缘"的探测器
  • 滤波器3:专门检测"圆形"的探测器
  • 结果:每个探测器产生一张"检测结果图"
  • 堆叠:将所有结果图叠在一起,得到完整的特征图

实际例子

多个滤波器的例子: 输入:32×32×3图像 滤波器:6个5×5×3滤波器 过程: 1. 滤波器1在图像上滑动 → 激活映射1(28×28) 2. 滤波器2在图像上滑动 → 激活映射2(28×28) 3. 滤波器3在图像上滑动 → 激活映射3(28×28) 4. 滤波器4在图像上滑动 → 激活映射4(28×28) 5. 滤波器5在图像上滑动 → 激活映射5(28×28) 6. 滤波器6在图像上滑动 → 激活映射6(28×28) 结果: - 6个28×28的激活映射 - 堆叠成28×28×6的特征图 - 深度为6,表示提取了6种不同的特征 每个滤波器的作用: - 滤波器1可能学习检测"水平边缘" - 滤波器2可能学习检测"垂直边缘" - 滤波器3可能学习检测"圆形" - 等等...

四、空间维度计算(Spatial Dimensions):理解步长和填充

这一章要建立的基础:理解卷积操作如何改变空间维度,以及步长和填充的作用

核心问题:卷积操作后输出尺寸是多少?如何控制输出尺寸?


[!NOTE]
📝 关键点总结:卷积操作的输出尺寸由输入尺寸、滤波器大小、步长和填充决定。公式:输出尺寸 = (输入尺寸 - 滤波器大小 + 2×填充) / 步长 + 1。步长控制滑动的步距,填充控制边界处理。

4.1 输出尺寸的计算(Output Size Calculation):基本公式

概念的本质

卷积操作的输出尺寸可以通过公式计算:输出尺寸 = (输入尺寸 - 滤波器大小 + 2×填充) / 步长 + 1。其中,输入尺寸是图像的空间维度(如32),滤波器大小是滤波器的空间维度(如5),步长(stride)是每次滑动的像素数,填充(padding)是在图像边界添加的零像素数。

图解说明

输入尺寸N
滤波器大小F
步长S
填充P
计算公式
(N-F+2P)/S+1
输出尺寸

💡说明

  • 输入尺寸N:图像的空间维度(如32×32中的32)
  • 滤波器大小F:滤波器的空间维度(如5×5中的5)
  • 步长S:每次滑动的像素数(通常为1或2)
  • 填充P:在边界添加的零像素数
  • 输出尺寸:根据公式计算

类比理解

想象你在用尺子测量。空间维度计算就像:

  • 输入尺寸:你要测量的长度
  • 滤波器大小:你的尺子长度
  • 步长:每次移动尺子的距离
  • 填充:在两端添加的额外空间
  • 输出尺寸:你能测量多少次

实际例子

输出尺寸计算的例子: 例子1:基本卷积 - 输入:7×7 - 滤波器:3×3 - 步长:1 - 填充:0 - 输出:(7-3+2×0)/1+1 = 5×5 例子2:带步长 - 输入:7×7 - 滤波器:3×3 - 步长:2 - 填充:0 - 输出:(7-3+2×0)/2+1 = 3×3 例子3:带填充 - 输入:7×7 - 滤波器:3×3 - 步长:1 - 填充:1 - 输出:(7-3+2×1)/1+1 = 7×7(保持尺寸) 例子4:实际应用 - 输入:32×32×3 - 滤波器:5×5×3,10个 - 步长:1 - 填充:2 - 输出:(32-5+2×2)/1+1 = 32×32×10

4.2 步长(Stride):控制滑动的步距

概念的本质

步长(Stride)是滤波器每次移动的像素数。步长为1表示每次移动1个像素,步长为2表示每次移动2个像素。步长越大,输出尺寸越小,计算量也越小。

图解说明

步长S=1
每次移动1像素
输出较大
步长S=2
每次移动2像素
输出较小
步长S=3
可能无法整除
需要检查

💡说明

  • 步长=1:最常用,输出尺寸最大,保留更多信息
  • 步长=2:常用,输出尺寸减半,减少计算量
  • 步长>2:较少用,可能导致信息丢失
  • 注意:步长必须使得滤波器能够完全覆盖输入

类比理解

想象你在用放大镜扫描图像。步长就像:

  • 步长=1:每次移动很小的距离,看得很仔细(输出大)
  • 步长=2:每次移动较大的距离,看得快但可能遗漏细节(输出小)
  • 步长太大:可能跳过某些区域,无法完全覆盖

实际例子

步长的例子: 输入:7×7 滤波器:3×3 步长=1: - 可以放置的位置:5个(0,1,2,3,4) - 输出:5×5 - 计算量:25次卷积操作 步长=2: - 可以放置的位置:3个(0,2,4) - 输出:3×3 - 计算量:9次卷积操作(减少) 步长=3: - 可以放置的位置:2个(0,3) - 输出:2×2 - 但(7-3)/3+1 = 2.33,不是整数 - 需要检查是否能够完全覆盖 常见设置: - 卷积层:通常步长=1(保留信息) - 下采样:通常步长=2(减少尺寸)

4.3 填充(Padding):控制边界处理

概念的本质

填充(Padding)是在输入图像的边界添加零像素。填充的作用是控制输出尺寸,防止图像在卷积过程中尺寸快速缩小。常用的填充方式是零填充(zero padding),即在边界添加值为0的像素。

图解说明

7×7输入
无填充
P=0
填充1像素
P=1
输出5×5
尺寸缩小
输出7×7
尺寸保持

💡说明

  • 无填充(P=0):输出尺寸会缩小
  • 填充(P>0):在边界添加零像素,可以保持或增大输出尺寸
  • 常见设置:对于F × F F \times FF×F的滤波器,通常填充( F − 1 ) / 2 (F-1)/2(F1)/2以保持尺寸
  • 零填充:填充的像素值为0,不影响卷积计算

类比理解

想象你在用模板匹配。填充就像:

  • 无填充:只在图像内部匹配,边界区域无法匹配(输出小)
  • 填充:在图像周围添加"空白区域",让边界也能匹配(输出大)
  • 零填充:添加的"空白区域"值为0,不影响匹配结果

实际例子

填充的例子: 输入:7×7 滤波器:3×3 步长:1 无填充(P=0): - 输出:(7-3+2×0)/1+1 = 5×5 - 尺寸缩小 填充1像素(P=1): - 输入变成:9×9(7+2×1) - 输出:(7-3+2×1)/1+1 = 7×7 - 尺寸保持 常见设置: - 3×3滤波器:填充1((3-1)/2=1) - 5×5滤波器:填充2((5-1)/2=2) - 7×7滤波器:填充3((7-1)/2=3) 作用: - 保持空间尺寸,避免快速缩小 - 让边界像素也能被充分处理 - 在深层网络中特别重要

4.4 参数数量的计算(Parameter Count):理解卷积层的参数

概念的本质

卷积层的参数数量等于所有滤波器的参数数量之和。对于K KKF × F × D F \times F \times DF×F×D的滤波器,参数数量为K × ( F × F × D + 1 ) K \times (F \times F \times D + 1)K×(F×F×D+1),其中+ 1 +1+1是每个滤波器的偏置项。

图解说明

一个滤波器
F×F×D
权重参数
F×F×D
偏置参数
+1
单个滤波器参数
F×F×D+1
K个滤波器
总参数
K×(F×F×D+1)

💡说明

  • 单个滤波器参数F × F × D F \times F \times DF×F×D个权重 +1 11个偏置
  • 总参数K × ( F × F × D + 1 ) K \times (F \times F \times D + 1)K×(F×F×D+1)
  • 优势:参数共享,参数数量远少于全连接层

类比理解

想象你在用多个模板。参数数量就像:

  • 单个模板:模板的权重值(如5×5×3=75个)+ 一个阈值(偏置)
  • 多个模板:每个模板都有自己的权重和阈值
  • 参数共享:同一个模板在图像的所有位置共享参数(这是卷积层的优势)

实际例子

参数数量计算的例子: 例子1: - 输入:32×32×3 - 滤波器:10个5×5×3 - 单个滤波器参数:5×5×3 + 1 = 76 - 总参数:10 × 76 = 760 例子2: - 输入:28×28×6 - 滤波器:16个3×3×6 - 单个滤波器参数:3×3×6 + 1 = 55 - 总参数:16 × 55 = 880 对比全连接层: - 如果28×28×6展平 = 4704 - 全连接层到10类:4704 × 10 = 47,040个参数 - 卷积层:只需要880个参数(少得多!) 优势: - 参数共享:同一个滤波器在所有位置共享参数 - 局部连接:每个神经元只连接局部区域 - 参数效率:用更少的参数提取特征

五、池化层(Pooling Layer):降低空间维度

这一章要建立的基础:理解池化层的作用和操作方式

核心问题:为什么需要池化层?池化层如何工作?


[!NOTE]
📝 关键点总结:池化层通过下采样操作降低特征图的空间维度,减少参数数量和计算量,同时提供一定的平移不变性。最常用的是最大池化(Max Pooling),取局部区域的最大值。

5.1 池化层的作用(What is Pooling Layer):降维和不变性

概念的本质

池化层(Pooling Layer)对每个激活映射独立进行操作,通过下采样降低空间维度。最常用的是最大池化(Max Pooling),取局部区域(如2×2)的最大值。池化层可以减少参数数量、计算量和内存占用,同时提供一定的平移不变性。

图解说明

28×28×6特征图
最大池化
2×2, stride 2
14×14×6特征图
尺寸减半
减少参数
池化的好处
减少计算
平移不变性

💡说明

  • 最大池化:取局部区域的最大值
  • 平均池化:取局部区域的平均值(较少用)
  • 常见设置:2×2滤波器,步长2(尺寸减半)
  • 独立操作:对每个激活映射独立进行池化

类比理解

想象你在看一幅高分辨率照片。池化层就像:

  • 高分辨率:28×28的特征图(细节丰富)
  • 池化:每隔一个像素采样一次(降低分辨率)
  • 结果:14×14的特征图(保留主要特征,减少细节)
  • 好处:文件更小,处理更快,对小的平移不敏感

实际例子

池化层的例子: 输入:28×28×6特征图 最大池化(2×2, stride 2): - 将28×28分成14×14个2×2的区域 - 每个区域取最大值 - 输出:14×14×6 计算过程: 区域1(左上角2×2): [6, 8] [3, 4] 最大值 = 8 区域2(右上角2×2): [1, 2] [5, 7] 最大值 = 7 ...(对所有区域重复) 结果: - 输入:28×28×6 = 4,704个值 - 输出:14×14×6 = 1,176个值 - 减少了75%的数据量 好处: - 减少后续层的参数数量 - 减少计算量 - 提供平移不变性(物体稍微移动不影响结果)

5.2 最大池化(Max Pooling):取局部最大值

概念的本质

最大池化(Max Pooling)将输入特征图分成多个不重叠的区域(如2×2),对每个区域取最大值作为输出。最大池化能够保留最显著的特征,同时降低空间维度。

图解说明

输入特征图
4×4
2×2池化
stride 2
输出特征图
2×2
区域1
max=8
区域2
max=7
区域3
max=6
区域4
max=5

💡说明

  • 区域划分:将输入分成不重叠的区域
  • 最大值:每个区域取最大值
  • 步长:通常等于滤波器大小(如2×2滤波器,步长2)
  • 结果:输出尺寸 = 输入尺寸 / 步长

类比理解

想象你在看一幅画,但只能记住每个区域的"最亮点"。最大池化就像:

  • 输入:高分辨率的画(每个细节都看到)
  • 池化:将画分成多个区域,只记住每个区域的"最亮点"
  • 输出:低分辨率的画(只保留主要特征)

实际例子

最大池化的例子: 输入:4×4特征图 [6, 8, 1, 2] [3, 4, 5, 7] [9, 1, 2, 3] [4, 5, 6, 8] 2×2最大池化,步长2: 区域1(左上角): [6, 8] [3, 4] 最大值 = 8 区域2(右上角): [1, 2] [5, 7] 最大值 = 7 区域3(左下角): [9, 1] [4, 5] 最大值 = 9 区域4(右下角): [2, 3] [6, 8] 最大值 = 8 输出:2×2 [8, 7] [9, 8] 常见设置: - 2×2滤波器,步长2(最常用) - 3×3滤波器,步长2(较少用)

六、全连接层(Fully Connected Layer):最终分类

这一章要建立的基础:理解全连接层在CNN中的作用

核心问题:全连接层在CNN中起什么作用?


[!NOTE]
📝 关键点总结:全连接层(FC Layer)在CNN的末尾,将卷积层和池化层提取的特征映射到最终的类别分数。全连接层的神经元连接到整个输入特征图,进行全局决策。

6.1 全连接层的作用(Role of Fully Connected Layer):全局决策

概念的本质

全连接层(Fully Connected Layer)在CNN的末尾,将经过卷积和池化处理的特征图展平成一维向量,然后通过全连接层映射到类别分数。全连接层进行全局决策,综合所有特征信息进行最终分类。

图解说明

特征图
7×7×512
展平
25088×1
全连接层1
4096
全连接层2
4096
输出层
1000类

💡说明

  • 展平:将特征图展平成一维向量
  • 全连接层:进行全局特征组合
  • 输出层:映射到类别分数
  • 作用:综合所有特征进行最终分类

类比理解

想象你在做决策。全连接层就像:

  • 特征图:收集到的各种证据(局部特征)
  • 展平:将所有证据整理成清单
  • 全连接层:综合考虑所有证据,做出决策
  • 输出:最终的判断结果(类别分数)

实际例子

全连接层的例子: 输入:7×7×512特征图 - 空间尺寸:7×7 = 49 - 深度:512 - 总元素:7×7×512 = 25,088 展平: - 25,088×1向量 全连接层1: - 输入:25,088 - 输出:4,096 - 参数:25,088 × 4,096 + 4,096 ≈ 102M 全连接层2: - 输入:4,096 - 输出:4,096 - 参数:4,096 × 4,096 + 4,096 ≈ 16M 输出层: - 输入:4,096 - 输出:1,000(ImageNet类别数) - 参数:4,096 × 1,000 + 1,000 ≈ 4M 总参数:约122M(大部分在全连接层) 现代趋势: - 减少或去除全连接层 - 使用全局平均池化(Global Average Pooling) - 减少参数数量

七、完整的CNN架构(Complete CNN Architecture):组合所有层

这一章要建立的基础:理解如何将卷积层、池化层和全连接层组合成完整的CNN

核心问题:完整的CNN架构是什么样的?


[!NOTE]
📝 关键点总结:完整的CNN由多个卷积层、池化层和全连接层组成。典型的架构是:[(CONV-RELU)×N-POOL?]×M-(FC-RELU)×K-SOFTMAX。现代趋势是使用更小的滤波器和更深的网络,减少或去除池化层和全连接层。

7.1 典型的CNN架构(Typical CNN Architecture):层叠结构

概念的本质

典型的CNN架构由多个卷积层、池化层和全连接层组成。卷积层提取特征,池化层降低维度,全连接层进行最终分类。通常的模式是:多个卷积层后跟一个池化层,重复多次,最后是几个全连接层和Softmax分类器。

图解说明

输入图像
32×32×3
CONV+ReLU
32×32×6
CONV+ReLU
28×28×10
POOL
14×14×10
CONV+ReLU
10×10×16
POOL
5×5×16
展平
400×1
FC+ReLU
120
FC+ReLU
84
FC
10类

💡说明

  • 卷积层:提取局部特征
  • 池化层:降低空间维度
  • 全连接层:进行全局决策
  • 激活函数:通常使用ReLU
  • 输出:类别分数

类比理解

想象你在分析一幅画。CNN架构就像:

  • 卷积层:用放大镜看局部细节(边缘、纹理)
  • 池化层:缩小视野,只看主要特征
  • 更多卷积层:用更大的放大镜看更抽象的特征
  • 全连接层:综合考虑所有特征,做出最终判断

实际例子

典型的CNN架构(LeNet风格): 输入:32×32×3图像 第1组: - CONV: 6个5×5滤波器 → 28×28×6 - ReLU激活 - POOL: 2×2最大池化 → 14×14×6 第2组: - CONV: 16个5×5滤波器 → 10×10×16 - ReLU激活 - POOL: 2×2最大池化 → 5×5×16 第3组: - 展平:5×5×16 = 400 - FC: 400 → 120 - ReLU激活 - FC: 120 → 84 - ReLU激活 - FC: 84 → 10(类别数) 现代趋势: - 更小的滤波器(3×3而不是5×5) - 更深的网络(更多层) - 减少池化层 - 使用全局平均池化替代全连接层

7.2 1×1卷积(1×1 Convolution):深度方向的卷积

概念的本质

1×1卷积(1×1 Convolution)是滤波器大小为1×1的卷积操作。虽然空间维度为1,但它在深度方向上进行卷积,可以改变特征图的深度。1×1卷积常用于降维或升维,也可以看作是一个全连接层在空间上的应用。

图解说明

56×56×64
1×1 CONV
32个滤波器
56×56×32
深度减半

💡说明

  • 1×1卷积:滤波器大小为1×1,在深度方向卷积
  • 作用:改变特征图的深度(降维或升维)
  • 计算:对每个空间位置,在64个通道上进行64维点积
  • 应用:降维、升维、非线性变换

类比理解

想象你在看一幅彩色画。1×1卷积就像:

  • 输入:56×56×64(64种颜色通道)
  • 1×1卷积:在每个位置,将64种颜色混合成32种颜色
  • 输出:56×56×32(深度减半,但空间尺寸不变)

实际例子

1×1卷积的例子: 输入:56×56×64特征图 1×1卷积:32个滤波器 计算: - 每个滤波器大小:1×1×64 - 对每个空间位置(56×56 = 3,136个位置) - 计算64维点积(64个通道的点积) - 得到32个输出值(32个滤波器) 结果: - 输出:56×56×32 - 空间尺寸不变(56×56) - 深度减半(64 → 32) 应用: - 降维:减少计算量 - 升维:增加特征表达能力 - 非线性变换:通过ReLU引入非线性 优势: - 参数少:32 × (1×1×64 + 1) = 2,080个参数 - 计算快:只改变深度,不改变空间尺寸

📝 本章总结

核心要点回顾

  1. 卷积神经网络的应用

    • 在图像分类、检测、分割、生成等任务中广泛应用
    • 是现代计算机视觉的基础技术
  2. 全连接层的局限性

    • 展平操作丢失空间结构信息
    • 无法利用图像的局部特征
  3. 卷积层

    • 通过滤波器滑动提取局部特征
    • 保留图像的空间结构
    • 参数共享,参数效率高
  4. 空间维度计算

    • 输出尺寸 = (输入尺寸 - 滤波器大小 + 2×填充) / 步长 + 1
    • 步长控制滑动的步距
    • 填充控制边界处理
  5. 池化层

    • 通过下采样降低空间维度
    • 减少参数数量和计算量
    • 提供平移不变性
  6. 全连接层

    • 在CNN末尾进行全局决策
    • 将特征映射到类别分数

知识地图

输入图像
卷积层
提取特征
激活函数
ReLU
池化层
降维
更多卷积层
抽象特征
全连接层
分类
输出类别
空间维度计算
参数数量计算
1×1卷积

关键决策点

  • 滤波器大小:通常使用3×3或5×5,现代趋势是更小的滤波器
  • 步长:卷积层通常步长=1,池化层通常步长=2
  • 填充:对于F × F F \times FF×F滤波器,通常填充( F − 1 ) / 2 (F-1)/2(F1)/2以保持尺寸
  • 滤波器数量:通常使用2的幂次(如32、64、128、256)
  • 池化:最大池化最常用,2×2滤波器、步长2
  • 架构选择:根据任务和数据选择网络深度和宽度

📚 延伸阅读

推荐资源

  1. 经典论文

    • LeNet (1998):最早的CNN架构
    • AlexNet (2012):深度学习复兴的标志
    • VGG (2014):展示深度的重要性
    • ResNet (2015):残差连接,训练更深的网络
  2. 实践项目

    • 使用PyTorch或Keras实现简单的CNN
    • 在CIFAR-10数据集上训练CNN
    • 可视化卷积层的激活映射
  3. 深入理解

    • 理解卷积操作的数学原理
    • 学习反向传播在CNN中的应用
    • 探索现代CNN架构(ResNet、DenseNet等)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 18:46:11

Cesium快速入门23:cesium着色器自带函数与变量

这节课,我们真正动手“写”材质——在 Fabric 里直接撸 GLSL 源码,让条纹动起来,为后面做扫描、雷达、飞线打好底子。 先弄清两个结构,再写两行代码,你就能让像素听你指挥。 一、两个“工具箱”先认全 https://cesium…

作者头像 李华
网站建设 2026/2/19 12:53:14

Podcast Bulk Downloader:播客批量下载终极指南

Podcast Bulk Downloader:播客批量下载终极指南 【免费下载链接】PodcastBulkDownloader Simple software for downloading podcasts 项目地址: https://gitcode.com/gh_mirrors/po/PodcastBulkDownloader 想要轻松实现播客批量下载,随时随地享受…

作者头像 李华
网站建设 2026/4/1 7:51:30

纪念币预约自动化工具使用指南:告别手动抢购的烦恼

还在为纪念币预约手忙脚乱而烦恼吗?每次预约时都要反复刷新页面、手动填写信息、紧张地输入验证码?现在,一款智能的纪念币预约自动化工具将彻底改变你的预约体验,让你的成功率提升数倍! 【免费下载链接】auto_commemor…

作者头像 李华
网站建设 2026/4/2 17:45:18

LobeChat日志追踪与调试技巧:快速定位异常请求

LobeChat日志追踪与调试技巧:快速定位异常请求 在构建现代 AI 聊天应用的实践中,一个看似流畅的对话背后,往往隐藏着复杂的调用链路——从前端交互、路由分发,到模型推理、插件执行,任何一环出错都可能导致用户看到“卡…

作者头像 李华
网站建设 2026/4/1 11:27:32

.NET进阶——深入理解线程(1)同步异步与单线程多线程的区分

今天我们来详细介绍一下多线程,多线程是.NET中非常重要的知识点,需要完全掌握。 一、什么是多线程? 在了解线程之前,我们需要知道什么是进程,所谓进程,就是指操作系统中运行的程序,比如我们自己…

作者头像 李华
网站建设 2026/4/1 10:05:39

食品工业生产线的安全防线:X光异物检测机的作用与挑选要点

在食品工业的生产线上,食品安全一直都是绝不能突破的红线,在此之中,异物混入是致使产品被召回以及品牌声誉遭受损害的主要风险之一,X光异物检测机作为一种效率高的非破坏性检测技术,已然变成保障最终产品安全的关键防线…

作者头像 李华