3. 算法选型基础:轻量化网络对比

做嵌入式目标检测,第一步不是写代码,而是选模型。

我见过太多人,一上来就选个YOLOv8s,结果板子跑不起来。或者选个MobileNet-SSD,精度又差得没法用。说白了,选型就是一场平衡游戏——你得在算力、内存、帧率、精度之间找到那个“刚刚好”的点。

这一章,我就拿三个最常用的轻量化网络——YOLOv8n、YOLOv5s、MobileNet-SSD,给你掰开揉碎讲清楚。它们各自适合什么场景,为什么适合,以及你该怎么选。

3.1 三个选手的基本盘

先看一张表,心里有个底。

模型 参数量 计算量 (GFLOPs) 输入尺寸 mAP@0.5 (COCO) 典型帧率 (RK3588)
YOLOv8n 3.2M 8.7 640x640 37.3% ~60 FPS
YOLOv5s 7.2M 16.5 640x640 36.7% ~45 FPS
MobileNet-SSD 5.5M 2.4 300x300 22.0% ~90 FPS

嗯,数据摆在这,但光看数字没用。你得知道这些数字背后意味着什么。

3.2 模型复杂度与帧率的关系

先讲一个核心概念:计算量(GFLOPs)和帧率不是线性关系

为什么?因为嵌入式设备上,瓶颈往往不在算力,而在内存带宽和访存模式。我举个例子——

YOLOv5s的GFLOPs是16.5,YOLOv8n是8.7,差了将近一倍。但实际帧率呢?YOLOv5s跑45 FPS,YOLOv8n跑60 FPS,差距只有33%。

为什么会这样?

因为YOLOv8n用了更高效的C2f模块,减少了特征图拼接时的内存搬运。说白了,它不光算得快,还“搬得少”。

核心结论:

  • GFLOPs低 ≠ 帧率高,还要看访存效率
  • 模型结构越“规整”,对NPU越友好
  • 输入分辨率降低一半,帧率可能翻倍不止

我个人习惯,在选型前会先跑一个“带宽测试”。用板子自带的benchmark工具,测一下模型的实际推理时间。光看理论GFLOPs,容易踩坑。

3.3 YOLOv8n:新秀,但很稳

YOLOv8n是Ultralytics在2023年推出的。它的特点是:结构新、精度高、部署友好

它用了C2f模块替代了YOLOv5的C3模块。C2f说白了就是把特征图拆成两路,一路直接传,一路经过卷积,最后再拼起来。这样做的好处是——梯度流更丰富,训练时收敛更快。

但注意,C2f在推理时其实比C3要快。因为它的并行度更高,对NPU的利用率更好。

我的经验:

如果你用的是RK3588或Jetson Orin这类带NPU的芯片,YOLOv8n是首选。它的算子基本都能被NPU原生支持,不需要手动改图。我曾经在一个项目中,直接把YOLOv8n的ONNX模型丢到RKNN上,一次跑通,帧率稳定在55 FPS以上。

3.4 YOLOv5s:老兵不死

YOLOv5s虽然名字里带个“s”,但参数量是YOLOv8n的两倍多。它用的是C3模块,结构相对传统。

但为什么还有人用?

因为生态成熟。YOLOv5s的预训练模型多,社区资源丰富,各种量化工具、剪枝工具都优先支持它。如果你做的是工业项目,追求稳定而不是最新,YOLOv5s是个不错的选择。

我记得有一次,客户要求模型必须在海思3559A上跑。YOLOv8n的某些算子不支持,换成YOLOv5s后,稍微改了一下检测头,就顺利部署了。

避坑指南:

我曾经在RK3399上试过YOLOv5s,帧率只有15 FPS。后来发现是输入分辨率太高(640x640)。降到416x416后,帧率到了28 FPS,精度只掉了1.2%。所以,不要死守640x640,根据你的算力灵活调整。

3.5 MobileNet-SSD:轻量之王,但精度是硬伤

MobileNet-SSD,说白了就是MobileNet做骨干网络,加上SSD检测头。它的计算量只有2.4 GFLOPs,是YOLOv8n的四分之一。

帧率呢?在RK3588上能跑到90 FPS以上。如果你做的是实时性要求极高的场景,比如无人机避障、高速抓拍,MobileNet-SSD是唯一的选择。

但代价也很明显——mAP只有22%。这意味着什么?

  • 小目标基本检测不到
  • 遮挡目标容易漏检
  • 类别多的时候,误检率飙升

所以,MobileNet-SSD只适合目标大、背景简单、类别少的场景。比如人脸检测、二维码识别、简单物体计数。

一句话总结:

MobileNet-SSD是“快枪手”,但打不准。YOLOv5s是“老黄牛”,稳但慢。YOLOv8n是“全能选手”,又快又准,但需要芯片支持。

3.6 选型决策树

说了这么多,到底怎么选?我给你一个简单的决策流程——

  1. 先看芯片算力:如果NPU算力低于1 TOPS,直接选MobileNet-SSD
  2. 再看帧率要求:如果要求≥60 FPS,优先YOLOv8n或MobileNet-SSD
  3. 再看精度要求:如果mAP要求≥30%,排除MobileNet-SSD
  4. 最后看部署难度:如果芯片比较老(如海思3516、RV1126),选YOLOv5s

你想想看,是不是这个道理?选型不是比参数,而是比“匹配度”。

3.7 实战建议:先跑一个“最小可行模型”

我个人习惯,在正式项目开始前,会花一天时间做一件事——把三个模型都跑一遍

不是跑完整训练,而是用预训练模型转成ONNX,再转成芯片支持的格式(如RKNN、TensorRT),然后测帧率和精度。

这一步花不了多少时间,但能帮你避免后面的大坑。我曾经有个项目,选型时觉得YOLOv8n肯定没问题,结果转RKNN时发现某个算子不支持,折腾了两天才搞定。如果提前跑一遍,就不会这么被动了。

小技巧:

如果你时间紧,可以直接用YOLOv8n。它在大多数芯片上表现都不错。实在不行,再降级到MobileNet-SSD或升级到YOLOv5s。

3.8 本章小结

嗯,这一章的内容就这些。核心就三点——

  • 模型复杂度(GFLOPs)和帧率不是线性关系,访存效率更重要
  • YOLOv8n是当前最均衡的选择,YOLOv5s适合老芯片,MobileNet-SSD适合极致帧率
  • 选型前一定要跑一遍实际推理,别只看理论参数

下一章,我会带你手把手做模型转换和量化。到时候你会发现,选型只是第一步,真正的坑都在后面。

公众号:蓝海资料掘金营,微信deep3321