文章目录
- 📚 学习路线图
- 本文内容一览(快速理解)
- 一、卷积神经网络的应用(ConvNets Applications):无处不在的深度学习
- 二、全连接层的局限性(Limitations of Fully Connected Layers):丢失空间结构
- 三、卷积层(Convolutional Layer):保留空间结构的层
- 四、空间维度计算(Spatial Dimensions):理解步长和填充
- 五、池化层(Pooling Layer):降低空间维度
- 六、全连接层(Fully Connected Layer):最终分类
- 七、完整的CNN架构(Complete CNN Architecture):组合所有层
- 📝 本章总结
- 📚 延伸阅读
📌 适合对象:计算机视觉初学者、深度学习入门者
⏱️ 预计阅读时间:50-60分钟
🎯 学习目标:理解卷积神经网络的基本原理,掌握卷积层、池化层和全连接层的作用,学会计算卷积层的输出尺寸和参数数量
📚 学习路线图
本文内容一览(快速理解)
- 卷积神经网络的应用(ConvNets Applications):卷积神经网络在图像分类、检测、分割等任务中的广泛应用
- 全连接层的局限性(Limitations of Fully Connected Layers):全连接层会丢失图像的空间结构信息
- 卷积层(Convolutional Layer):通过卷积操作保留空间结构,使用滤波器提取局部特征
- 卷积操作(Convolution Operation):滤波器在图像上滑动,计算点积得到激活映射
- 空间维度计算(Spatial Dimensions):理解步长、填充对输出尺寸的影响
- 池化层(Pooling Layer):通过池化操作降低空间维度,减少参数数量
- 全连接层(Fully Connected Layer):在CNN末尾进行最终分类
一、卷积神经网络的应用(ConvNets Applications):无处不在的深度学习
这一章要建立的基础:了解卷积神经网络在计算机视觉中的广泛应用
核心问题:卷积神经网络在哪些任务中取得了成功?
[!NOTE]
📝 关键点总结:卷积神经网络(ConvNets)在图像分类、目标检测、语义分割、图像生成、图像描述等任务中都有广泛应用,是现代计算机视觉的基础。
1.1 ConvNets的广泛应用(ConvNets are Everywhere):从分类到生成
概念的本质:
卷积神经网络已经成为计算机视觉领域的核心技术,在多个任务中都取得了突破性的成果。从图像分类到目标检测,从语义分割到图像生成,ConvNets无处不在。
图解说明:
💡 说明:
- 图像分类:识别图像中的物体类别(如猫、狗、汽车)
- 目标检测:不仅识别物体,还定位物体的位置
- 语义分割:对图像中的每个像素进行分类
- 图像生成:生成新的图像
- 图像描述:用自然语言描述图像内容
- 风格迁移:将一幅画的风格应用到另一幅图像上
类比理解:
想象卷积神经网络就像一个"万能工具箱":
- 图像分类:就像识别"这是什么"
- 目标检测:就像不仅知道"是什么",还知道"在哪里"
- 语义分割:就像给图像的每个部分贴上标签
- 图像生成:就像"画一幅画"
- 图像描述:就像"看图说话"
- 风格迁移:就像"用梵高的风格画一幅照片"
实际例子:
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个像素
- 像素(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)在输入图像上滑动,在每个位置计算滤波器与图像局部区域的点积,生成激活映射。多个滤波器产生多个激活映射,堆叠在一起形成新的特征图。
图解说明:
💡 说明:
- 滤波器:小的权重矩阵(如 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 = 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个等)。每个滤波器提取不同的特征(如边缘、角点、纹理等),产生一个激活映射。所有激活映射堆叠在一起,形成新的特征图。
图解说明:
💡 说明:
- 多个滤波器:每个滤波器学习不同的特征
- 激活映射:每个滤波器产生一个激活映射
- 特征图:所有激活映射堆叠成新的特征图
- 深度:特征图的深度等于滤波器的数量
类比理解:
想象你在用多个不同的"探测器"扫描图像。多个滤波器就像:
- 滤波器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:图像的空间维度(如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个像素。步长越大,输出尺寸越小,计算量也越小。
图解说明:
💡 说明:
- 步长=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的像素。
图解说明:
💡 说明:
- 无填充(P=0):输出尺寸会缩小
- 填充(P>0):在边界添加零像素,可以保持或增大输出尺寸
- 常见设置:对于 F × F F \times F F×F的滤波器,通常填充 ( F − 1 ) / 2 (F-1)/2 (F−1)/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 \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)的最大值。池化层可以减少参数数量、计算量和内存占用,同时提供一定的平移不变性。
图解说明:
💡 说明:
- 最大池化:取局部区域的最大值
- 平均池化:取局部区域的平均值(较少用)
- 常见设置: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),对每个区域取最大值作为输出。最大池化能够保留最显著的特征,同时降低空间维度。
图解说明:
💡 说明:
- 区域划分:将输入分成不重叠的区域
- 最大值:每个区域取最大值
- 步长:通常等于滤波器大小(如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特征图
- 空间尺寸: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分类器。
图解说明:
💡 说明:
- 卷积层:提取局部特征
- 池化层:降低空间维度
- 全连接层:进行全局决策
- 激活函数:通常使用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卷积常用于降维或升维,也可以看作是一个全连接层在空间上的应用。
图解说明:
💡 说明:
- 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个参数
- 计算快:只改变深度,不改变空间尺寸
📝 本章总结
核心要点回顾:
-
卷积神经网络的应用:
- 在图像分类、检测、分割、生成等任务中广泛应用
- 是现代计算机视觉的基础技术
-
全连接层的局限性:
- 展平操作丢失空间结构信息
- 无法利用图像的局部特征
-
卷积层:
- 通过滤波器滑动提取局部特征
- 保留图像的空间结构
- 参数共享,参数效率高
-
空间维度计算:
- 输出尺寸 = (输入尺寸 - 滤波器大小 + 2×填充) / 步长 + 1
- 步长控制滑动的步距
- 填充控制边界处理
-
池化层:
- 通过下采样降低空间维度
- 减少参数数量和计算量
- 提供平移不变性
-
全连接层:
- 在CNN末尾进行全局决策
- 将特征映射到类别分数
知识地图:
关键决策点:
- 滤波器大小:通常使用3×3或5×5,现代趋势是更小的滤波器
- 步长:卷积层通常步长=1,池化层通常步长=2
- 填充:对于 F × F F \times F F×F滤波器,通常填充 ( F − 1 ) / 2 (F-1)/2 (F−1)/2以保持尺寸
- 滤波器数量:通常使用2的幂次(如32、64、128、256)
- 池化:最大池化最常用,2×2滤波器、步长2
- 架构选择:根据任务和数据选择网络深度和宽度
📚 延伸阅读
推荐资源
-
经典论文:
- LeNet (1998):最早的CNN架构
- AlexNet (2012):深度学习复兴的标志
- VGG (2014):展示深度的重要性
- ResNet (2015):残差连接,训练更深的网络
-
实践项目:
- 使用PyTorch或Keras实现简单的CNN
- 在CIFAR-10数据集上训练CNN
- 可视化卷积层的激活映射
-
深入理解:
- 理解卷积操作的数学原理
- 学习反向传播在CNN中的应用
- 探索现代CNN架构(ResNet、DenseNet等)
978

被折叠的 条评论
为什么被折叠?



