经典架构演进
LeNet-5 的结构是怎样的?它奠定了 CNN 的哪些基本组件?¶

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 竞赛?¶
关键创新:
-
更深的网络:5 个卷积层 + 3 个全连接层,参数量约 60M。
-
ReLU 激活函数:代替 sigmoid/tanh,缓解梯度消失,加速训练。
-
Dropout 正则化:在全连接层中使用,防止过拟合。
-
重叠池化:池化窗口大于步长,提升特征鲁棒性。
-
局部响应归一化(LRN):虽然后来被 BN 取代,但当时有助于泛化。
-
数据增强:随机裁剪、水平翻转等,增大有效训练集。
-
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,

-
更多非线性:每层卷积后跟 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):随着深度增加,训练误差非因过拟合而是变得更高,深层网络难以优化。普通堆叠层难以学习恒等映射,导致信号衰减。
残差块公式:

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

为什么有效:学习残差比直接学习原始映射更容易,尤其在深层时,F(x)趋近于零即可实现恒等映射,网络不会比浅层差。梯度可以通过短路连接直接传播,缓解梯度消失。
解释 ResNet 中恒等映射(Identity Mapping)的重要性,以及为什么梯度可以无衰减地传播。¶
恒等映射的重要性:
-
提供了一种“默认”行为:当层没有有用的变换时,可以简单地将输入传递到输出,不会损害性能。
-
信号可以直接从前层传到后层,避免多层变换引起的衰减。
-
反向传播时,损失对输入的梯度为:

总结:恒等映射打开了信息高速公路,前向信号和反向梯度都得以顺畅流通。
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 的加法连接有何不同?¶
密集连接:

与 ResNet 的不同:
-
ResNet 使用逐元素相加(summation),将恒等映射与残差合并,前后特征图维度不变。
-
DenseNet 使用通道拼接(concatenation),将历史特征累积在一起,通道数随深度增加。这鼓励特征复用,并大幅减少了参数,因为深层可以利用前面所有层的特征,而无需重新学习冗余特征。
优点:改进梯度流动,更高效的特征传播,参数更少。
DenseNet 中,特征复用如何实现?增长率(Growth Rate)是什么?¶
特征复用:由于每一层都能看到前面所有层的输出(拼接),网络可以重复利用低层特征,不需要重复学习相同的模式。高层可以直接从浅层提取的边缘、纹理等信息中获益,使得网络更紧凑。

参数量少的原因:每个卷积层(通常 3×3)的输入通道数虽然随深度增加,但增长率小,且每层仅需学习 k 个新特征,许多特征被复用,因而总参数量远小于传统 CNN。
为什么 DenseNet 的参数量和计算量相对较小?但显存占用可能更高?¶
参数量小:因为增长率 k 较小,每一层只产生少量新特征,且大量特征被复用。瓶颈层(1×1 卷积)进一步压缩通道(如 4k)。此外,全连接层之前使用全局平均池化,消除了巨量全连接参数。
计算量小:由于输出通道数少,3×3 卷积的输入通道尽管拼接后较多,但 1×1 瓶颈卷积会先降维,使得计算可控。
显存占用可能更高:
-
密集连接需要存储前面所有层的特征图以用于后续拼接,这些中间激活在训练时不能被释放,导致显存占用极高(与网络深度成正比)。
-
虽然参数少,但特征图占用大量 GPU 内存,尤其在 dense block 内,需要缓存所有层的输出用于反向传播。可以通过梯度检查点或使用内存优化实现来缓解,但原生训练时显存是瓶颈。
MobileNet v1 的核心是深度可分离卷积,它如何实现移动端加速?¶
核心:将标准卷积分解为 depthwise 卷积和 pointwise 卷积,大幅减少计算量和参数量。
-
Depthwise:每个输入通道单独使用一个滤波器,仅提取空间特征。
-
Pointwise:1×1 卷积组合通道,实现跨通道信息融合。
加速原理:

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 的缩放:

理论基础
-
观察:单独缩放深度、宽度或分辨率中的任意一个维度,都能提高精度,但会很快遇到饱和(如深度过深导致退化,宽度过宽导致计算爆炸,分辨率过高超过感受野)。三者之间存在内在关联。
-
直觉:输入图像分辨率更高时,需要更深的网络来获得更大的感受野以覆盖整个物体,同时也需要更多的通道来捕捉更细粒度的模式。复合缩放协同调整这三个维度,可以最大化利用有限的计算资源。
-
实验表明,在固定计算量下,复合缩放比单独缩放任一维度的效果更好,且生成的模型家族在效率和精度上超越了当时的各种手工设计或 NAS 方法。
效果:EfficientNet-B7 在 ImageNet 上以远小于之前模型的参数量和 FLOPs 达到了当时最高精度。
ConvNeXt 是如何借鉴 Transformer 设计来现代化 CNN 的?有哪些关键改动?¶
ConvNeXt 旨在“现代化”标准卷积神经网络,使其在保持 CNN 固有优势(如效率、平移等变性)的同时,引入 Transformer 架构的成功设计理念。关键改动包括:
- 宏观架构调整
- 采用类似 Swin Transformer 的阶段比例和计算量分配。Swin-T 将计算量集中在不同阶段,ConvNeXt 调整了各阶段的块数,从 ResNet 的 (3,4,6,3) 改为 (3,3,9,3),使深层阶段获得更多计算预算。
-
使用 Patchify 作为初始层:将 7×7 卷积的步长设为 4 进行非重叠“分块”,替代传统的 7×7 stride 2 + maxpool。
-
深度可分离卷积与大核卷积
- 将 ResNet 瓶颈块中的 3×3 卷积改为深度可分离卷积,减少 FLOPs,与 Transformer 的多头自注意力有结构上的相似性(每组头独立处理通道子集)。
-
将深度卷积的核大小从 3×3 增大到 7×7,增大了感受野,类似于 Transformer 的全局注意力但计算高效。
-
倒置瓶颈与更宽的通道
- 采用与 Transformer MLP 类似的倒置瓶颈结构:1×1 升维 → 深度卷积 → 1×1 降维,且升维比更高(扩展比 4)。
-
增加的宽度有利于学习更丰富的特征。
-
现代化训练策略与结构细节
- 用 GELU 激活函数替换 ReLU。
- 减少归一化层的使用:仅使用 Layer Normalization 而不是 Batch Normalization;而且将 LN 移到卷积之前(预归一化)。
- 调整下采样方式:在深度卷积中使用 stride 2,并在残差短接路径上也使用 1×1 stride 2 进行维度匹配。
-
去除不必要的激活和归一化堆叠(如激活只保留一次,而不是每个卷积后都激活),更接近 Transformer 的简单设计。
-
整体思想 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)模块

作用

效果:SENet 赢得 ILSVRC 2017 分类冠军,ResNet-50 加上 SE 块后准确率接近 ResNet-101 但计算量小得多。
比较 ResNet、DenseNet、SENet、EfficientNet 在效率和精度上的特点。¶
总结
-
ResNet 是奠基性工作,效率与精度平衡较好,但未做极致的轻量化。
-
DenseNet 参数和计算量可以控制得很低,但密集连接导致的显存和运行瓶颈限制了其在移动端的使用。
-
SENet 以极少额外开销显著提升已有架构的性能,是一个通用增强模块。
-
EfficientNet 通过自动化的复合缩放,在各个资源级别都达到了最优的精度/效率 trade-off,是当前高效率网络的代表之一。
如何从零搭建一个图像分类网络?你会参考哪些设计原则?¶
从零搭建一个图像分类网络,需综合考虑任务数据量、计算资源和目标性能。参考设计原则:
-
基础组件选择
-
卷积核大小:优先使用 3×3 小卷积核堆叠,感受野和参数量的最优平衡;初始层可用 7×7 较大核配合 stride 快速降采样。
-
下采样:使用步长为 2 的卷积代替池化,保留学习能力;也可配合 2×2 max pool。
-
归一化:如果 batch size 足够大,用 BN;若 batch 小或部署到移动端,用 GN 或 LN。
-
激活函数:ReLU 或 GELU/SiLU。深层网络优先 ReLU 或 Swish 变体。
-
残差连接:必须组件,帮助训练深层网络,缓解退化。
-
网络架构设计
-
阶段划分:将网络分为多个阶段,每个阶段内特征图尺寸不变,过渡时下采样并增加通道数(通常倍增通道)。
-
全局平均池化:在分类头前用 GAP 代替重型全连接,减少过拟合和参数。
-
深度和宽度的平衡:遵循 EfficientNet 的复合缩放思想,协同增加深度、宽度和分辨率,而非单一维度扩增。
-
分支策略:可以借鉴 Inception 的多分支多尺度,或 ResNeXt 的分组卷积增加基数,或用 SE 注意力增强。
-
轻量级设计(如果资源受限)
-
使用深度可分离卷积、倒置残差块(MobileNet 系列)。
-
控制通道扩展因子,避免爆炸。
-
利用 1×1 卷积降维和升维,减少昂贵卷积的计算量。
-
训练友好设计
-
避免梯度瓶颈:使用预激活(BN→ReLU→Conv)或恒等 shortcut。
-
合理初始化:He 初始化配合 ReLU。
-
学习率调度:余弦退火或阶梯衰减。
-
硬件效率
-
少用碎片化操作(如大量小核串联或过多分支),硬件不友好。
-
尽量使用标准卷积、1×1 卷积、可优化深度卷积。
-
使用相同尺寸的卷积,避免过多 reshape。
-
可扩展性
-
预留超参数(宽度乘数、深度乘数、分辨率乘数)以便缩放。
-
遵循 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 卷积),并在其后的特征图上进行多尺度检测。
-
这种转换使得网络可以一次前向传播获得所有位置的检测结果,实现高效推理。
这样,通过将全连接层转换为卷积层,网络可以接受任意尺寸输入,并输出空间密集预测,这是现代检测架构的基础。