深度学习篇---卷积
卷积概念:
要理解三通道 RGB 图像的卷积操作,我们可以分步骤拆解,用生活化的例子类比:
第一步:先明确 “三通道 RGB 图像” 是什么?
一张彩色照片(比如手机拍的风景照)就是典型的三通道 RGB 图像。它的本质是三个 “灰度图叠在一起”:
- 第一个通道(R 通道):记录了每个像素 “红色的亮度”(数值越高,这个位置红色越浓);
- 第二个通道(G 通道):记录了每个像素 “绿色的亮度”;
- 第三个通道(B 通道):记录了每个像素 “蓝色的亮度”。
比如一朵红花,在 R 通道里它的位置是亮的(数值高),G 和 B 通道里可能较暗(数值低);绿叶则在 G 通道里更亮。
第二步:什么是 “卷积操作”?
卷积的核心是 **“用一个小窗口扫过图像,做局部计算”**,目的是提取图像的特征(比如边缘、纹理、颜色变化等)。
这个 “小窗口” 叫卷积核(也叫过滤器),它是一个小型矩阵(比如 3x3 的格子)。操作过程类似:
- 拿着这个小窗口在图像上 “滑动”(从左到右、从上到下);
- 每滑到一个位置,就把窗口里的每个数值和图像对应位置的像素值相乘,再把所有乘积加起来,得到一个新数值;
- 这个新数值就是 “输出图像” 上对应位置的像素值。
第三步:三通道图像的卷积有什么不同?
因为输入是三通道(R、G、B),所以卷积核也得 “配套”—— 它也有 3 个通道(对应 R、G、B),形状可以理解为 “3 层小窗口叠在一起”(比如 3x3x3:每层是 3x3 的矩阵,共 3 层)。
具体计算过程像 “三层楼的分别计算再汇总”:
- 分通道计算:卷积核的 R 通道小窗口,只和输入图像的 R 通道对应区域计算(相乘求和),得到一个中间结果 A;
卷积核的 G 通道小窗口,只和输入图像的 G 通道对应区域计算,得到中间结果 B;
卷积核的 B 通道小窗口,只和输入图像的 B 通道对应区域计算,得到中间结果 C; - 汇总结果:把 A、B、C 三个结果加起来,得到的总和就是 “输出特征图” 上这个位置的像素值。
举个直观的例子:
假设我们用一个 “检测红色边缘” 的卷积核:
- 它的 R 通道窗口是 “左亮右暗”(能捕捉红色的明暗变化);
- G 和 B 通道窗口全是 0(不关心绿、蓝的变化)。
当这个卷积核滑过一朵红花时:
- R 通道计算会捕捉到花瓣边缘的红色明暗差异(得到 A);
- G 和 B 通道计算结果都是 0(B=0,C=0);
- 输出结果就是 A,也就是 “红花边缘” 的特征。
核心作用:
三通道卷积能同时 “看” 到红、绿、蓝三个颜色通道的局部信息,从而提取更丰富的特征(比如 “红绿色交界处的边缘”“蓝黄混合的纹理” 等)。这也是为什么卷积神经网络(CNN)能处理彩色图像并识别物体 —— 它靠这种操作一步步从颜色、边缘到复杂形状,层层提取特征。
总结:三通道 RGB 图像的卷积,就是用一个 3 通道的 “小窗口”,分别扫过图像的 R、G、B 三个通道,把每个通道的局部计算结果相加,最终得到包含多颜色特征的输出。
卷积核与步长的选择:
选择合适的卷积核大小和步幅,核心是在特征提取能力、计算效率和输出特征图尺寸之间找到平衡。不同任务(如图像分类、目标检测、语义分割)和网络层(浅层 / 深层)的需求不同,选择逻辑也有差异。下面用通俗的方式拆解具体思路:
一、卷积核大小的选择:感受野与计算成本的权衡
卷积核的大小(如 3x3、5x5)决定了它一次能 “看到” 的图像区域大小(即感受野),同时直接影响计算量(核越大,参数和计算量越多)。常见选择和适用场景如下:
1. 1x1 卷积核:“轻量工具人”
- 作用:不改变感受野(只看单个像素),主要用于跨通道特征融合或降维 / 升维。
例如:输入是 64 通道的特征图,用 1x1 卷积核(64→32)可以将通道数压缩到 32,减少后续计算量;或用 1x1 卷积核(64→128)增加通道数,增强特征表达。 - 适用场景:
- 网络中间层压缩通道(如 ResNet、MobileNet 中常用);
- 配合大卷积核使用(如 Inception 模块中,先用 1x1 降维再用 3x3,减少计算)。
2. 3x3 卷积核:“性价比之王”
- 感受野:能覆盖 3x3 的局部区域,适合捕捉边缘、纹理等基础特征。
- 优势:计算量小(3x3 的参数是 9,5x5 是 25,前者仅为后者的 1/3 左右),且多个 3x3 卷积叠加可等效更大的感受野(如 2 个 3x3 叠加≈1 个 5x5 的感受野,3 个叠加≈7x7),但计算量更低(2×9=18 < 25;3×9=27 < 49)。
- 适用场景:
- 网络的绝大多数层(尤其是深层),是 CNN 中最常用的核大小(如 VGG、ResNet 几乎全用 3x3);
- 需平衡特征提取能力和计算效率时。
3. 5x5 或 7x7 卷积核:“大视野工具”
- 感受野:覆盖更大区域,适合捕捉较大的局部结构(如小目标的整体轮廓、纹理块)。
- 代价:参数和计算量显著增加(5x5 是 3x3 的 2.7 倍,7x7 是 5.4 倍)。
- 适用场景:
- 网络的浅层(输入图像尺寸较大时),例如检测图像中较大的基础结构(如早期的 AlexNet 用 11x11、7x7,后来因计算成本被 3x3 替代);
- 特殊任务需要直接捕捉大尺度特征(如小目标检测中,避免多次叠加 3x3 导致的特征稀释)。
总结:卷积核大小的经验法则
- 优先用 3x3(性价比最高),避免盲目用大核;
- 需大感受野时,用 “多个 3x3 叠加” 替代 “单个大核”(如 3 个 3x3≈7x7 感受野,计算量更少);
- 1x1 仅用于通道调整,不单独用于特征提取;
- 输入图像尺寸大(如 224x224 以上),浅层可尝试 5x5;尺寸小(如 64x64 以下),用 3x3 足够。
二、步幅(Stride)的选择:控制输出尺寸与 “压缩” 程度
步幅是卷积核每次滑动的像素数(默认 1),直接影响输出特征图的尺寸和 “压缩” 效果:
- 步幅 = 1:滑动时不跳过像素,输出尺寸较大(配合 padding 可保持与输入同尺寸);
- 步幅 > 1(如 2):每次滑动跳过像素,输出尺寸缩小(相当于 “下采样”),计算量减少。
选择逻辑:根据 “是否需要压缩特征图” 决定
步幅 = 1:
- 适用场景:希望保留更多细节(如网络浅层提取边缘、纹理时),或需要保持特征图尺寸(如语义分割,需输出与输入同尺寸的掩码)。
- 注意:此时通常配合padding(填充)使用,避免输出尺寸过小(如 3x3 核 + 步幅 1+padding=1,可保持输入输出尺寸一致)。
步幅 = 2(或更大):
- 作用:主动缩小特征图尺寸(输出尺寸≈输入尺寸 / 步幅),减少后续计算量,同时扩大感受野(步幅越大,每次 “看” 的范围间接越大)。
- 适用场景:
- 网络深层(特征图已包含足够信息,无需保留大尺寸);
- 需快速压缩尺寸(如输入图像过大时,用步幅 2 替代池化层,减少信息丢失);
- 目标检测中,部分 backbone 用步幅 2 实现多尺度特征输出(如 FPN 的不同层级)。
- 注意:步幅不宜过大(如 > 2),否则会丢失过多局部信息(比如步幅 = 3,可能跳过相邻像素的重要关联)。
三、综合权衡:卷积核与步幅的搭配原则
浅层网络(提取细节):
- 核大小:3x3(优先)或 5x5(输入尺寸大时);
- 步幅:1(配合 padding 保持尺寸,保留细节)。
深层网络(提取抽象特征):
- 核大小:3x3(叠加使用,扩大感受野);
- 步幅:1(继续保留特征)或 2(适当压缩,减少计算)。
需要降维 / 压缩时:
- 优先用 “步幅 = 2 + 3x3 核”,而非 “大步幅 + 大核”(避免信息丢失);
- 或用 “步幅 = 1 + 3x3 核 + 池化层”(池化单独负责压缩,更灵活)。
计算资源有限时:
- 核大小选 3x3(而非 5x5),步幅可适当增大(如 2),减少参数和计算量。
举个例子:ResNet 的经典搭配
ResNet 中几乎全用 3x3 卷积核,步幅选择遵循:
- 浅层(如 conv1):7x7 核 + 步幅 2(快速压缩大尺寸输入,如 224x224→112x112);
- 中间层:3x3 核 + 步幅 1(配合 padding 保持尺寸,堆叠提取特征);
- 下采样层(如每个残差块的第一个卷积):3x3 核 + 步幅 2(将尺寸压缩一半,如 56x56→28x28)。
这种搭配既保证了特征提取能力,又控制了计算量,是工业界的成熟方案。
总之,选择的核心是:小核(3x3)为主,步幅 1 保细节,步幅 2 做压缩,根据任务需求(是否需保留尺寸、计算资源多少)灵活调整。