第09讲 | CNN基础:局部感受野、卷积核、Padding与Stride

📅 2026/7/20 20:31:37
第09讲 | CNN基础:局部感受野、卷积核、Padding与Stride
第09讲 | CNN基础局部感受野、卷积核、Padding与Stride购买相关资料后畅享一对一答疑畅享超多免费持续更新且可大幅度提升文章档次的纯干货工具素材来源B站视频《第09讲〈CNN基础局部感受野、卷积核、Padding与Stride〉》UP主Ai学术叫叫兽。本文为学习笔记式原创整理适合科研小白按步骤复习和实操。人看一张图不会把所有像素当成一根超长电话线从头读到尾。你看一只猫通常先看到耳朵边缘再看到眼睛附近的纹理最后才拼成整张脸。CNN 的核心思想就是先看局部再逐步组合成整体。这一讲只抓 4 个关键点为什么图像不适合直接用全连接硬怼。局部感受野和卷积核到底是什么关系。Padding 为什么能保住边缘信息。Stride 为什么会影响速度和分辨率。一、先看大图CNN 在做什么方式输入方式问题全连接网络先把图像展平参数爆炸空间结构丢失CNN用小窗口扫描局部区域更适合图像、边缘、纹理和局部模式图 1全连接和卷积的差别全连接整张图拉平 - 直接学习 问题像素顺序被打散参数特别多 卷积小窗口滑动 - 局部提特征 - 再往后组合 优势保留空间结构共享参数你可以把 CNN 理解成一个“局部特征提取器”边缘 - 纹理 - 局部部件 - 更复杂的目标这也是为什么后面学 YOLO 时Backbone 不是乱堆模块而是在一步一步提取更有用的视觉特征。二、局部感受野神经元只看一小块局部感受野指的是一个神经元只连接输入图像的一部分区域而不是整张图。如果输入是5x5的小图卷积核是3x3那么每次只看3x3的局部块输入图像 ┌─────┐ │局部块│ - 卷积核只处理这一小块 └─────┘这样做有 3 个好处好处说明更符合图像结构图像里的边缘、角点、纹理本来就是局部的参数更少不需要每个输出神经元连整张图可迁移性更强同一个卷积核能在不同位置重复使用三、卷积核真正干活的小窗口卷积核就是在图像上滑动的“小窗口”也叫 filter。它本质上做两件事在一个局部区域里做加权求和。把这个结果写到输出特征图的一个位置上。简化公式输出 输入局部块 × 卷积核权重 偏置更完整一点y(i, j) Σ x(iu, jv) · w(u, v) b这里最关键的是权重共享同一个卷积核参数会在整张图上重复使用。这让 CNN 比全连接网络省很多参数。也让“同一种边缘”能在不同位置被检测出来。一个直观例子假设你用一个3x3卷积核去扫图像过程含义取局部块只看当前3x3区域乘以权重判断这块像不像边缘、纹理或局部形状滑动到下一格继续在别的位置重复同样操作这就是卷积“会找模式”的原因。四、Padding给图像加一圈安全边不加 Padding 时卷积到边缘会越来越小。比如输入5x5卷积核3x3stride1padding0输出尺寸 3x3边缘信息会被快速压缩掉。Padding 的作用就是在图像四周补零让卷积核也能照顾到边缘。常见 Padding 方式设置作用padding0不补边输出更小padding13x3 卷积常用尺寸更容易保持不变same尽量保持输入输出尺寸一致最常见的记法当kernel_size3且stride1时padding1 - 输入输出尺寸基本不变这在 CNN 里非常常见因为它能让你“多看几层”同时不让特征图缩得太快。五、Stride卷积窗口每次走多远Stride 就是卷积核每次滑动的步长。Stride结果stride1看得细输出更大stride2跳着看输出减半左右stride2压缩更狠信息损失更大但更快你可以把它理解成Stride 小 - 看得细 Stride 大 - 看得快典型取舍需求建议想保留更多细节用小 stride想降低分辨率、加快计算用大 stride想做下采样stride2很常见六、输出尺寸怎么计算当 dilation1 时卷积输出尺寸公式是H_out floor((H_in 2P - K) / S) 1 W_out floor((W_in 2P - K) / S) 1其中符号含义H_in, W_in输入高和宽PpaddingKkernel_sizeSstride直接拿例子算输入卷积核PaddingStride输出5x53x3013x35x53x3115x55x53x3123x332x323x31216x16这张表是你调 CNN 时最该背熟的东西之一。七、科研小白实操跑一遍形状变化先别上来就堆很多层。先看懂一层卷积到底把 shape 改成什么。importtorchfromtorchimportnn xtorch.randn(2,3,32,32)# [B, C, H, W]stemnn.Sequential(nn.Conv2d(3,8,kernel_size3,stride1,padding1),nn.ReLU(),nn.Conv2d(8,16,kernel_size3,stride2,padding1),nn.ReLU(),nn.MaxPool2d(kernel_size2,stride2))ystem(x)print(input :,x.shape)print(output:,y.shape)这段代码会发生什么层参数输出 shape输入3x32x322, 3, 32, 32Conv13 - 8, k3, s1, p12, 8, 32, 32Conv28 - 16, k3, s2, p12, 16, 16, 16MaxPoolk2, s22, 16, 8, 8你要养成的习惯每写一层就打印一次 shape。先确认通道数对不对。再确认高宽有没有按预期变化。这比盲目堆网络有效得多。八、常见错误排查表问题常见原因怎么改输出 shape 不对padding 或 stride 算错先手算再打印 shape通道报错in_channels和前一层输出不一致检查Conv2d(in_channels, out_channels)图像被压得太小stride 太大层数太多降低 stride减少下采样边缘信息丢失没有 padding给 3x3 卷积常配padding1训练速度太慢输入太大、下采样太晚早点做下采样九、今天的学习任务如果你是科研小白今天就做这 4 件事找一张32x32或64x64的图片手算一次卷积输出尺寸。用nn.Conv2d试padding0/1和stride1/2。每改一次参数就打印一次tensor.shape。记住一句话卷积看局部padding 保边界stride 控分辨率。十、三句话复盘局部感受野让神经元只看图像的一小块更符合视觉结构。卷积核通过权重共享在整张图上重复找模式。Padding 和 Stride分别决定边缘保留程度和下采样速度。写在最后学术因方向、个人实验和写作能力以及具体创新内容的不同而无法做到一通百通关注UPAi学术叫叫兽在所有资料中留下联系方式以便在科研之余为家人们答疑解惑本up主获得过国奖发表多篇SCI擅长目标检测领域拥有多项竞赛经历拥有软件著作权核心期刊等经历。因为经历过所以更懂小白的痛苦因为经历过所以更具有指向性的指导祝所有科研工作者都能够在自己的领域上更上一层楼