这是 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 亿次 FLOPs、2500 万参数,处理单张输入图像需要 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 读一个字节消耗的能量,是在片上做一次乘加的几十到上百倍。这意味着:一个”计算量很小但来回搬数据”的算子,实际能耗可能远高于一个”计算量大但数据复用率高”的算子。
这直接解释了本篇里三个看似反直觉的现象:
- 多分支结构慢(cell-based 搜索空间在硬件上吃亏)——分支多了就要保存更多中间结果,内存访问量暴涨;
- FasterNet 用 3.5 倍 FLOPs 换来 1.7 倍加速——它砍掉的主要是内存访问,不是计算;
- 同样 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)“。既然如此,何必老老实实把它们全卷出来?
做法是分两步:
- 先用一个严格控制输出通道数的标准卷积,产出少量”本体”特征图。
- 再对这些本体施加一系列极其廉价的线性变换(比如廉价的深度卷积),批量”变”出更多幻影特征图。
- 把本体和幻影沿通道维拼接,得到与标准卷积相同尺寸的输出。
图 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 | 核心招式 |
|---|---|---|---|---|
| SqueezeNet | — | — | 57.5% | Fire 模块(先压后扩) |
| MobileNetV1 | 569 M | 4.2 M | 70.6% | 深度可分离卷积 |
| MobileNetV2 | 300 M | 3.4 M | 72.0% | 倒残差 + 残差连接 |
| MobileNeXt | 300 M | 3.4 M | 74.0% | Sandglass 块 |
| ShuffleNetV1 | 292 M | 3.4 M | 71.5% | 通道混洗 |
| ShuffleNetV2 | 299 M | 3.5 M | 72.6% | 通道分割 + 混洗 |
| CondenseNetV1 | 274 M | 2.9 M | 71.0% | 可学习群卷积 |
| CondenseNetV2 | 146 M | 3.6 M | 71.9% | 稀疏特征重激活 |
| GhostNetV1 | 141 M | 5.2 M | 73.9% | Ghost 卷积 |
| GhostNetV2 | 167 M | 6.1 M | 75.3% | Ghost + DFC 注意力 |
| FasterNet-T1 | 0.85 G | — | 76.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 万次。它的想法只有三步:
- 把输入图像切成一系列固定大小的图块(patch);
- 对每个图块做线性嵌入(linear embedding),变成一个向量;
- 把这一串向量当作”词序列”,直接喂给标准 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 | 关键招式 |
|---|---|---|---|---|
| LeViT | 406 M | 9.2 M | 78.6% | 多阶段 + 注意力下采样 |
| MobileFormer | 294 M | 11.4 M | 77.9% | CNN 与 Transformer 并联 |
| MobileViTv1 | — | 5.6 M | 78.4% | 局部/全局混合编码 |
| MobileViTv2 | — | — | 75.6% | 可分离自注意力(线性) |
| MobileViTv3 | 927 M | — | 76.7% | 1×1 替换 + 加宽 |
| EfficientViT | 406 M | 7.9 M | 78.6% | 增强线性注意力 |
| EdgeViT | 600 M | 4.1 M | 74.4% | 自注意力最优分解 |
| EdgeNeXt | 538 M | 2.3 M | 75.0% | SDTA 编码器 |
| CastlingViT | 490 M | 10.5 M | 79.6% | 训练二次 / 推理线性 |
| FastViT | 700 M | 3.6 M | 75.6% | RepMixer + 结构重参数化 |
六、作者给出的五个前瞻判断
论文在第 2 章末尾专门列了手工网络设计的未来方向,我认为这五条对初学者规划学习路线很有价值:
- 硬件感知优化(Hardware-Aware Optimization)。别再只盯着 FLOPs,直接优化延迟、能耗这类能真正造福端侧部署的指标。注意力机制虽能提精度,但引入额外参数、难以并行,对满是自注意力的 Transformer 尤其不友好。
- 可解释性(Interpretability & Explainability)。现有网络基本是”试错试出来的”。因为缺乏可解释性,找一个好的结构必须反复训练、反复评测,代价巨大。若能在理论上理解”为什么这个结构好”,设计过程会轻松很多——这也正是第 ② 篇 NAS 想要自动化掉的部分。
- 混合多模态网络(Hybrid Multi-modal Networks)。CNN 在端侧效率高但精度略逊;ViT 精度高但自注意力难以并行。图神经网络(GNN)经适当工程化后也能在视觉任务上竞争。更关键的是,混合架构天然能处理文本、图像、音频等多种模态——CNN 擅长空间数据(图像),Transformer 擅长序列数据(文本)。
- 更简单的训练配方(Simpler Training Recipes)。ViT 的强性能高度依赖高级训练配方:在更大数据集上预训练、更多训练轮数、更强数据增强、更强正则化。例如 ViT 先在 ImageNet-21k(21000 类)和 JFT 上预训练,再在 ImageNet(1000 类)上微调。这大幅推高了训练成本。如何用更省的方式、更简单的配方训练视觉 Transformer,是一个明确的方向。
- 对抗鲁棒性(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 少 ≠ 跑得快。
常见坑(汇总)
- 把 FLOPs 当延迟。反例:PiT 比 DeiT 少 3 倍 FLOPs 但延迟相同;FasterNet 用 3.5 倍 FLOPs 换来 1.7 倍加速。
- 以为参数量小就省内存。推理时的峰值内存主要由**激活值(activation)**决定,多分支结构会显著抬高它,而参数量只反映存储占用。
- 拿不同论文的数字直接横向比。图 3、图 6 的原图说明明确写了”可能使用不同的训练配方”——训练轮数、数据增强、正则化都会显著改变精度。
- 以为深度卷积可以单独用。它不做跨通道混合,必须配 1×1 逐点卷积才能组成完整的深度可分离卷积。
- 以为群卷积分组越多越好。 越大省得越多,但组间信息隔离越严重——需要通道混洗之类的机制来补。
通关标准
- 能独立推导 ,并解释两项各自的物理含义。
- 能说清倒残差块”倒”在哪里、以及为什么要倒过来(先扩维再深度卷积,避免信息在低维丢失)。
- 能解释通道混洗解决的是什么问题、为什么它几乎是零成本的。
- 能举出至少两个”FLOPs 少但延迟没降”的真实反例,并说明原因(内存访问 / 并行度 / 算子实现)。
- 能说清 Ghost 卷积与部分卷积的异同,以及为什么后者内存效率更高。
- 面对一个新的轻量网络名(如 EfficientViT、FastViT),能快速定位它的”招式”属于哪一类。
自测 1:深度可分离卷积把 3×3 标准卷积的计算量降为约 1/9,这个"1/9"从哪来?是不是精确等于 1/9?
来自公式 。当 时第二项是 ;第一项 是 1×1 逐点卷积留下的”尾巴”,取决于输出通道数 。所以不是精确等于 1/9,而是略大于 1/9; 越大越接近 1/9。以 计算,比值约 0.115。
自测 2:MobileNetV2 的倒残差块为什么叫"倒"?它解决了 MobileNetV1 的什么问题?
普通残差块是”宽→窄→宽”(先压缩通道、在窄通道上卷积、再还原),倒残差是”窄→宽→窄”(先用 1×1 升维、在高维做 3×3 深度卷积、再用 1×1 降维)。解决的是:深度卷积参数少、表达力弱,如果先压通道再做深度卷积,信息会大量丢失;先升维(如 6 倍)就能让深度卷积在高维空间充分工作。同时它也借用了残差连接来稳定训练。效果是 300 M FLOPs 下比 V1(569 M)精度还高 1.4 个点。
自测 3:ShuffleNetV1 为什么要引入通道混洗?它和群卷积是什么关系?
群卷积把输入按通道分组、组内独立卷积,计算量降到 ,但组与组之间没有信息交换,长期下来各组特征会”各自为政”,损害表达力。通道混洗在群卷积之后把各组的通道重新洗牌,让下一层的每个组都能接收上一层不同组的信息。它只是一次 reshape + transpose,不引入任何参数、FLOPs 增量为零,所以是”几乎免费的补丁”。
自测 4:为什么 FasterNet 用了 3.5 倍的 FLOPs,反而比 GhostNet 快 1.7 倍?
因为 。FasterNet 基于部分卷积,只卷积一小部分通道、其余直透,同时大幅降低了内存访问量,从而提高了实际 FLOPS(每秒有效浮点运算数)。FLOPs(总工作量)增加了 3.5 倍,但 FLOPS(干活速率)提升得更多,最终延迟反而下降到约 1/1.7。这直接说明 FLOPs 不能作为延迟的代理指标。
自测 5:论文认为 ViT 系列的复杂度瓶颈主要在哪?有哪几条不同的破解路线?
主要在被过度使用的 softmax 注意力(EfficientViT 明确指出)。破解路线至少有四条:① 用线性/增强线性注意力替代 softmax 注意力(EfficientViT、MobileViTv2 的可分离自注意力);② 训练时用二次注意力、推理时切换到线性注意力(CastlingViT 的”王车易位”);③ 用结构重参数化把多分支合并成单路,降低内存访问(FastViT 的 RepMixer);④ 干脆和 CNN 并联或混合,用 CNN 扛局部、Transformer 扛全局(MobileFormer、EdgeNeXt、LeViT)。
下一篇
手工设计依赖专家经验反复试错,成本高、上限受限于人的想象力。第 ② 篇 自动化网络设计 NAS 会讲:NAS 到底在搜索什么、三种主流搜索策略(强化学习 / 进化算法 / 可微分)各自怎么工作、为什么要花那么大力气加速搜索,以及”只搜一次”是怎么做到的。