EfficientNet:复合缩放方法与高效卷积网络

FreeGuideOnline 最新 2026-06-21

EfficientNet:复合缩放方法与高效卷积网络

在深度学习视觉任务中,模型缩放一直是提升精度的核心手段。传统做法通常只放大单一维度——深度、宽度或输入分辨率,但孤立地增加某一维度很快会遭遇收益递减。EfficientNet 系列通过复合缩放思想,在一组固定基线网络的基础上同步协调三个维度的扩张,以更少的参数和计算量达到当时最先进的准确率。本教程将从零开始讲解 EfficientNet 的设计动机、核心组件与工程实现要点。

为什么需要复合缩放

更大的模型通常表达能力更强,但如何“变大”是有讲究的:

  • 增加深度会带来更强的特征层次,但梯度消失、训练困难,且极度加深后精度饱和。
  • 增加宽度可以让每层捕获更丰富的特征,但宽而浅的网络难以学习高层抽象。
  • 增大图像分辨率可以保留细节,但分辨率过高后计算量暴增,而准确率收益不明显。

这三者不是孤立的。例如,输入分辨率更高时,需要更深的网络来增大感受野,并需要更宽的层来捕获更多细粒度模式。复合缩放的核心思想是用一个统一的系数同时缩放深度、宽度和分辨率,让模型在计算预算内获得最佳平衡。

EfficientNet 的基线网络 EfficientNet-B0 是通过神经架构搜索(NAS)得到的一个精确高效的骨干;以此为起点,作者通过网格搜索确定了一个固定的缩放系数集合,然后通过一个全局的复合系数 φ 来调节模型大小,生成 B1 到 B7 的一系列模型。

复合缩放公式

对于给定的复合系数 φ,缩放遵循如下规则:

  • 深度:( d = \alpha^\phi )
  • 宽度:( w = \beta^\phi )
  • 分辨率:( r = \gamma^\phi )

其中 α, β, γ 是在基线网络上通过小范围网格搜索确定的常数,满足约束 (\alpha \cdot \beta^2 \cdot \gamma^2 \approx 2),这样当 φ 增加 1 时,FLOPS 大约增加为原来的 2 倍。搜索得到的最优值约为 α = 1.2, β = 1.1, γ = 1.15。然后对于不同的 φ,按照公式计算深度、宽度和分辨率,并向上取整到合适的通道数和层数,即得到不同规模的 EfficientNet。

这个设计的精妙之处在于:不需要对每个规模重新进行架构搜索,仅需缩放系数组就能自动化生成一族高效模型,大幅节省设计成本。

基线网络 EfficientNet-B0 的结构

EfficientNet-B0 由一系列移动翻转瓶颈卷积块(MBConv)堆叠而成,并加入了 Squeeze-and-Excitation(SE)优化。整体结构分为 9 个阶段,核心积木块如下:

MBConv 块(Mobile Inverted Bottleneck Convolution)
一个典型的 MBConv 块包含以下层:

  1. 1×1 逐点卷积(升维):将输入通道数扩展为原来的若干倍(扩展比通常为 1 或 6)。
  2. Depthwise 卷积:在空间维度上用 k×k 的 depthwise 卷积(通常 k=3 或 5)提取特征。
  3. SE 模块:全局平均池化后用两个全连接层计算出通道权重,再与特征相乘,增强重要通道。
  4. 1×1 逐点卷积(降维):将通道数投影回原始或期望的输出通道数。

如果输入和输出维度相同且步长为 1,还会添加残差连接(跳跃连接)。整个块的设计思路与 MobileNetV2 的倒残差结构相似,但加入了 SE 注意力机制,使网络能以极低成本提升表征能力。

B0 具体配置:每个阶段的层数、通道数、扩展比、卷积核大小、步长均被仔细调整,最终在 ImageNet 上仅用 5.3M 参数量即达到了 76.3% 的 top-1 准确率。

从 B0 到 B7:模型族生成

按照复合缩放公式,令 φ 依次取 0,1,2,...,7,可得到 EfficientNet-B0 到 B7。随着 φ 增加:

  • 深度、宽度、分辨率同步提升。
  • 计算量 (FLOPS) 基本保持每级翻倍。
  • B7 以 66M 参数量达到 84.4% 的 ImageNet top-1 精度,远超之前更重型的网络(如 ResNet-152 的 77.8%,GPipe 等)。

这种平滑的模型族非常便于工程落地:开发者可根据实际延迟、吞吐或内存限制,直接选择对应级别的模型,无需重新设计。

与其它缩放策略的直观对比

缩放方法 特点 代表模型 缺陷
仅加深 增加层数 ResNet-200 梯度消失,精度容易饱和
仅加宽 增加通道数 Wide ResNet 细粒度模式捕获能力提升有限
仅提高分辨率 增大输入尺寸 各种高分辨率输入 感受野跟不上,计算量浪费
复合缩放 三者协调增加 EfficientNet 需事先通过小网格搜索确定系数,但模型族一致性好

从实验看,在相同计算量下,复合缩放的准确率持续高于单一维度缩放,尤其是在移动端或云端有限算力场景下,优势更为显著。

核心代码实现思路

在实际项目中,我们可以使用 PyTorch 或 TensorFlow 实现 EfficientNet。下面以 PyTorch 风格展示主要组件的伪代码,帮助初学者理解结构。

MBConv 块实现框架:

class MBConvBlock(nn.Module):
    def __init__(self, in_ch, out_ch, expand_ratio, kernel_size, stride, se_ratio=0.25):
        super().__init__()
        mid_ch = in_ch * expand_ratio
        self.use_residual = (stride == 1 and in_ch == out_ch)

        # 扩展卷积
        self.expand_conv = nn.Conv2d(in_ch, mid_ch, 1, bias=False) if expand_ratio != 1 else nn.Identity()
        self.bn0 = nn.BatchNorm2d(mid_ch)

        # 深度可分离卷积
        self.depthwise_conv = nn.Conv2d(mid_ch, mid_ch, kernel_size, stride, padding=kernel_size//2, groups=mid_ch, bias=False)
        self.bn1 = nn.BatchNorm2d(mid_ch)

        # SE 模块
        self.se = SEModule(mid_ch, se_ratio)

        # 投影卷积
        self.project_conv = nn.Conv2d(mid_ch, out_ch, 1, bias=False)
        self.bn2 = nn.BatchNorm2d(out_ch)

    def forward(self, x):
        out = F.relu(self.bn0(self.expand_conv(x)))
        out = F.relu(self.bn1(self.depthwise_conv(out)))
        out = self.se(out)
        out = self.bn2(self.project_conv(out))
        if self.use_residual:
            out = out + x
        return out

SE 模块非常简单:全局平均池化 → FC 降维 → ReLU → FC 升维 → Sigmoid,然后与原始特征相乘。

完整的 EfficientNet 则是将多个阶段按配置堆叠,首层为普通 3×3 卷积,最后经过全局平均池化和分类器。网络定义可以根据 α, β, γ 和 φ 自动生成对应深宽度和输入尺寸,实现模型族一键构建。

训练与使用技巧

  1. 输入尺寸:EfficientNet 各个版本有建议输入,如 B0 为 224,B3 为 300,B7 为 600。实际训练时可用较小的初始尺寸进行迁移学习,后期逐步提升。
  2. Dropout 与 DropConnect:EfficientNet 中使用了 DropConnect(随机丢弃全连接层权重),正则化较强,需要根据模型大小调整丢弃概率,一般 B0 为 0.2,B7 为 0.5。
  3. 优化器与学习率:常用 RMSProp 或 AdamW,搭配余弦退火学习率调度。大批次训练时需配合线性缩放规则。
  4. 迁移学习:在小型数据集上使用 EfficientNet,可冻结底层(前几阶段)仅训练分类头或微调最后几个 MBConv 块,保留预训练权重,收敛快且不易过拟合。
  5. 推理优化:由于网络主要由深度可分离卷积构成,在移动端或边缘设备上可以通过量化、裁剪、TensorRT 等工具进一步加速,保留高准确率的同时实现毫秒级延迟。

EfficientNet 在当代的应用场景

  • 图像分类:作为标准骨干网络,替换 ResNet 或 MobileNet,在许多比赛中仍被广泛使用。
  • 目标检测:作为 EfficientDet 的骨干,与加权双向特征金字塔网络(BiFPN)结合,实现高效检测。
  • 语义分割:许多轻量分割网络(如 EfficientNet + DeepLabV3+ 变体)在移动端场景下表现突出。
  • 图像检索、风格迁移等:利用其高质量的中间层特征,可作为通用视觉编码器。

由于结构规范、模型族延展性强,EfficientNet 已成为工业界和学术界的标准组件。其复合缩放思想也启发了后续在 NLP、多模态等领域的模型缩放策略。

总结

EfficientNet 证明了平衡缩放深度、宽度和分辨率是提升卷积网络效率的关键。通过基线架构 NAS 搜索与固定复合系数的自动化缩放,EfficientNet 在参数效率上设立了新的标杆。掌握其原理与实现,不仅有助于理解现代卷积网络的设计哲学,也能在实际项目中快速选型、迁移和部署高性能视觉模型。