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 选型决策树
说了这么多,到底怎么选?我给你一个简单的决策流程——
- 先看芯片算力:如果NPU算力低于1 TOPS,直接选MobileNet-SSD
- 再看帧率要求:如果要求≥60 FPS,优先YOLOv8n或MobileNet-SSD
- 再看精度要求:如果mAP要求≥30%,排除MobileNet-SSD
- 最后看部署难度:如果芯片比较老(如海思3516、RV1126),选YOLOv5s
你想想看,是不是这个道理?选型不是比参数,而是比“匹配度”。
3.7 实战建议:先跑一个“最小可行模型”
我个人习惯,在正式项目开始前,会花一天时间做一件事——把三个模型都跑一遍。
不是跑完整训练,而是用预训练模型转成ONNX,再转成芯片支持的格式(如RKNN、TensorRT),然后测帧率和精度。
这一步花不了多少时间,但能帮你避免后面的大坑。我曾经有个项目,选型时觉得YOLOv8n肯定没问题,结果转RKNN时发现某个算子不支持,折腾了两天才搞定。如果提前跑一遍,就不会这么被动了。
小技巧:
如果你时间紧,可以直接用YOLOv8n。它在大多数芯片上表现都不错。实在不行,再降级到MobileNet-SSD或升级到YOLOv5s。
3.8 本章小结
嗯,这一章的内容就这些。核心就三点——
- 模型复杂度(GFLOPs)和帧率不是线性关系,访存效率更重要
- YOLOv8n是当前最均衡的选择,YOLOv5s适合老芯片,MobileNet-SSD适合极致帧率
- 选型前一定要跑一遍实际推理,别只看理论参数
下一章,我会带你手把手做模型转换和量化。到时候你会发现,选型只是第一步,真正的坑都在后面。
公众号:蓝海资料掘金营,微信deep3321