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

2025博客之星年度评选已开启 10w+人浏览 1.1k人参与

文章目录

📌 适合对象:计算机视觉初学者、深度学习入门者
⏱️ 预计阅读时间: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 3 32×32×3的图像展平成 3072 × 1 3072 \times 1 3072×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 3 5×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 3 5×5×3的滤波器,它与图像中 5 × 5 × 3 5 \times 5 \times 3 5×5×3的区域进行点积运算,得到一个标量值。这个值表示该局部区域与滤波器的匹配程度。

图解说明

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

💡 说明

  • 点积:对应元素相乘后求和
  • 维度 5 × 5 × 3 = 75 5 \times 5 \times 3 = 75 5×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 F F×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 K K F × F × D F \times F \times D F×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 D F×F×D个权重 + 1 1 1个偏置
  • 总参数 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 F F×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等)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值