这是 100 页综述的精讲系列,共 5 篇

这一篇在干嘛?

论文出处:Luo 等,Efficient Deep Learning Infrastructures for Embedded Computing Systems: A Comprehensive Survey and Future Envision,ACM TECS 2024,24 卷 1 期第 21 篇,共 100 页、651 篇参考文献。本篇覆盖论文第 1 章(概述)与第 2 章(手工网络设计)。 最值得记住的三件事:第一,ResNet50 有 40 亿次浮点运算(FLOPs)和 2500 万参数,处理一张图要占 87 MB 存储,而手机/车机等端侧设备根本吃不下——这就是”计算鸿沟”。第二,手工轻量化的核心招式只有几个:1×1 逐点卷积、群卷积、深度卷积、空洞卷积、Ghost 卷积、部分卷积;深度可分离卷积能把标准卷积的计算量压到原来的 是输出通道数、 是卷积核边长)。第三,FLOPs 少不等于跑得快——FasterNet 用比 GhostNet 多 3.5 倍的 FLOPs(0.85 G vs 0.24 G),反而在 ARM 处理器上快了 1.7 倍。


一、先把问题摆清楚:端侧为什么跑不动”正常”的网络

1.1 端侧推理的三个真实好处

在讨论”怎么省”之前,先要明确”为什么非要搬到端侧”。把深度神经网络(Deep Neural Network, DNN)从云端搬到嵌入式设备上跑,工程上有三个无法替代的动机:

  • 实时性:数据在本地处理,省掉了”上传 → 云端推理 → 下传”这一整趟网络往返。对于自动驾驶的障碍物检测、工业相机的缺陷分拣这类场景,几十毫秒的网络抖动就是事故。
  • 隐私与数据安全:所有原始数据在设备本地处理,不离开设备。医疗影像、家庭摄像头、语音助手场景下,这一条往往是合规红线而不是”加分项”。
  • 离线可用:隧道、地下车库、飞机上、偏远厂区,网络不存在时智能服务依然存在。

1.2 计算鸿沟:一边指数膨胀,一边死死受限

问题在于,深度学习这十年的主旋律是”堆规模换精度”。从 VGGNet 到 ResNet,网络层数从十几层涨到上百层,ImageNet 图像分类的 Top-1 准确率从 57.2% 一路推到 87.3%。代价是什么呢?论文给了一个非常具体的锚点:

ResNet50:超过 40 亿次 FLOPs2500 万参数,处理单张输入图像需要 87 MB 以上的端侧存储。

而真实的嵌入式系统——手机、自动驾驶域控、可穿戴设备——为了控制功耗和发热,可用的算力、内存、带宽都被死死锁住。一边是不断膨胀的模型,一边是几乎不动的硬件预算,中间的裂缝就是论文反复说的 computational gap(计算鸿沟)

这里有一个初学者特别容易忽略的点:ResNet50 中超过 99% 的 FLOPs 来自卷积层。所以”让网络变快”这件事,本质上几乎等价于”让卷积层变快”。后面所有手工设计的招式,基本都围着卷积层打转。

1.3 弥合鸿沟的四条技术路线

论文把已有的解决方案归纳成四条并行的路线(也是本系列五篇的分章依据):

路线核心思想对应章节
高效网络设计(手工)人肉设计天生就省的结构第 2 章(本篇)
高效网络设计(自动)用 NAS 自动搜结构第 3 章(第 ② 篇)
网络压缩先训大模型,再剪枝/量化/蒸馏第 4 章(第 ③ 篇)
端侧学习 + 端侧大模型 + 软硬件框架让训练、LLM、部署也能上端第 5~8 章(第 ④⑤ 篇)

注意前两条路线是并列的:一个是从零设计一个本身就高效的网络,另一个是让算法自己去搜索。历史上手工设计先成熟,NAS 后来居上,但 NAS 的搜索空间里装的依然是 MobileNet、ShuffleNet 这些手工设计的模块——所以先把手工设计的招式学明白,是理解 NAS 的前提

图 1:整篇综述的组织架构。可以看到七条主线从”高效手工网络 / 高效自动网络”一路延伸到”高效智能应用”。第 1 章(引言)和第 9 章(总结)未在图中标出。

1.4 端侧约束不只是”算力不够”

初学者常把端侧的困难简单理解成”CPU/GPU 太慢”。实际上限制来自四个彼此独立的维度,而且真正卡住你的往往不是算力

约束维度具体表现被哪个指标刻画
算力每秒能完成的乘加次数有限FLOPS(每秒浮点运算数)
存储Flash / ROM 放不下模型权重参数量(Parameters)、模型体积(MB)
内存SRAM / DRAM 放不下中间激活值,频繁换入换出峰值激活内存、内存访问量(MAC)
功耗与带宽电池容量、散热上限、片外访存带宽能耗(Energy)、延迟(Latency)

其中内存墙(memory wall)是最容易被忽略的一条。在典型的端侧加速器上,从片外 DRAM 读一个字节消耗的能量,是在片上做一次乘加的几十到上百倍。这意味着:一个”计算量很小但来回搬数据”的算子,实际能耗可能远高于一个”计算量大但数据复用率高”的算子。

这直接解释了本篇里三个看似反直觉的现象:

  1. 多分支结构慢(cell-based 搜索空间在硬件上吃亏)——分支多了就要保存更多中间结果,内存访问量暴涨;
  2. FasterNet 用 3.5 倍 FLOPs 换来 1.7 倍加速——它砍掉的主要是内存访问,不是计算;
  3. 同样 FLOPs 下 MobileNetV2 比 MobileViTv1 快 2 倍——单路结构的数据复用更好,硬件更容易跑满。

一个贯穿全篇的思考框架

以后看到一个”轻量化”技巧,先问自己三个问题: ① 它省的是计算量(FLOPs)还是内存访问(MAC)? ② 它让结构变得更单路还是更多分支?(单路通常更硬件友好) ③ 开销是发生在训练时还是推理时?(结构重参数化就是典型的”开销留在训练时”)


二、轻量化的第一性原理:六种”省卷积”的招式

这一节是整篇最值得反复咀嚼的部分。所有经典轻量网络,拆开看都是这几种基础层的排列组合。

先约定符号:输入特征图尺寸 (宽 × 高 × 输入通道数),卷积核边长 ,输出通道数

2.1 标准卷积的代价

标准卷积每个输出通道都要”看”全部 个输入通道,用 的核分别卷完再求和。总计算量为:

这个式子里,相乘的。现代网络中间层的通道数动辄 512、1024,于是 这一项会爆炸式增长。所有轻量化招式的共同目标,就是想办法 这个乘积拆开或者削掉

2.2 招式一:逐点卷积(Pointwise Convolution)

卷积核固定为 。它做的事很纯粹:在空间位置上不做任何聚合(每个像素独立计算),只在通道维度上做加权求和。

  • 省在哪:相比 卷积,FLOPs 和参数量直接降到 。3×3 卷积换成 1×1,计算量就是九分之一。
  • 真正的主业:1×1 卷积输入输出的空间尺寸不变,但通道数可以随便改。所以它本质是通道数的”调音台”——想降维就降维,想升维就升维。这个性质让它成为后面所有”瓶颈结构”的标配零件。

2.3 招式二:群卷积(Groupwise Convolution)

把输入特征图沿通道维切成 组,每组独立卷积,最后把各组输出沿通道维拼接。

  • 每个卷积核的尺寸变成
  • 相比标准 卷积,FLOPs 和参数量降到
  • 代价:组与组之间在卷积阶段完全不通气,信息只在同一组内流动,长此以往特征会”各自为政”。

群卷积的隐患

群卷积省下来的算力不是白给的。 越大越省,但组间信息隔离越严重。ShuffleNet 的核心贡献,就是用一个几乎零成本的”通道混洗”来修补这个洞——见 3.3 节。

2.4 招式三:深度卷积(Depthwise Convolution)—— 轻量化的主力

深度卷积是群卷积的极端特例:分组数 直接等于输入通道数 。也就是说,每个输入通道配一个专属的 卷积核,通道之间完全不混合,卷完再沿通道维拼起来。

单独用深度卷积是不行的——它完全没有跨通道的信息融合能力。所以工程上的标准做法是深度卷积 + 1×1 逐点卷积串联,合称深度可分离卷积(Depthwise Separable Convolution)

  • 深度卷积负责”空间滤波”:
  • 逐点卷积负责”通道混合”:

两者相加,再和标准卷积相除:

化简之后得到一个非常优雅的结论:

怎么读这个公式:取最常见的 (3×3 卷积),。如果输出通道数 ,那么整体比值约为 ,也就是计算量降到约九分之一。通道数越多,第一项越小,收益越接近理论上限

这就是为什么 MobileNet 系列敢在移动端疯狂堆通道——反正深度卷积这一层的成本几乎与通道数无关地”打折”。

深度可分离卷积的加速比为什么不是整整 1/9?

因为它是两段结构。第一段深度卷积负责空间滤波,节省来自”不跨通道混合”;第二段 1×1 逐点卷积必须做通道混合,其计算量 相对标准卷积的 恰好是 。所以总节省永远做不到优于 —— 那一项正是逐点卷积留下的”尾巴”。当 很大时这条尾巴可以忽略,比值逼近

2.5 招式四:空洞卷积(Dilated Convolution)

空洞卷积又叫膨胀卷积(atrous convolution),目的是扩大感受野(receptive field)而不增加计算量

做法是在卷积核元素之间插”洞”,洞的间距由**膨胀率(dilation rate)**控制。例如 3×3 卷积取膨胀率 1(相邻元素间隔 1 个像素),其感受野与标准 5×5 卷积相同——但参数量还是 9 个而不是 25 个。

  • 省在哪:参数量和 FLOPs 完全不变,白赚一个更大的感受野。
  • 用在哪:语义分割、实时视频分析这类需要”看得更广”的密集预测任务。

2.6 招式五:Ghost 卷积(Ghost Convolution)

Ghost 卷积来自一个非常朴素的观察:训练好的网络里,很多特征图长得几乎一模一样,彼此像是对方的”幻影(ghost)“。既然如此,何必老老实实把它们全卷出来?

做法是分两步:

  1. 先用一个严格控制输出通道数的标准卷积,产出少量”本体”特征图。
  2. 再对这些本体施加一系列极其廉价的线性变换(比如廉价的深度卷积),批量”变”出更多幻影特征图。
  3. 把本体和幻影沿通道维拼接,得到与标准卷积相同尺寸的输出。

图 2:标准卷积(左)与 Ghost 卷积(右)对比。Ghost 卷积先用少量标准卷积生成”本体”特征,再用廉价的简单线性操作生成大量”幻影”特征拼上去,输出尺寸不变但计算量大降。

2.7 招式六:部分卷积(Partial Convolution)

部分卷积同样出自”特征图冗余”的观察,但切法不同:它只对一小部分输入通道做常规卷积,剩下的通道原封不动直接透传,最后拼接。

和 Ghost 卷积的区别在于:

  • Ghost 是”先少卷、再变多”,多了一道廉价变换;
  • 部分卷积是”只卷一部分、剩下的直接过”,连那道变换都没有,因此内存访问也一起省了

论文明确指出,部分卷积在内存效率端侧资源利用率上优于 Ghost 卷积。这一点后面会引出一个重要结论——FLOPs 不是唯一指标,内存访问往往才是真正的瓶颈

2.8 速查表:什么时候该用哪种卷积

把六种招式放到一起做个横向对比,方便日后查表:

招式省的是典型节省倍数代价 / 注意
逐点卷积 1×1空间聚合(省 相对 不做空间建模,只调通道数
群卷积跨通道连接组间信息隔离,需混洗补救
深度卷积跨通道连接(配合 1×1 得 不能单独用,必须配 1×1
空洞卷积什么都不省参数不变白赚感受野;密集网格效应需留意
Ghost 卷积冗余特征图的生成数倍(依本体/幻影比例)多一道廉价变换,有额外访存
部分卷积计算 + 内存访问依参与卷积的通道比例剩余通道直透,特征复用较弱

一个实践建议

真实工程里几乎不会只用其中一种。最常见的组合拳是:1×1 逐点卷积调通道 + 3×3 深度卷积做空间滤波 + 残差连接稳训练,再按需叠加注意力(GhostNetV2 的 DFC)、结构重参数化(FastViT 的 RepMixer)或通道混洗(ShuffleNet)。先搭出”1×1 + 3×3 DW + skip”这个骨架,再往上加料,是最省心的上手路径。


三、经典轻量卷积网络家族逐个拆解

有了上面六种基础层,再看这些明星网络就非常清楚了:它们不过是”这些层 + 某种连接方式的组合”。

3.1 SqueezeNet:用 1/50 的模型尺寸打平 AlexNet

SqueezeNet 的目标极其朴素:达到 AlexNet 级别的精度,但参数量小得多

它的基本单元叫 Fire 模块,两层结构:

  • Squeeze 层:只用 1×1 逐点卷积,把输入通道数压下来。
  • Expand 层:用一对 1×1 和 3×3 卷积做特征扩展。

成绩:ImageNet Top-1 达到 57.5%,略高于 AlexNet 的 57.2%,而模型尺寸小 50 倍。更妙的是它还特别适合再压缩——配合后续的压缩方法,可以做到模型再小 363~510 倍而精度不降。

记住这个思路

“先压(squeeze)后扩(expand)“是轻量化里反复出现的母题。MobileNetV2 的倒残差、EfficientNet 的 MBConv,骨子里都是它。

3.2 MobileNet 家族:深度可分离卷积的三次进化

MobileNetV1 —— 把深度可分离卷积用到极致。每个基础块就两层:3×3 深度卷积 + 1×1 逐点卷积。 569 M FLOPs / 4.2 M 参数 / ImageNet Top-1 70.6%

MobileNetV2 —— 提出**倒残差(Inverted Residual)**结构。这是整篇综述里最值得记住的结构之一。三层:1×1 逐点卷积(升维)→ 3×3 深度卷积 → 1×1 逐点卷积(降维),并借用了 ResNet 的残差连接。

关键在于”倒”字:

普通残差块(ResNet)倒残差块(MobileNetV2)
通道变化宽 → 窄 → 宽(先压后卷)窄 → 宽 → 窄(先扩后卷)
跳过连接位置连接高维两端连接低维两端

为什么反过来?因为深度卷积的参数太少、表达能力弱,如果先压缩通道再做深度卷积,信息就丢光了。正确做法是先把通道扩上去(比如 6 倍),让深度卷积在”宽敞”的高维空间里做,最后再压回来。这样既拿到了深度卷积的计算红利,又不牺牲表达力。 成绩:300 M FLOPs / 3.4 M 参数 / 72.0%——比 V1 少近一半计算量,精度反而高了 1.4 个点。

MobileNeXt —— 回头审视倒残差块,提出 sandglass(沙漏)块:3×3 深度卷积 → 1×1 逐点 → 1×1 逐点 → 3×3 深度卷积,共四层。在完全相同的 300 M FLOPs / 3.4 M 参数预算下,把精度推到 74.0%,比 MobileNetV2 高 2 个点。

一个重要的读表教训

MobileNeXt 和 MobileNetV2 的 FLOPs、参数量完全一样,精度却差 2 个百分点。这说明:同样预算下结构怎么摆,比预算本身更重要。也说明 FLOPs 这个指标远远不足以刻画网络的优劣。

3.3 ShuffleNet 家族:给群卷积打上”通道混洗”补丁

ShuffleNetV1 —— 它的出发点是修补群卷积的信息隔离问题。做法是在 1×1 群卷积之后插入一个 **channel shuffle(通道混洗)**操作:把各组特征图”洗牌”,让下一层的每个组都能拿到上一层不同组的信息。

这个操作的美妙之处在于它几乎是免费的——只是一次 reshape + transpose,不引入任何参数,FLOPs 增量为零。 成绩:292 M FLOPs / 3.4 M 参数 / 71.5%,在可比 FLOPs 下比 MobileNetV1 高 0.9%

ShuffleNetV2 —— 进一步做了架构改造:先用 **channel split(通道分割)**把输入一分为二,一条支路直接透传(identity),另一条走”1×1 → 3×3 深度卷积 → 1×1”三连,最后拼接再做通道混洗。 成绩:299 M FLOPs / 3.5 M 参数 / 72.6%,比 V1 高 1.1%

图 3:第 2.1 节讨论的高效卷积网络对比,包括 SqueezeNet、MobileNets、ShuffleNets、CondenseNets、GhostNets。准确率均在 ImageNet 上评测,取自各自原论文。注意:这些网络可能使用了不同的训练配方,横向比较仅供参考。

3.4 CondenseNet 家族:给 DenseNet 的密集连接”剪枝”

CondenseNet 建立在 DenseNet 之上。DenseNet 的核心是密集连接(dense connection)——每层都复用前面所有层的特征,信息流极好,但连接数随层数平方增长,冗余严重。

  • CondenseNetV1:提出 learned group convolution(可学习群卷积),在训练中自动学出该保留哪些连接、该剪掉哪些冗余连接——相当于”边训练边结构化剪枝”。成绩:274 M FLOPs / 2.9 M 参数 / 71.0%
  • CondenseNetV2:提出 sparse feature reactivation(SFR,稀疏特征重激活)。每一层学会两件事:(1) 从前层选择性复用最重要的那部分特征;(2) 主动更新一部分前层特征,提高它们在后续层的复用率。成绩:146 M FLOPs / 3.6 M 参数 / 71.9%——注意 FLOPs 只有 V1 的约一半,精度反而更高。

3.5 GhostNet 家族:把”幻影特征”做成一门生意

  • GhostNetV1:就是前面讲的 Ghost 卷积的实例化。141 M FLOPs / 5.2 M 参数 / 73.9%。注意它的 FLOPs 只有 MobileNetV2 的不到一半,精度却高了近 2 个点。
  • GhostNetV2:在 V1 基础上加了一个硬件友好的注意力机制 DFC attention(解耦全连接注意力),可以无缝嵌入 V1 的块中。成绩:167 M FLOPs / 6.1 M 参数 / 75.3%

3.6 FasterNet:这篇综述里最”反直觉”的一记重拳

如果只能从本篇里记住一件事,我建议记 FasterNet 的动机。

它的起点是一个简单到不能再简单的恒等式:

其中分母 FLOPS(FLOPs per Second) 是硬件每秒能完成的浮点运算数,分子 FLOPs 是任务总量。也就是说:

延迟不只看你干了多少活(FLOPs),还要看你干活有多快(FLOPS)。

过去所有工作都在优化分子,FasterNet 是第一个明确说”我要优化分母”的。它基于部分卷积(见 2.7 节)搭建,因为部分卷积同时减少了计算量和内存访问,从而提升了实际 FLOPS。

结果非常有冲击力:对比 GhostNetV1×1.3(0.24 G FLOPs,75.7% Top-1),FasterNet-T1 用了多得多的 0.85 G FLOPs(3.5 倍),精度只高 0.5 个点,但在 ARM 处理器上快了 1.7 倍

常见坑:把 FLOPs 当成延迟的代理指标

这是嵌入式深度学习初学者最容易犯的错误。论文用多个例子反复打脸:

  • PiT 的 FLOPs 比 DeiT 少 3 倍,但在 iPhone 12 上延迟几乎一样(10.99 ms vs 10.56 ms)。
  • 相同 FLOPs 下,MobileNetV2 在三星 Galaxy S21 上比 MobileViTv1 快约 2 倍
  • FasterNet 用 3.5 倍 FLOPs 换来 1.7 倍加速。

原因有三:① 内存访问开销(memory access cost)常常主导延迟;② 多分支结构并行度差,硬件跑不满;③ 某些算子(如 softmax)理论 FLOPs 低但硬件实现极慢。 正确做法:直接在目标硬件上测延迟和能耗,FLOPs 只能用来做粗筛。

3.7 卷积网络家族横向汇总

网络FLOPs参数量ImageNet Top-1核心招式
SqueezeNet57.5%Fire 模块(先压后扩)
MobileNetV1569 M4.2 M70.6%深度可分离卷积
MobileNetV2300 M3.4 M72.0%倒残差 + 残差连接
MobileNeXt300 M3.4 M74.0%Sandglass 块
ShuffleNetV1292 M3.4 M71.5%通道混洗
ShuffleNetV2299 M3.5 M72.6%通道分割 + 混洗
CondenseNetV1274 M2.9 M71.0%可学习群卷积
CondenseNetV2146 M3.6 M71.9%稀疏特征重激活
GhostNetV1141 M5.2 M73.9%Ghost 卷积
GhostNetV2167 M6.1 M75.3%Ghost + DFC 注意力
FasterNet-T10.85 G76.2%*部分卷积,优化 FLOPS

* FasterNet-T1 论文给出的是相对 GhostNetV1×1.3(75.7%)“+0.5%“,此处为推算值。


四、Transformer:先在 NLP 称王,再席卷视觉

4.1 NLP 侧的进化与代价

与卷积网络并行发展的另一条主线是 Transformer,核心武器是多头自注意力(multi-head self-attention)

图 4:Transformer 的关键里程碑。它最早应用于 NLP 任务,近年才在计算机视觉社区流行起来。图中红色标注的是视觉 Transformer。

几个标志性节点:

  • BERT:在 11 项下游 NLP 任务上取得当时的最优表现。
  • GPT-3:把 Transformer 规模化到 1750 亿参数,在 45 TB 压缩明文数据上预训练,几乎在所有下游 NLP 任务上取得突破,而且不需要针对具体任务微调
  • GPT-4 / ChatGPT:进一步拉开差距,被广泛集成到真实语言服务中。

4.2 端侧的残酷现实

论文给了一个让人清醒的数字:翻译一句只有 30 个词的短句,一个典型 Transformer 模型需要执行 13 G FLOPs,在树莓派上要跑 20 秒

而图像分类在同类设备上通常是毫秒级。这正是为什么在端侧跑 NLP 负载远比跑视觉负载少见——NLP 推理延迟天然就是秒级的

已有的高效 NLP Transformer 包括 TinyBERT、MobileBERT、DistilBERT、Linformer、Reformer,共同思路是缓解内存瓶颈、提高并行度


五、视觉 Transformer(ViT)与它的轻量化

5.1 ViT 的思路简单得令人惊讶

ViT(Vision Transformer) 2020 年 6 月提出,至今引用超过 2 万次。它的想法只有三步:

  1. 把输入图像切成一系列固定大小的图块(patch)
  2. 对每个图块做线性嵌入(linear embedding),变成一个向量;
  3. 把这一串向量当作”词序列”,直接喂给标准 Transformer 编码器。

图 5:Vision Transformer(ViT)总览——(1) 切图块、(2) 线性嵌入、(3) 送入编码器。

没有免费的午餐:ViT 的强性能同样建立在巨大的计算复杂度上,这严重阻碍了它在资源受限端侧设备上的部署。

5.2 高效视觉 Transformer 逐个看

LeViT(混合架构):在卷积网络上搭建,四项改造——① 用注意力做下采样的多阶段架构;② 计算高效的图块描述器,减少浅层特征数;③ 用逐头平移不变注意力偏置替代 ViT 的位置编码;④ 高效的 MLP 注意力块。406 M FLOPs / 9.2 M 参数 / 78.6%

MobileFormer(并联架构):把 MobileNetV2 和 Transformer 并联起来,用一条双向桥(two-way bridge)连接,把设计范式从”串联”改成”并联”。Mobile 分支走倒残差块提局部特征,Former 分支走多头注意力提全局特征,两者持续通信融合。294 M FLOPs / 11.4 M 参数 / 77.9%

MobileViT 系列:明确以低延迟而非低 FLOPs 为目标。

  • v1:用新块同时编码局部与全局特征,用 Transformer 的全局处理替换卷积的局部处理。5.6 M 参数 / 78.4%
  • v2:引入线性复杂度的可分离自注意力,论文报告比 v1 高 0.8%,且在 iPhone 12 上快 3.2 倍
  • v3:两处简单改造——把 3×3 卷积换成 1×1、加宽网络块。927 M FLOPs / 76.7%,相似 FLOPs 下比 v1 高 1.9%。

EfficientViT:一针见血地指出——ViT 的复杂度瓶颈来自被过度使用的 softmax 注意力。它用**增强线性注意力(enhanced linear attention)**替代 softmax 注意力,在保持局部特征提取能力的同时大幅降复杂度。406 M FLOPs / 7.9 M 参数 / 78.6%

EdgeViT:从端侧部署视角出发,用标准原语对自注意力做最优分解,使其能在真实硬件上高效执行。600 M FLOPs / 4.1 M 参数 / 74.4%——在三星 Galaxy S21 的可比延迟约束下,比 MobileNetV2 高 2.4%

EdgeNeXt:CNN 与 ViT 的混合体,提出 SDTA(split depthwise transpose attention,分离深度转置注意力)编码器,在不增加 FLOPs 和参数量的前提下扩大 CNN 的有限感受野。538 M FLOPs / 2.3 M 参数 / 75.0%

CastlingViT:一个非常工程化的巧思——训练时同时用线性角注意力和掩码 softmax 二次注意力,推理时只保留线性角注意力。类似”训练时多学一套,部署时丢掉贵的那套”。490 M FLOPs / 10.5 M 参数 / 79.6%(本篇最高精度)。

FastViT:混合架构,核心是 RepMixer 算子,利用**结构重参数化(structural reparameterization)**删掉不重要的跳连以降低内存访问成本;同时用训练时过参数化和大核卷积提精度。700 M FLOPs / 3.6 M 参数 / 75.6%

结构重参数化:一个非常好用的通用技巧

思想就一句话:训练时和推理时用不同的结构。训练时保留多分支、多算子以拿到更好的优化性质和更高精度;推理时通过数学等价变换把它们合并成单路结构,从而省掉内存访问和分支开销。这样”精度按训练结构算,延迟按推理结构算”。FastViT 用的就是这一招。

图 6:第 2.2 节讨论的高效视觉 Transformer 对比,包括 LeViT、MobileFormer、MobileViTs、EfficientViT、EdgeViT、EdgeNeXt、CastlingViT、FastViT。准确率在 ImageNet 上评测,取自各自论文,训练配方可能不同。

5.3 视觉侧横向汇总

网络FLOPs参数量Top-1关键招式
LeViT406 M9.2 M78.6%多阶段 + 注意力下采样
MobileFormer294 M11.4 M77.9%CNN 与 Transformer 并联
MobileViTv15.6 M78.4%局部/全局混合编码
MobileViTv275.6%可分离自注意力(线性)
MobileViTv3927 M76.7%1×1 替换 + 加宽
EfficientViT406 M7.9 M78.6%增强线性注意力
EdgeViT600 M4.1 M74.4%自注意力最优分解
EdgeNeXt538 M2.3 M75.0%SDTA 编码器
CastlingViT490 M10.5 M79.6%训练二次 / 推理线性
FastViT700 M3.6 M75.6%RepMixer + 结构重参数化

六、作者给出的五个前瞻判断

论文在第 2 章末尾专门列了手工网络设计的未来方向,我认为这五条对初学者规划学习路线很有价值:

  1. 硬件感知优化(Hardware-Aware Optimization)。别再只盯着 FLOPs,直接优化延迟、能耗这类能真正造福端侧部署的指标。注意力机制虽能提精度,但引入额外参数、难以并行,对满是自注意力的 Transformer 尤其不友好。
  2. 可解释性(Interpretability & Explainability)。现有网络基本是”试错试出来的”。因为缺乏可解释性,找一个好的结构必须反复训练、反复评测,代价巨大。若能在理论上理解”为什么这个结构好”,设计过程会轻松很多——这也正是第 ② 篇 NAS 想要自动化掉的部分。
  3. 混合多模态网络(Hybrid Multi-modal Networks)。CNN 在端侧效率高但精度略逊;ViT 精度高但自注意力难以并行。图神经网络(GNN)经适当工程化后也能在视觉任务上竞争。更关键的是,混合架构天然能处理文本、图像、音频等多种模态——CNN 擅长空间数据(图像),Transformer 擅长序列数据(文本)。
  4. 更简单的训练配方(Simpler Training Recipes)。ViT 的强性能高度依赖高级训练配方:在更大数据集上预训练、更多训练轮数、更强数据增强、更强正则化。例如 ViT 先在 ImageNet-21k(21000 类)和 JFT 上预训练,再在 ImageNet(1000 类)上微调。这大幅推高了训练成本。如何用更省的方式、更简单的配方训练视觉 Transformer,是一个明确的方向。
  5. 对抗鲁棒性(Adversarial Robustness)。高效网络(尤其是视觉 Transformer)对输入扰动更敏感、更容易被对抗样本攻击。在自动驾驶这类复杂不可预测的环境中,这是个安全问题。设计”既高效又鲁棒”的网络是必答题。

七、本篇小结

回顾一下本篇的知识骨架:

  • 动机:端侧要实时、要隐私、要离线,但 ResNet50 这样的网络要 4 G FLOPs / 87 MB,端侧吃不下。
  • 六种基础招式:逐点卷积(1×1,省 倍)、群卷积(省 倍)、深度卷积(省到 )、空洞卷积(白赚感受野)、Ghost 卷积(本体 + 廉价幻影)、部分卷积(卷一半 + 直透一半)。
  • 六种经典网络:SqueezeNet(先压后扩)、MobileNet(深度可分离 → 倒残差 → 沙漏)、ShuffleNet(通道混洗)、CondenseNet(学出来的稀疏连接)、GhostNet(幻影特征)、FasterNet(优化 FLOPS 而不是 FLOPs)。
  • 视觉 Transformer:ViT 三步走,复杂度瓶颈在 softmax 注意力;轻量化路线包括线性注意力(EfficientViT)、训练/推理切换(CastlingViT)、结构重参数化(FastViT)、CNN/ViT 并联或混合(MobileFormer、EdgeNeXt)。
  • 一条贯穿全文的警告:FLOPs 少 ≠ 跑得快。

常见坑(汇总)

  1. 把 FLOPs 当延迟。反例:PiT 比 DeiT 少 3 倍 FLOPs 但延迟相同;FasterNet 用 3.5 倍 FLOPs 换来 1.7 倍加速。
  2. 以为参数量小就省内存。推理时的峰值内存主要由**激活值(activation)**决定,多分支结构会显著抬高它,而参数量只反映存储占用。
  3. 拿不同论文的数字直接横向比。图 3、图 6 的原图说明明确写了”可能使用不同的训练配方”——训练轮数、数据增强、正则化都会显著改变精度。
  4. 以为深度卷积可以单独用。它不做跨通道混合,必须配 1×1 逐点卷积才能组成完整的深度可分离卷积。
  5. 以为群卷积分组越多越好 越大省得越多,但组间信息隔离越严重——需要通道混洗之类的机制来补。

通关标准

  • 能独立推导 ,并解释两项各自的物理含义。
  • 能说清倒残差块”倒”在哪里、以及为什么要倒过来(先扩维再深度卷积,避免信息在低维丢失)。
  • 能解释通道混洗解决的是什么问题、为什么它几乎是零成本的。
  • 能举出至少两个”FLOPs 少但延迟没降”的真实反例,并说明原因(内存访问 / 并行度 / 算子实现)。
  • 能说清 Ghost 卷积与部分卷积的异同,以及为什么后者内存效率更高。
  • 面对一个新的轻量网络名(如 EfficientViT、FastViT),能快速定位它的”招式”属于哪一类。

下一篇

手工设计依赖专家经验反复试错,成本高、上限受限于人的想象力。第 ② 篇 自动化网络设计 NAS 会讲:NAS 到底在搜索什么、三种主流搜索策略(强化学习 / 进化算法 / 可微分)各自怎么工作、为什么要花那么大力气加速搜索,以及”只搜一次”是怎么做到的。