步长 Stride 是什么?卷积窗口每次移动几格
步长(Stride)是指操作窗口在数据上每次移动的距离,是图像处理和卷积神经网络(CNN)中常用的术语。在对图像进行卷积、池化、裁剪或特征提取等操作时,通常会用一个小窗口在图像上滑动,步长就决定了这个窗口每一步向右(或向下)挪动多少个像素。
在卷积中怎么理解
卷积神经网络中的卷积层,用一个小的卷积核,比如 3×3 的窗口,在输入图像上滑动,每到一个位置,就计算窗口内像素与卷积核的加权和,得到输出特征图上的一个值。如果步长为 1,卷积核每次只移动一个像素,会覆盖图像上的每一个位置,输出的特征图和输入差不多大。如果步长为 2,卷积核每次跳过一个像素,移动两格,输出的特征图在长和宽上都大约缩小为原来的一半,像素数量减少到约四分之一。
输出特征图的大小,可以用一个公式计算:等于输入尺寸减去卷积核尺寸,再加上两倍的填充(在图像边缘补的零的圈数),除以步长,最后再加 1。这个公式在设计网络结构时经常用到。
步长的作用
下采样:增大步长是缩小特征图尺寸、降低分辨率的一种方式。在卷积神经网络中,随着层数加深,通常需要逐步缩小特征图,同时增加通道数,让网络从关注局部细节逐渐过渡到关注整体结构。步长大于 1 的卷积可以代替池化层完成这一任务,ResNet 等很多网络就采用了这种做法。减少计算量:特征图越小,后续层的计算量越少,模型运行得越快。扩大感受野:步长越大,深层网络中每个点对应原始图像的范围扩大得越快。
代价是信息损失:步长太大,窗口会跳过一些位置,可能遗漏细节,尤其是对于需要精细定位的任务。所以步长的设置需要在效率和信息保留之间权衡。
在其他场景中
步长的概念也出现在很多其他地方。处理超大图像时,常把它切成小块分别处理,如果切块的窗口大小是 512 像素、步长是 256 像素,相邻的块之间就会有一半的重叠,避免物体刚好被切断。视觉 Transformer 把图像切成一个个小块(patch),切块的步长通常等于块的大小。在处理时间序列和音频时,滑动窗口的步长同样决定了相邻两帧之间的重叠程度。