跳转至

经典架构演进

LeNet-5 的结构是怎样的?它奠定了 CNN 的哪些基本组件?

image.png

LeNet-5 结构(Yann LeCun, 1998):

  • 输入:32×32 灰度手写数字图像。

  • C1 卷积层:6 个 5×5 卷积核,步长 1,无填充,输出 28×28×6。

  • S2 下采样层(平均池化):2×2 窗口,步长 2,输出 14×14×6。

  • C3 卷积层:16 个 5×5 卷积核(部分连接,不是所有通道都连接,为节省计算),输出 10×10×16。

  • S4 平均池化:2×2,输出 5×5×16。

  • C5 卷积层:120 个 5×5 卷积核,输入 5×5,输出 1×1×120(可视为全连接)。

  • F6 全连接层:84 个神经元。

  • 输出层:10 个神经元(对应数字 0-9),使用 RBF 作为损失(后来常用 softmax)。

奠定基本组件:

  • 卷积 + 下采样(池化)+ 全连接的基本流水线。

  • 使用卷积核提取局部特征,池化降低分辨率和引入平移不变性。

  • 多层特征层次结构:低层检测边缘、角点,高层组合成复杂模式。

  • 使用反向传播进行端到端训练。

  • 这些构成了现代 CNN 的雏形。


AlexNet 相比 LeNet 有哪些关键创新?为什么能赢得 ImageNet 竞赛?

关键创新:

  1. 更深的网络:5 个卷积层 + 3 个全连接层,参数量约 60M。

  2. ReLU 激活函数:代替 sigmoid/tanh,缓解梯度消失,加速训练。

  3. Dropout 正则化:在全连接层中使用,防止过拟合。

  4. 重叠池化:池化窗口大于步长,提升特征鲁棒性。

  5. 局部响应归一化(LRN):虽然后来被 BN 取代,但当时有助于泛化。

  6. 数据增强:随机裁剪、水平翻转等,增大有效训练集。

  7. GPU 并行训练:将网络分到两个 GPU 上,突破显存限制。

获胜原因:深度带来的强表达能力、ReLU 和 Dropout 改善了训练,大量数据增强和 GPU 训练使得大规模学习成为可能。在 ImageNet 2012 上 top-5 错误率降至 15.3%,大幅超越传统方法。


VGG 网络的核心思想是什么?它证明了什么?缺点是什么?

核心思想:使用全部 3×3 小卷积核,堆叠更多层(16-19 层),保持特征的均匀性和规整性。所有卷积层使用相同的配置(3×3,步长 1,padding 1),定期用 2×2 最大池化降采样。

证明了什么:

  • 深度对性能至关重要,更深的网络可以显著提升准确率。

  • 小卷积核堆叠可以在相同感受野下减少参数,增加非线性,效果优于大卷积核。

  • 规整的结构设计(同质化层)使得网络更易优化。

缺点:

  • 参数量巨大:特别是全连接层(如 4096×4096),VGG-16 有约 138M 参数,占用大量存储和显存。

  • 计算量大:约 15.5 GFLOPs,推理速度慢。

  • 训练需要更多内存和时间。

  • 相对于后来的网络(ResNet, MobileNet),效率较低。


为什么 VGG 使用堆叠小卷积核而不是大卷积核?请计算感受野和参数量对比。

原因:

  • 相同感受野:两个 3×3 卷积的感受野为 5×5,三个为 7×7。

  • 更少参数:设输入输出通道均为 C,

image.png

  • 更多非线性:每层卷积后跟 ReLU,多层非线性增强决策函数判别力。

  • 正则化效果:参数减少降低了过拟合风险。

举例:输入 C=64,输出 C=128 时,5×5 参数=25×64×128=204,800;两个 3×3 参数=9×64×128 + 9×128×128=73,728+147,456=221,184,虽然略高,但如果中间层为相同通道数,则节省明显。通常中间层保持通道数,VGG 每块内部通道数相同,则两个 3×3 参数确实更少。


GoogLeNet (Inception v1) 的 Inception 模块是如何设计的?它如何实现多尺度特征融合?

Inception 模块设计(初始版本):

  • 输入并行通过四个分支:
  • 1×1 卷积
  • 1×1 卷积 → 3×3 卷积
  • 1×1 卷积 → 5×5 卷积
  • 3×3 最大池化 → 1×1 卷积

  • 所有分支的步长均为 1,使用适当的填充保证输出空间尺寸相同,最终在通道维度上拼接。

  • 1×1 卷积用于降维和增加非线性。

多尺度特征融合:不同大小的卷积核(1×1, 3×3, 5×5)和池化操作可以捕获不同尺度的信息,并行处理后在通道上合并,使网络能够同时学习稀疏(1×1)和集中(5×5)特征,增强了多尺度适应性。

后续改进(Inception v1 也有辅助分类器缓解梯度问题),整体网络更宽而不是更深,同时控制计算量。


在 Inception 模块中使用 1×1 卷积进行降维的目的是什么?

降维目的:

  • 在昂贵的卷积(3×3, 5×5)之前使用 1×1 卷积减少输入通道数,极大降低计算量。例如,直接对 128 通道使用 5×5 卷积需要 25×128×输出通道的计算量,而如果先用 1×1 卷积将通道降到 32,则 5×5 卷积的计算量降为原来的 1/4。

  • 1×1 卷积也增加了非线性,提升网络表达能力。

  • 池化分支后使用 1×1 卷积压缩通道,保持整体通道数的平衡。

这个设计使 Inception 网络在保持高性能的同时,计算量远小于堆叠大卷积核的模型。


Inception 系列的后续版本(v2, v3, v4)各做了哪些改进?

Inception v2 / v3(同一篇论文,v3 是进一步优化):

  • Batch Normalization(v2):在卷积后激活前加入 BN,加速训练,允许更大学习率。

  • 非对称卷积:将较大的卷积核(如 5×5)分解为两个连续的 3×3 卷积;再将 n×n 卷积分解为 1×n 和 n×1(例如 3×3 变为 1×3 和 3×1),进一步减少参数,同时增加网络深度。

  • 避免表示瓶颈:保持特征图尺寸逐渐减小,通道逐渐增加。

  • 辅助分类器使用了 BN 和 Dropout。

  • 优化了 Inception 模块的结构(分为 A、B、C 三种模块),结合了不同的分解策略。

Inception v4:

  • 引入残差连接(Inception-ResNet),将 Inception 结构与 ResNet 的恒等映射结合,加速训练并提升性能。

  • 简化了 Inception 块的统一性,减少超参数。

  • 即使不使用残差连接,Inception v4 也有更高效的设计。

总之,v2 引入 BN,v3 使用非对称分解,v4 融合残差思想,逐步提升准确率和效率。


ResNet 提出的残差学习解决了什么问题?残差块的公式是怎样的?

解决的问题:深度网络的退化问题(degradation):随着深度增加,训练误差非因过拟合而是变得更高,深层网络难以优化。普通堆叠层难以学习恒等映射,导致信号衰减。

残差块公式:

image.png

通常 F(x)包含两到三层卷积、BN、ReLU。短路连接(shortcut)直接传递 x,如果维度不匹配,使用 1×1 卷积线性投影 Ws:

image.png

为什么有效:学习残差比直接学习原始映射更容易,尤其在深层时,F(x)趋近于零即可实现恒等映射,网络不会比浅层差。梯度可以通过短路连接直接传播,缓解梯度消失。


解释 ResNet 中恒等映射(Identity Mapping)的重要性,以及为什么梯度可以无衰减地传播。

恒等映射的重要性:

  • 提供了一种“默认”行为:当层没有有用的变换时,可以简单地将输入传递到输出,不会损害性能。

  • 信号可以直接从前层传到后层,避免多层变换引起的衰减。

  • 反向传播时,损失对输入的梯度为:

image.png

总结:恒等映射打开了信息高速公路,前向信号和反向梯度都得以顺畅流通。


ResNet 的 bottleneck 结构是什么?在什么情况下使用?

Bottleneck 结构:

  • 用于构建更深的 ResNet(50 层以上),以减少计算量。

  • 由三层卷积组成:1×1 卷积(降维)→ 3×3 卷积(空间特征)→ 1×1 卷积(升维)。

  • 例如输入 256 通道,1×1 降为 64 通道,3×3 卷积工作在 64 通道上,然后 1×1 再恢复到 256 通道。这样与两个 3×3 卷积(256 通道)相比,参数量极大减少。

使用场景:ResNet-50、ResNet-101、ResNet-152 等较深网络中使用 bottleneck block。对于浅层网络(ResNet-18/34),使用基本的两个 3×3 残差块。


ResNet v2 对 v1 做了哪些改进(BN 与激活的顺序调整)?为什么这样更好?

改进:ResNet v1 的原始残差块顺序为:Conv → BN → ReLU,且 shortcut 在 ReLU 之前加入。v2 提出预激活(pre-activation):将 BN 和 ReLU 移到卷积层之前,即顺序变为 BN → ReLU → Conv。同时,shortcut 路径现在直接传递未经激活的恒等映射,使得信号传播更加直接。

为什么更好:

  • 在前向传播时,任意深层单元的输入都是浅层单元的恒等映射与各层残差之和,信息畅通无阻。

  • 反向传播梯度流:从损失到任何浅层,梯度通过 shortcut 不经过任何 BN 或 ReLU,避免了梯度衰减。因此 v2 在更深的网络(如 1001 层)上能稳定训练并取得更好效果。

  • 实验证明,v2 相比 v1 在 CIFAR-10 上 1001 层 ResNet 的错误率更低,且优化更容易。


DenseNet 的密集连接是如何工作的?它与 ResNet 的加法连接有何不同?

密集连接:

image.png

与 ResNet 的不同:

  • ResNet 使用逐元素相加(summation),将恒等映射与残差合并,前后特征图维度不变。

  • DenseNet 使用通道拼接(concatenation),将历史特征累积在一起,通道数随深度增加。这鼓励特征复用,并大幅减少了参数,因为深层可以利用前面所有层的特征,而无需重新学习冗余特征。

优点:改进梯度流动,更高效的特征传播,参数更少。


DenseNet 中,特征复用如何实现?增长率(Growth Rate)是什么?

特征复用:由于每一层都能看到前面所有层的输出(拼接),网络可以重复利用低层特征,不需要重复学习相同的模式。高层可以直接从浅层提取的边缘、纹理等信息中获益,使得网络更紧凑。

image.png

参数量少的原因:每个卷积层(通常 3×3)的输入通道数虽然随深度增加,但增长率小,且每层仅需学习 k 个新特征,许多特征被复用,因而总参数量远小于传统 CNN。


为什么 DenseNet 的参数量和计算量相对较小?但显存占用可能更高?

参数量小:因为增长率 k 较小,每一层只产生少量新特征,且大量特征被复用。瓶颈层(1×1 卷积)进一步压缩通道(如 4k)。此外,全连接层之前使用全局平均池化,消除了巨量全连接参数。

计算量小:由于输出通道数少,3×3 卷积的输入通道尽管拼接后较多,但 1×1 瓶颈卷积会先降维,使得计算可控。

显存占用可能更高:

  • 密集连接需要存储前面所有层的特征图以用于后续拼接,这些中间激活在训练时不能被释放,导致显存占用极高(与网络深度成正比)。

  • 虽然参数少,但特征图占用大量 GPU 内存,尤其在 dense block 内,需要缓存所有层的输出用于反向传播。可以通过梯度检查点或使用内存优化实现来缓解,但原生训练时显存是瓶颈。


MobileNet v1 的核心是深度可分离卷积,它如何实现移动端加速?

核心:将标准卷积分解为 depthwise 卷积和 pointwise 卷积,大幅减少计算量和参数量。

  • Depthwise:每个输入通道单独使用一个滤波器,仅提取空间特征。

  • Pointwise:1×1 卷积组合通道,实现跨通道信息融合。

加速原理:

image.png

MobileNet v1 将浮点运算量从 VGG 的几十 GFLOPs 降低到数百 MFLOPs,同时保持不错的准确率,成为移动端视觉应用的基准。


MobileNet v2 的线性瓶颈和倒置残差结构是什么?为什么设计成这样?

倒置残差(Inverted Residuals)

  • 标准残差块(ResNet)遵循“压缩 → 卷积 → 扩展”的模式,即先通过 1×1 卷积降维,然后进行昂贵的 3×3 卷积,最后再用 1×1 升维恢复通道数。这种结构是为了减少 3×3 卷积的计算量。

  • MobileNet v2 的倒置残差块恰好相反:先升维 → 深度卷积 → 再降维。具体为:

  • 1×1 卷积将输入低维特征扩展到高维(扩展因子 tt,通常为 6)。
  • 3×3 深度可分离卷积(depthwise)在高维空间中进行空间滤波。
  • 最后的 1×1 卷积(无激活,即线性映射)将高维特征压缩回低维。

  • 由于残差连接的两端都是低维特征(通道数少),与标准残差的高维连接相反,因此称为“倒置”。

线性瓶颈(Linear Bottleneck)

  • 瓶颈指特征在经过激活函数时可能丢失信息。MobileNet v2 认为,低维特征在经过非线性激活(如 ReLU)后会造成严重的信息破坏,因为 ReLU 会将负值直接置零,在低维空间中这种破坏可能不可逆。

  • 因此,在倒置残差块中,最后的 1×1 压缩层不使用激活函数(即线性输出),以避免低维表示的信息损失。前面的升维和高维深度卷积依然使用非线性激活(ReLU6),因为在高维空间中信息冗余度大,ReLU 造成的破坏可以被补偿。

  • 这种设计将输入数据“流形”嵌入到高维空间进行变换,然后再投影回低维,并保持流形在低维空间时的完整性。

为什么这样设计

  • 效率与表达力平衡:深度卷积本身计算量小,但只能在已有通道上滤波,表达能力有限。升维到高维空间后再做深度卷积,可以利用更大的容量进行特征提取,最后压缩回低维节省参数和计算,并保留残差连接的低成本。

  • 信息保持:线性瓶颈保证在低维瓶颈处不丢失信息,使网络可以学习更紧凑的表示,同时梯度可以通过短接连接顺畅传播。

  • 这种结构使得 MobileNet v2 在保持极低计算量的同时,显著提升了准确率,适用于移动和嵌入式设备。


MobileNet v3 使用 NAS 和 NetAdapt 做了什么?

MobileNet v3 结合了神经架构搜索(NAS)和NetAdapt 算法来进行自动化网络设计。

NAS(神经架构搜索)

  • 使用平台感知的 MnasNet 框架,在搜索空间内以多目标奖励(兼顾准确率和延迟)自动寻找最优的卷积块配置。

  • 搜索空间包括:扩展因子、卷积核大小、是否使用 Squeeze-and-Excitation 模块、激活函数选择等。

  • 通过强化学习在 MobileNet v2 的倒置残差结构基础上搜索出高效模块,得到一个在目标硬件(如 Pixel 手机)上既快又准的初步架构。

NetAdapt

  • 在 NAS 得到的架构基础上,NetAdapt 进一步进行层级别的细粒度调整。它逐层分析每一层的计算量和贡献,尝试用更小的结构(减少通道数、改变扩展因子)替换原有层,并微调模型保持精度。

  • 这个过程允许在略微牺牲精度的情况下大幅降低延迟,最终实现精度和速度的最佳平衡。

MobileNet v3 的成果

  • 继承了 v2 的倒置残差和线性瓶颈,同时加入 SE 注意力模块(Squeeze-and-Excitation),并使用 h-swish 激活函数替代部分 ReLU,以减少计算开销。

  • 提出了 Large 和 Small 两个版本,分别针对高资源和低资源环境。

  • 在图像分类、目标检测等任务上,以更低的 FLOPs 达到了与 v2 相当或更优的精度。


EfficientNet 提出的复合缩放是如何同时缩放深度、宽度和分辨率的?理论基础是什么?

复合缩放(Compound Scaling)方法

  • EfficientNet 使用一个复合系数 ϕϕ 来同时控制网络深度 dd、宽度 ww 和输入分辨率 rr 的缩放:

image.png

理论基础

  • 观察:单独缩放深度、宽度或分辨率中的任意一个维度,都能提高精度,但会很快遇到饱和(如深度过深导致退化,宽度过宽导致计算爆炸,分辨率过高超过感受野)。三者之间存在内在关联。

  • 直觉:输入图像分辨率更高时,需要更深的网络来获得更大的感受野以覆盖整个物体,同时也需要更多的通道来捕捉更细粒度的模式。复合缩放协同调整这三个维度,可以最大化利用有限的计算资源。

  • 实验表明,在固定计算量下,复合缩放比单独缩放任一维度的效果更好,且生成的模型家族在效率和精度上超越了当时的各种手工设计或 NAS 方法。

效果:EfficientNet-B7 在 ImageNet 上以远小于之前模型的参数量和 FLOPs 达到了当时最高精度。


ConvNeXt 是如何借鉴 Transformer 设计来现代化 CNN 的?有哪些关键改动?

ConvNeXt 旨在“现代化”标准卷积神经网络,使其在保持 CNN 固有优势(如效率、平移等变性)的同时,引入 Transformer 架构的成功设计理念。关键改动包括:

  1. 宏观架构调整
  2. 采用类似 Swin Transformer 的阶段比例和计算量分配。Swin-T 将计算量集中在不同阶段,ConvNeXt 调整了各阶段的块数,从 ResNet 的 (3,4,6,3) 改为 (3,3,9,3),使深层阶段获得更多计算预算。
  3. 使用 Patchify 作为初始层:将 7×7 卷积的步长设为 4 进行非重叠“分块”,替代传统的 7×7 stride 2 + maxpool。

  4. 深度可分离卷积与大核卷积

  5. 将 ResNet 瓶颈块中的 3×3 卷积改为深度可分离卷积,减少 FLOPs,与 Transformer 的多头自注意力有结构上的相似性(每组头独立处理通道子集)。
  6. 将深度卷积的核大小从 3×3 增大到 7×7,增大了感受野,类似于 Transformer 的全局注意力但计算高效。

  7. 倒置瓶颈与更宽的通道

  8. 采用与 Transformer MLP 类似的倒置瓶颈结构:1×1 升维 → 深度卷积 → 1×1 降维,且升维比更高(扩展比 4)。
  9. 增加的宽度有利于学习更丰富的特征。

  10. 现代化训练策略与结构细节

  11. 用 GELU 激活函数替换 ReLU。
  12. 减少归一化层的使用:仅使用 Layer Normalization 而不是 Batch Normalization;而且将 LN 移到卷积之前(预归一化)。
  13. 调整下采样方式:在深度卷积中使用 stride 2,并在残差短接路径上也使用 1×1 stride 2 进行维度匹配。
  14. 去除不必要的激活和归一化堆叠(如激活只保留一次,而不是每个卷积后都激活),更接近 Transformer 的简单设计。

  15. 整体思想 ConvNeXt 的思路是保留 CNN 的滑动窗口特性,但引入 Transformer 中证明有效的宏观和微观设计,最终实现一个纯粹由卷积构成的架构,在图像分类、检测、分割等任务上性能媲美甚至超越 Swin Transformer,同时保持卷积网络的部署优势。


ResNeXt 的“分组卷积”如何实现“基数”(Cardinality)的控制?与宽度比哪个更有效?

基数(Cardinality)的定义

  • 在 ResNeXt 中,基数指的是残差块内转换(transformation)路径的并行分支数量,也就是分组卷积的组数。

  • 每个分支执行相同的拓扑结构(通常为 1×1 降维 → 3×3 分组卷积 → 1×1 升维),所有分支输出在通道上拼接后与短接相加。

分组卷积实现基数控制

  • 标准卷积在全部输入通道上操作。分组卷积将通道分为 G 组,每组独立卷积,然后拼接。这里 G 就是基数。

  • 例如,一个 ResNeXt 块输入 256 通道,基数 C=32,则分为 32 组,每组处理 4 个通道(256/32=8? 实际常用每组中间通道数 d,总中间通道 C×d,然后通过 1×1 卷积恢复)。在控制整体计算量不变的情况下,增加基数可以增加网络的学习能力。

  • 设计原则是:保持总计算量(FLOPs)与对比的 ResNet 类似,通过增加基数而减少每组内的宽度(即中间层的通道数),实现多路结构。

基数 vs 宽度的有效性

  • ResNeXt 论文的核心结论:在相近的计算复杂度下,增加基数比增加深度或宽度能更有效地提升模型性能。

  • 实验表明,从 ResNet-50 的基数 1(宽度 64)变为 ResNeXt-50 的基数 32(每组宽度 4),在 FLOPs 相当的情况下,ImageNet 分类错误率明显下降。

  • 原因解释:更多的并行路径为网络提供了更多的子空间,可以学习到更加多样化和互补的特征,这类似于增加了一层集成学习,增强了表示能力。

因此,ResNeXt 的设计哲学是:用多分支(高基数)代替单分支的宽层,在给定计算预算下获得更好的精度。


SENet 的注意力机制是如何工作的?它如何实现通道维度的重标定?

Squeeze-and-Excitation(SE)模块

image.png

作用

image.png

效果:SENet 赢得 ILSVRC 2017 分类冠军,ResNet-50 加上 SE 块后准确率接近 ResNet-101 但计算量小得多。


比较 ResNet、DenseNet、SENet、EfficientNet 在效率和精度上的特点。

查看内嵌表格

总结

  • ResNet 是奠基性工作,效率与精度平衡较好,但未做极致的轻量化。

  • DenseNet 参数和计算量可以控制得很低,但密集连接导致的显存和运行瓶颈限制了其在移动端的使用。

  • SENet 以极少额外开销显著提升已有架构的性能,是一个通用增强模块。

  • EfficientNet 通过自动化的复合缩放,在各个资源级别都达到了最优的精度/效率 trade-off,是当前高效率网络的代表之一。


如何从零搭建一个图像分类网络?你会参考哪些设计原则?

从零搭建一个图像分类网络,需综合考虑任务数据量、计算资源和目标性能。参考设计原则:

  1. 基础组件选择

  2. 卷积核大小:优先使用 3×3 小卷积核堆叠,感受野和参数量的最优平衡;初始层可用 7×7 较大核配合 stride 快速降采样。

  3. 下采样:使用步长为 2 的卷积代替池化,保留学习能力;也可配合 2×2 max pool。

  4. 归一化:如果 batch size 足够大,用 BN;若 batch 小或部署到移动端,用 GN 或 LN。

  5. 激活函数:ReLU 或 GELU/SiLU。深层网络优先 ReLU 或 Swish 变体。

  6. 残差连接:必须组件,帮助训练深层网络,缓解退化。

  7. 网络架构设计

  8. 阶段划分:将网络分为多个阶段,每个阶段内特征图尺寸不变,过渡时下采样并增加通道数(通常倍增通道)。

  9. 全局平均池化:在分类头前用 GAP 代替重型全连接,减少过拟合和参数。

  10. 深度和宽度的平衡:遵循 EfficientNet 的复合缩放思想,协同增加深度、宽度和分辨率,而非单一维度扩增。

  11. 分支策略:可以借鉴 Inception 的多分支多尺度,或 ResNeXt 的分组卷积增加基数,或用 SE 注意力增强。

  12. 轻量级设计(如果资源受限)

  13. 使用深度可分离卷积、倒置残差块(MobileNet 系列)。

  14. 控制通道扩展因子,避免爆炸。

  15. 利用 1×1 卷积降维和升维,减少昂贵卷积的计算量。

  16. 训练友好设计

  17. 避免梯度瓶颈:使用预激活(BN→ReLU→Conv)或恒等 shortcut。

  18. 合理初始化:He 初始化配合 ReLU。

  19. 学习率调度:余弦退火或阶梯衰减。

  20. 硬件效率

  21. 少用碎片化操作(如大量小核串联或过多分支),硬件不友好。

  22. 尽量使用标准卷积、1×1 卷积、可优化深度卷积。

  23. 使用相同尺寸的卷积,避免过多 reshape。

  24. 可扩展性

  25. 预留超参数(宽度乘数、深度乘数、分辨率乘数)以便缩放。

  26. 遵循 EfficientNet 的做法搜索最优缩放系数。

实践流程

  • 确定 baseline(如一个小型 ResNet 或 MobileNet 变体)。

  • 在验证集上训练、评估。

  • 逐步引入改进模块(SE、深度可分离等),观察提升。

  • 进行超参数调整,得到最终模型。


“深度可分离卷积 + 线性瓶颈 + 倒置残差”组合在一起形成了什么网络?

这个组合形成了 MobileNet v2 的基本构建块(bottleneck residual block)。

  • 深度可分离卷积:替代标准卷积,分解为 depthwise 和 pointwise,大幅降低计算量。

  • 线性瓶颈:在低维表示输出时不使用非线性激活(ReLU),防止信息破坏。

  • 倒置残差:残差块的形状是“窄-宽-窄”,即低维输入→高维扩展→深度卷积→低维输出,shortcut 连接在窄的两端。

完整结构:

输入(低维,通道数少)→ 1×1 卷积(扩展因子 t,升维到 t 倍)+ BN + ReLU6 → 3×3 深度卷积(stride 由需求决定)+ BN + ReLU6 → 1×1 卷积(降维回原始通道数)+ BN(无激活)→ 与输入相加(如果 stride=1 且尺寸匹配)。

这种结构在极大降低计算量和参数的同时,通过高维空间的变换和线性瓶颈保持了表达能力,成为移动端高效网络的基石。MobileNet v3 在此基础上加入了 SE 模块和 h-swish 激活,进一步优化。


在目标检测中,如何用 1×1 卷积替换全连接层来适应不同尺寸输入?

背景:传统分类网络最后往往经过 Flatten → 全连接 → softmax,输入尺寸必须固定。目标检测需要处理不同大小的图像,且希望在特征图上密集预测。全卷积网络(FCN)思想是用等效的卷积层替换全连接层。

具体做法:

  • 假设原始分类网络最后一个卷积层输出尺寸为 7×7×512,后接一个全连接层到 4096 神经元,则权重矩阵形状为 4096×(7⋅7⋅512)。

  • 替换为卷积层:核大小 7×7,输入通道 512,输出通道 4096,填充 0,步长 1。这个卷积输出为 1×1×4096。这就是将全连接层的权重重塑为卷积核,等效完成全连接操作。

  • 接下来的分类全连接(4096 → num_classes)同样可以用 1×1×4096×num_classes 的卷积替换。

适应不同尺寸输入

  • 当输入图像尺寸变大时,比如 14×14 的输入到最后的特征图可能变为 10×10×512(假设根据下采样比例),使用同样的 7×7 卷积核(实际上是滑动窗口),将输出 4×4×40964×4×4096 的热图,而不是单个向量。

  • 再经过 1×1 卷积后,得到 4×4×num_classes4×4×num_classes 的类别分数图,每个空间位置对应原图一个区域的类别预测。

  • 这样就实现了密集预测,可用于目标检测中的区域提议(如 Faster R-CNN 的 RPN 使用 3×3 滑动窗口生成 anchors),或语义分割的像素分类。

举例(SSD, YOLO, Faster R-CNN)

  • SSD 使用 VGG 基础网络,将其 fc6、fc7 替换为卷积层(fc6 用 3×3 卷积,fc7 用 1×1 卷积),并在其后的特征图上进行多尺度检测。

  • 这种转换使得网络可以一次前向传播获得所有位置的检测结果,实现高效推理。

这样,通过将全连接层转换为卷积层,网络可以接受任意尺寸输入,并输出空间密集预测,这是现代检测架构的基础。