目标检测部署链:多框架多格式横评
YOLO-Master 精读见 精读: yolo-master Ultralytics 精读见 精读: ultralytics 跨赛道纵向见 跨赛道: YOLO 到 端侧 端侧流水线见 端侧部署流水线
调研元信息
| 项 | 值 |
|---|---|
| 日期 | 2026-06-22 |
| 环境 | macOS / Apple Silicon |
| 实测状态 | 未实测,以文档 + 已有精读为准 |
| 流水线段 | Export + Deploy(检测框架横向对比) |
一句话定位
本文横向对比 5 个检测框架在不同部署格式(TensorRT/ONNX/CoreML/ncnn/TFLite)下的导出能力、限制和实践建议。
日常类比
不同检测框架像不同品牌的相机,部署格式像不同的照片冲印店。有的相机(Ultralytics)跟所有冲印店都合作良好;有的相机(YOLO-Master MoE)拍的「多重曝光照片」只有特定冲印店能处理。
框架 x 格式 兼容矩阵
| 框架 | ONNX | TensorRT | ncnn | CoreML | TFLite | OpenVINO |
|---|---|---|---|---|---|---|
| Ultralytics (YOLOv8) | 优秀 | 优秀 | 优秀(PNNX) | 优秀 | 良好 | 良好 |
| YOLOv10 | 优秀 | 优秀 | 良好 | 良好 | 良好 | 良好 |
| YOLO-Master (MoE) | 困难 | 困难 | 极困难 | 不支持 | 不支持 | 困难 |
| RT-DETR | 良好 | 良好 | 有限 | 良好 | 有限 | 良好 |
| mmdetection | 需 mmdeploy | 需 mmdeploy | 需 mmdeploy | 需 mmdeploy | 需 mmdeploy | 需 mmdeploy |
各框架部署特点
Ultralytics (YOLOv8/v11) [已有]
最成熟的部署生态,一条命令覆盖全格式:
yolo export model=yolov8n.pt format=onnx # ONNX
yolo export model=yolov8n.pt format=engine # TensorRT
yolo export model=yolov8n.pt format=ncnn # ncnn (via PNNX)
yolo export model=yolov8n.pt format=coreml # CoreML
yolo export model=yolov8n.pt format=tflite # TFLite
yolo export model=yolov8n.pt format=openvino # OpenVINO
特点:内置 PNNX 调用,ncnn 导出质量最高;支持 INT8 量化选项(format=engine + int8=True)。
YOLOv10 [已有]
基于 Ultralytics 框架,继承其全部导出能力。额外特点:
- 去 NMS 设计:推理时无需后处理 NMS 步骤
- 导出的 ONNX 模型结构更简洁(无 NMS 节点)
- 对 TensorRT/ncnn 部署友好(少一步后处理)
YOLO-Master (ES-MoE) [已有]
部署最困难的框架(详见 跨赛道文档):
- 动态路由 + 条件分支 = ONNX 导出需 opset >= 13 且有限制
- TensorRT 需自定义 plugin 处理 Top-K 动态分支
- ncnn 基本不可直接部署完整 MoE 模型
- 推荐路径:pruning.py 单专家蒸馏后走标准链
RT-DETR [已有]
Transformer 检测器的部署特点:
- 无 NMS(Set Prediction + Hungarian Matching)
- Attention 算子导出:Deformable Attention 需 ONNX 自定义 op 或展开
- TensorRT 支持良好(Transformer 算子优化成熟)
- ncnn 支持有限(MultiHeadAttention 实现不完整)
- 推理速度:在 GPU 上与 YOLO 竞争力相当;在 CPU/端侧显著慢于 YOLO
mmdetection [已有]
与其他框架不同,mmdetection 需要专门的部署工具 mmdeploy:
# mmdetection 不能直接 export,需要 mmdeploy
pip install mmdeploy mmdeploy-runtime
python tools/deploy.py configs/deploy/... model.pth demo.png
特点:
- mmdeploy 统一封装了 ONNX/TRT/ncnn/OpenVINO 后端
- 配置驱动:每个模型 + 后端组合需要独立 deploy config
- 学习成本高但灵活性强
- 支持自定义 post-processing 节点
部署格式特点对比
| 格式 | 目标平台 | 优势 | 劣势 |
|---|---|---|---|
| ONNX | 通用中间层 | 生态最广,几乎所有引擎支持 | 本身不是推理引擎,需二次转换 |
| TensorRT | NVIDIA GPU | 极致 GPU 性能,自动 kernel 调优 | 仅 NVIDIA 硬件,编译耗时 |
| ncnn | 移动端 CPU/Vulkan GPU | 极小体积,零依赖 | 不支持 NPU,算子覆盖有限 |
| CoreML | Apple 设备 | Neural Engine 加速,系统级集成 | 仅 Apple 生态 |
| TFLite | 安卓/嵌入式 | NNAPI 委托,轻量 | 算子限制多,性能不如专用引擎 |
| OpenVINO | Intel CPU/GPU/VPU | Intel 硬件最优 | 非 Intel 设备无优势 |
MoE 特殊部署节
YOLO-Master 的 MoE 模块给部署带来独特挑战 [已有]:
graph TD
A[YOLO-Master MoE 模型] --> B{目标平台?}
B -->|NVIDIA GPU 服务端| C[TensorRT + Custom Plugin]
B -->|移动端| D{愿意损失精度?}
D -->|是| E[pruning.py 蒸馏<br/>然后走标准链]
D -->|否| F[全 Expert 导出<br/>体积膨胀+丧失稀疏优势]
B -->|Apple 设备| G[CoreML 不支持<br/>必须蒸馏]
关键结论:
- 服务端 GPU(TensorRT):可通过自定义 plugin 实现动态路由,但开发成本高
- 移动端(ncnn/MNN):推荐单专家蒸馏后部署
- 学术验证(ONNX Runtime):可导出 opset 13+ 的完整模型,但推理性能不保证
实践建议
按场景选择
| 场景 | 推荐框架 | 推荐格式 | 理由 |
|---|---|---|---|
| 安卓 App 实时检测 | Ultralytics | ncnn | 最成熟的移动端链路 |
| iOS App | Ultralytics | CoreML | Neural Engine 加速 |
| 服务端高吞吐 | Ultralytics/YOLOv10 | TensorRT | GPU 极致性能 |
| 边缘设备(RK3588等) | Ultralytics | ONNX -> RKNN | NPU 加速 |
| 学术复现/比较 | mmdetection | ONNX | 模型动物园最全 |
| MoE 精度验证 | YOLO-Master | ONNX Runtime | 保留完整 MoE 语义 |
RT-DETR vs YOLO 部署差异
| 维度 | YOLO 系列 | RT-DETR |
|---|---|---|
| 后处理 | 需 NMS(或 YOLOv10 去 NMS) | 无 NMS(端到端) |
| Attention 算子 | 无 | 需要 Deformable Attention |
| ncnn 兼容 | 优秀 | 有限(Attention 支持不完整) |
| CPU 推理速度 | 快 | 较慢(Transformer 计算量) |
| GPU 推理速度 | 快 | 与 YOLO 接近 |
证据等级
| 标签 | 来源 |
|---|---|
| [已有] | deep-dive-ultralytics.md, deep-dive-yolo-master.md, deep-dive-rt-detr.md, deep-dive-mmdetection.md |
| [文档] | Ultralytics export docs, mmdeploy docs, ncnn wiki |
| [Issue] | YOLO-Master #42 (ONNX), #33 (RK3588), #12 (ORT) |
| [源码] | YOLO-Master moe/pruning.py, Ultralytics engine/exporter.py |