2. 卷积神经网络基础
各位同学,咱们今天聊聊卷积神经网络(CNN)的基石。说实话,这东西我刚开始学的时候也觉得抽象,但后来做项目多了才发现,理解透这几个基础模块,比背一百个网络结构都管用。
先看一张整体结构图,帮你建立直觉:
1.1 卷积层——特征提取的"扫描仪"
卷积层是CNN的灵魂。说白了,它就是用一个小窗口(卷积核)在图像上滑动,每次做一次点积运算。我习惯把卷积核想象成一个"特征探测器"——有的核负责检测边缘,有的检测纹理,有的检测颜色变化。
核心公式:
输出特征图尺寸 = (输入尺寸 - 卷积核尺寸 + 2×填充) / 步长 + 1
举个例子:输入224×224的图像,用3×3卷积核,步长1,填充1,输出还是224×224。
我在项目中遇到过一个问题:刚开始做图像分类时,我直接用了7×7的大卷积核,结果模型参数爆炸,训练慢得要命。后来换成3×3堆叠,效果反而更好。嗯,这里要注意——小卷积核堆叠比大卷积核更高效,这是VGG网络给我的启发。
1.2 池化层——降维的艺术
池化层干的事很简单:压缩特征图。你想想看,一张224×224的图像经过卷积后还是224×224,计算量太大了。池化层就像给特征图"瘦身"。
常用的有两种:
- 最大池化(Max Pooling):取窗口内的最大值。我一般用2×2窗口,步长2,这样尺寸直接减半。
- 平均池化(Average Pooling):取窗口内的平均值。适合保留整体信息。
我的经验:分类任务用最大池化更多,因为它能保留最显著的特征。但如果你做图像修复或超分辨率,平均池化可能更合适。
为什么会这样?因为最大池化对纹理和边缘更敏感,而平均池化会"抹平"细节。我曾经在一个人脸识别项目中,因为用了平均池化导致识别率下降3个点,换成最大池化后立刻回升。
1.3 全连接层——决策者
全连接层(FC)就是传统的神经网络层。每个神经元和上一层的所有神经元相连。它的作用是把卷积和池化提取到的"局部特征"整合成"全局特征",然后做分类或回归。
但说实话,全连接层有个大问题——参数太多。一个1024维的输入接一个1024维的FC层,光这一层就有100多万个参数。所以现在很多网络(比如MobileNet)都用全局平均池化代替FC层,参数少得多。
避坑指南:我曾经在训练一个模型时,FC层用了三个隐藏层,每个1024维,结果过拟合得一塌糊涂。后来减少到一层512维,加上Dropout,效果反而更好。记住:全连接层不是越深越好。
1.4 感受野——神经元在看多大范围?
感受野这个概念,说白了就是"输出特征图上的一个点,对应输入图像上的多大区域"。你想想看,一个3×3的卷积核,感受野就是3×3。但如果堆叠两个3×3卷积,感受野就变成了5×5。
为什么重要?因为感受野决定了网络能"看到"多大的上下文。做语义分割时,感受野太小,大物体就分不完整;感受野太大,小物体又容易被忽略。
| 卷积层数 | 卷积核大小 | 感受野 | 参数量 |
|---|---|---|---|
| 1层 | 7×7 | 7×7 | 49C² |
| 3层 | 3×3 | 7×7 | 27C² |
看到没?同样的感受野,3层3×3卷积的参数量只有1层7×7的一半多。这就是为什么现代网络偏爱小卷积核堆叠。
1.5 参数共享——CNN的"偷懒"智慧
参数共享是CNN最巧妙的设计之一。什么意思?就是一个卷积核在整个图像上滑动时,它的权重是不变的。你想想看,如果每个位置都用不同的权重,那参数量就爆炸了。
举个例子:一张224×224的RGB图像,如果用3×3卷积核,输出64个通道。如果不共享参数,参数量是:224×224×3×3×3×64 ≈ 8.6亿。共享参数后:3×3×3×64 = 1728。差了50万倍!
核心思想:图像中的特征(比如边缘、纹理)在空间上是平移不变的。一个边缘检测器在左上角能用,在右下角也能用。所以没必要每个位置都学一套参数。
我个人觉得,参数共享是CNN能成功的关键之一。它让网络在参数量可控的情况下,学到空间不变的特征。我在做目标检测时,经常利用这个特性——用一个卷积核检测"猫耳朵",不管猫在图像左边还是右边,都能检测到。
1.6 小结
好了,这一章的内容就这些。总结一下:
- 卷积层:用卷积核提取局部特征,参数共享让计算高效
- 池化层:降维,减少计算量,防止过拟合
- 全连接层:整合全局特征,做最终决策
- 感受野:决定网络能看到多大范围,小卷积核堆叠更高效
- 参数共享:CNN的"偷懒"智慧,让模型轻量化
这些基础概念,你理解透了,后面学MobileViT、多尺度特征融合就会轻松很多。记住,别急着跑,先把地基打牢。
可可精品资料库