1、MobileNet家族概览:从V1到V3的演进之路,以及为什么嵌入式设备首选MobileNet

大家好,我是你们的老朋友。今天咱们正式开讲《MobileNet在嵌入式设备上的移植与调优实战》的第一章。

说实话,做嵌入式AI这几年,我接触最多的轻量级网络就是MobileNet。从V1到V3,我几乎每个版本都在实际项目里摸爬滚打过。今天就跟大家聊聊,这个家族到底是怎么演进的,以及——为什么嵌入式设备首选它。

1.1 为什么嵌入式设备需要“轻量级”网络?

先问大家一个问题:你手头的嵌入式设备,算力有多少?

我见过很多刚入行的朋友,上来就想把ResNet-152塞进STM32里。结果呢?内存爆了,推理时间几十秒,根本没法用。

嵌入式设备的痛点很明显:

  • 算力有限:没有GPU,只有CPU或者NPU,主频通常几百MHz
  • 内存紧张:RAM可能只有几MB到几十MB
  • 功耗敏感:电池供电,不能一直跑满
  • 实时性要求:比如目标检测,一秒钟要处理30帧

所以,我们需要一个“小而快”的网络。MobileNet就是为此而生的。

核心观点:MobileNet的设计哲学,就是用更少的计算量,换取可接受的精度。它不是追求极致准确率,而是在“算力-精度-速度”三角中找到一个最佳平衡点。

1.2 MobileNet V1:深度可分离卷积的“开山之作”

2017年,Google团队提出了MobileNet V1。我记得当时看到这篇论文,第一反应是:原来卷积还能这么玩?

V1的核心创新,就是深度可分离卷积(Depthwise Separable Convolution)。

咱们来拆解一下:

  • 标准卷积:一个卷积核同时处理所有通道,计算量 = 输入通道数 × 输出通道数 × 卷积核大小 × 特征图大小
  • 深度可分离卷积:分成两步走
    1. 深度卷积:每个通道单独用一个卷积核处理
    2. 逐点卷积:用1×1卷积把通道信息融合起来

你想想看,这样一拆,计算量能降多少?

举个例子:输入是112×112×32,输出是112×112×64,卷积核大小3×3。

  • 标准卷积计算量:32 × 64 × 3 × 3 × 112 × 112 ≈ 2.3亿次
  • 深度可分离卷积计算量:32 × 3 × 3 × 112 × 112 + 32 × 64 × 1 × 1 × 112 × 112 ≈ 0.29亿次

计算量直接降到原来的1/8左右!

我的经验:在实际项目中,V1的推理速度确实快,但精度损失也比较明显。比如在ImageNet上,V1的Top-1准确率大约70.6%,比标准卷积低了3-5个百分点。不过对于很多嵌入式场景,这个精度已经够用了。

1.3 MobileNet V2:倒残差与线性瓶颈

V1虽然快,但有个问题:深度卷积的参数量太少,表达能力有限。V2在2018年提出,主要解决了这个问题。

V2引入了两个关键设计:

  • 倒残差结构(Inverted Residual):先升维,再深度卷积,最后降维。跟ResNet的残差结构正好相反。
  • 线性瓶颈(Linear Bottleneck):在降维后的层去掉ReLU激活函数,避免信息丢失。

为什么会这样设计?

我个人的理解是:低维空间里,ReLU会“杀死”太多信息。你想想看,ReLU会把负数全部置零,如果特征维度本来就低,那信息损失就非常严重。所以V2在瓶颈层用线性激活,保留更多信息。

V2的效果怎么样?

模型 计算量(MAdd) 参数量 Top-1准确率
MobileNet V1 569M 4.2M 70.6%
MobileNet V2 300M 3.4M 72.0%

你看,V2的计算量更小,参数量更少,准确率反而更高了。这就是架构设计的魅力。

避坑指南:我曾经在移植V2到某个低端NPU时,发现倒残差结构中的升维操作导致中间特征图内存暴增。如果你的设备内存紧张,建议先评估一下中间层的峰值内存占用。

1.4 MobileNet V3:NAS搜索与硬件感知

到了V3(2019年),Google开始用神经网络架构搜索(NAS)来设计网络。说白了,就是让机器自己去试,找到最优的结构。

V3的主要改进:

  • NAS搜索:自动搜索最优的层结构和通道数
  • 硬件感知:针对不同硬件(CPU、GPU、NPU)优化
  • 新的激活函数:h-swish,计算更高效
  • SE模块:Squeeze-and-Excitation,注意力机制,提升精度

V3有两个版本:

  • V3-Large:适合算力稍强的设备,准确率接近ResNet-50
  • V3-Small:适合资源极度受限的设备,比如智能手表

我记得有个项目,需要在Cortex-M4上做人脸检测。V3-Small的模型大小只有2.5MB,推理一次只要50ms,效果出奇的好。

1.5 为什么嵌入式设备首选MobileNet?

说了这么多,咱们总结一下。我个人认为,MobileNet有这几个不可替代的优势:

  1. 计算量小:深度可分离卷积把计算量降到极致
  2. 模型小:参数量少,适合存储空间有限的设备
  3. 推理快:在CPU上也能跑出不错的帧率
  4. 生态好:TensorFlow、PyTorch、ONNX、TFLite都原生支持
  5. 版本丰富:从V1到V3,从Large到Small,总有一款适合你

一句话总结:如果你要在嵌入式设备上做视觉任务,又不想在模型选型上纠结太久,选MobileNet准没错。它可能不是最准的,但一定是最稳的。

1.6 本章小结

这一章我们快速过了一遍MobileNet家族的演进:

  • V1:深度可分离卷积,奠定轻量级基础
  • V2:倒残差+线性瓶颈,精度提升
  • V3:NAS搜索+硬件感知,极致优化

下一章,我会带大家动手搭建MobileNet V2的完整网络结构,并讲解如何在嵌入式设备上做前向推理。到时候咱们再细聊。

嗯,今天就到这里。有问题欢迎在评论区留言,咱们下期见。

课后思考:MobileNet V2的倒残差结构,为什么先升维再降维?如果反过来,先降维再升维,会有什么问题?