第1章:经典目标检测算法选型对比

做嵌入式AI算法移植这些年,我最大的感触就是:选型定生死。算法选对了,后面移植工作顺风顺水;选错了,光模型压缩就能让你怀疑人生。

今天咱们就来聊聊YOLOv5/v8、SSD、EfficientDet这三类经典算法。我会结合自己的实战经验,告诉你为什么YOLO系列在嵌入式移植中几乎成了「默认选项」。

1.1 三大算法核心差异速览

先看一张对比表,心里有个底:

对比维度 YOLOv5/v8 SSD EfficientDet
核心思想 单阶段+Anchor-Free 单阶段+多尺度特征 EfficientNet+BiFPN
推理速度 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐
模型体积 小(n/s/m/l/x) 中等 大(依赖EfficientNet)
嵌入式友好度 极高 较高 一般
部署生态 NCNN/TensorRT/MNN全支持 部分支持 支持有限

嗯,光看表格你可能觉得「YOLO全面胜出啊」。但实际选型没这么简单,咱们一个一个拆开说。

1.2 SSD:老将的尴尬

SSD(Single Shot MultiBox Detector)是2016年的经典算法。说实话,我在2018年做第一个嵌入式项目时用的就是SSD。

它的优点很明确:

  • 结构简单,VGG或MobileNet做backbone
  • 多尺度特征图检测,对小目标有一定效果
  • 训练相对容易收敛

但问题也很致命:

  • Anchor设计太死板。我曾经在检测长条形红外目标时,调Anchor调了整整两周,效果还是不理想
  • 特征融合方式粗糙。SSD只是简单地把不同层的特征图拿出来用,没有做有效的融合
  • 部署时算子兼容性差。尤其是Focal Loss和L2 Normalization层,很多嵌入式框架不支持
⚠️ 避坑提醒: 如果你现在还在考虑用SSD做嵌入式项目,我建议你慎重。除非你的目标非常规整(比如车牌检测),否则SSD的Anchor设计会让你在移植时吃尽苦头。

1.3 EfficientDet:精度怪兽,但移植噩梦

EfficientDet是Google在2020年提出的。它的核心卖点是BiFPN(双向特征金字塔网络)和EfficientNet backbone。

精度确实高——在COCO数据集上,EfficientDet-D7的mAP一度是SOTA。但问题来了:

  • 模型太大了。D7版本参数量超过50M,FP16推理都需要1GB以上内存
  • BiFPN结构复杂,包含大量加权求和和深度可分离卷积
  • EfficientNet的Swish激活函数在嵌入式端优化困难

我记得有一次,客户要求把EfficientDet-D3移植到RK3588上。模型量化后精度掉了8个点,反复调了两个月,最后还是换成了YOLOv5s。

💡 我的经验: EfficientDet更适合云端或高端边缘设备(比如Jetson AGX Orin)。对于中低端嵌入式平台(RK35xx、算能、地平线),它的性价比远不如YOLO。

1.4 YOLOv5/v8:为什么是嵌入式首选?

说白了,YOLO系列能成为嵌入式目标检测的事实标准,靠的是三点:

1.4.1 模型结构天生适合移植

YOLOv5/v8的核心组件非常「干净」:

  • Conv+BN+SiLU(或ReLU)——所有嵌入式框架都原生支持
  • CSP结构——参数量少,计算量低
  • SPPF——用3个5x5最大池化替代SPP,速度翻倍

你想想看,一个模型里全是标准算子,移植时根本不需要写自定义算子。这在嵌入式开发中太重要了——我见过太多项目因为自定义算子无法量化而夭折。

1.4.2 多尺度适配能力

YOLOv5提供了n/s/m/l/x五个版本,参数量从1.9M到86.7M不等。这意味着:

  • MCU级别(STM32、ESP32)可以用YOLOv5n
  • 轻量级SoC(RK3566、算力2TOPS)可以用YOLOv5s
  • 中高端设备(Jetson Nano、RK3588)可以用YOLOv5m/l

我在一个红外热成像项目里,用YOLOv5n在RK3566上跑到了30FPS,mAP还有0.78。换成SSD-MobileNet,同样算力下只有22FPS,mAP还低了5个点。

1.4.3 部署生态最完善

这一点可能比算法本身还重要。YOLOv5/v8的部署工具链非常成熟:

# 导出ONNX
python export.py --weights yolov5s.pt --include onnx

# 导出TensorRT
python export.py --weights yolov5s.pt --include engine --device 0

# 导出NCNN(需要先转ONNX)
onnx2ncnn yolov5s.onnx yolov5s.param yolov5s.bin

而且社区资源极其丰富。遇到问题,GitHub上基本都能找到解决方案。相比之下,EfficientDet的部署教程少得可怜,SSD的很多实现还停留在PyTorch 1.x时代。

🔧 实用建议: 如果你刚开始做嵌入式目标检测,我建议直接从YOLOv5s起步。等熟悉了整个流程,再根据实际算力需求调整模型大小。不要一上来就挑战YOLOv8——虽然v8精度更高,但v5的生态更成熟,踩坑成本更低。

1.5 本章核心逻辑图

下面这张图总结了三大算法的选型逻辑,你可以保存下来做参考:

嵌入式目标检测算法选型决策树 目标检测算法选型 算力受限(<2TOPS) 算力充足(>2TOPS) YOLOv5n / YOLOv8n SSD-MobileNet(备选) YOLOv5s/m / YOLOv8s EfficientDet(云端场景) 结论:YOLO系列是嵌入式移植最优解 注:算力以INT8推理时的TOPS为参考标准 实际选型还需考虑内存带宽、DSP/NPU支持等因素

1.6 我的最终建议

做了这么多项目,我总结出一个规律:嵌入式算法选型,生态比精度更重要

YOLOv5/v8的精度可能不是最高的,但它的部署生态、社区支持、模型变体丰富度,都是其他算法无法比拟的。尤其是当你需要快速出产品、快速迭代时,YOLO系列能帮你省下至少一半的开发时间。

当然,如果你做的是学术研究或者云端高精度场景,EfficientDet和SSD仍然有它们的价值。但如果你问的是「嵌入式红外目标检测」,我的答案只有一个——选YOLO,准没错


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