YOLOv5 与 EfficientDet 对比#
开始一个新的计算机视觉项目时,选择合适的神经网络架构是你将做出的最重要决策之一。本指南将对 Ultralytics YOLOv5 和 Google 的 EfficientDet 进行深入的技术对比。通过分析它们的架构、性能指标和训练生态,我们希望帮助开发者和研究人员为特定的部署环境确定最佳的目标检测模型。
虽然 EfficientDet 在复合缩放和特征融合方面引入了创新概念,但 YOLOv5 凭借极其直观的 PyTorch 实现、简化的用户体验,以及速度与精度之间无与伦比的平衡,通过让更多人能够使用高性能 AI,彻底改变了行业。
Ultralytics YOLOv5:易用性的行业标准#
YOLOv5 于 2020 年夏季发布,标志着 YOLO 系列的一次关键转变。从基于 C 的 Darknet 框架转向原生 PyTorch 后,它成为希望快速构建、训练和部署模型的开发者的首选架构。
- 作者: Glenn Jocher
- 组织: Ultralytics
- 日期: 2020-06-26
- GitHub: https://github.com/ultralytics/yolov5
- 文档: https://docs.ultralytics.com/models/yolov5
架构创新#
YOLOv5 以高度优化的架构而广受认可,优先保障顺畅的机器学习生命周期。它采用改进版 CSPDarknet53 主干网络,并搭配路径聚合网络(PANet)颈部网络,从而显著改善跨多个空间尺度的特征传播。
主要改进包括:
- 马赛克数据增强: 这种训练技术将四张不同的训练图像组合成一张马赛克图像。它迫使模型学习如何在复杂的空间环境中识别目标,并显著提升检测小目标的能力。
- 自动学习锚框: 在训练开始前,YOLOv5 会分析你的自定义训练数据,并使用 k-means 聚类自动计算最优的锚框尺寸。
- 内存效率: 与大型基于 Transformer 的模型相比,YOLOv5 在训练和推理期间都能保持显著更低的内存占用,因此可以在消费级硬件上流畅运行。
EfficientDet:可扩展的目标检测#
EfficientDet 由 Google Research 于 2019 年推出,旨在提供一系列可扩展的目标检测器。它以 EfficientNet 图像分类主干网络为基础,并引入了一种新颖的特征融合机制。
- 作者: Mingxing Tan、Ruoming Pang 和 Quoc V. Le
- 组织: Google
- 日期: 2019-11-20
- Arxiv: https://arxiv.org/abs/1911.09070
- GitHub: https://github.com/google/automl/tree/master/efficientdet
- 文档: https://github.com/google/automl/tree/master/efficientdet#readme
架构创新#
EfficientDet 的核心理念在于其系统化的缩放和特征聚合方法:
- BiFPN(双向特征金字塔网络): 传统 FPN 只能自顶向下传递信息,而 BiFPN 通过引入可学习权重来学习不同输入特征的重要性,从而实现快速、简便的多尺度特征融合。
- 复合缩放: EfficientDet 对所有主干网络、特征网络以及框和类别预测网络的分辨率、深度和宽度进行联合缩放,最终形成从轻量级 D0 到大型 D7 的一系列模型。
EfficientDet 高度依赖 TensorFlow 生态和 AutoML 库,而 YOLOv5 原生运行于 PyTorch 中,提供了许多开发者认为更直观、更符合 Python 风格且更易调试的工作流。
性能与指标对比#
比较这些模型时,评估它们在 COCO 数据集等标准基准上的表现至关重要。下表重点展示了模型大小、计算需求(FLOPs)和推理速度之间的权衡。
| 模型 | 尺寸 (像素) | mAPval 50-95 | 速度 CPU ONNX (毫秒) | 速度 T4 TensorRT10 (毫秒) | 参数量 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOv5n | 640 | 28.0 | 73.6 | 1.12 | 2.6 | 7.7 |
| YOLOv5s | 640 | 37.4 | 120.7 | 1.92 | 9.1 | 24.0 |
| YOLOv5m | 640 | 45.4 | 233.9 | 4.03 | 25.1 | 64.2 |
| YOLOv5l | 640 | 49.0 | 408.4 | 6.61 | 53.2 | 135.0 |
| YOLOv5x | 640 | 50.7 | 763.2 | 11.89 | 97.2 | 246.4 |
| EfficientDet-d0 | 640 | 34.6 | 10.2 | 3.92 | 3.9 | 2.54 |
| EfficientDet-d1 | 640 | 40.5 | 13.5 | 7.31 | 6.6 | 6.1 |
| EfficientDet-d2 | 640 | 43.0 | 17.7 | 10.92 | 8.1 | 11.0 |
| EfficientDet-d3 | 640 | 47.5 | 28.0 | 19.59 | 12.0 | 24.9 |
| EfficientDet-d4 | 640 | 49.7 | 42.8 | 33.55 | 20.7 | 55.2 |
| EfficientDet-d5 | 640 | 51.5 | 72.5 | 67.86 | 33.7 | 130.0 |
| EfficientDet-d6 | 640 | 52.6 | 92.8 | 89.29 | 51.9 | 226.0 |
| EfficientDet-d7 | 640 | 53.7 | 122.0 | 128.07 | 51.9 | 325.0 |
均衡分析#
YOLOv5 在部署灵活性和对原始硬件加速的兼容性方面表现出色。请注意其在 T4 GPU 上极快的 TensorRT 速度。这使 YOLOv5 非常适合高吞吐量视频分析和实时推理流水线。此外,Ultralytics 生态可以通过一行命令导出为 ONNX、CoreML 和 TensorRT 等格式。
EfficientDet 具有出色的参数效率。在参数数量相同的情况下,它通常能够获得较高的平均精度(mAP)。然而,由于 BiFPN 层的复杂路由,这种理论上的效率并不总能转化为边缘 GPU 上更快的实际推理时间,因为其性能可能受内存带宽限制,而不是受计算能力限制。
生态系统与易用性#
选择 Ultralytics 模型的决定性优势在于其周边生态。YOLOv5 是一个维护完善、持续开发且拥有庞大社区支持的代码仓库的一部分。
随着 Ultralytics Platform 的推出,用户可以顺畅地从数据采集过渡到部署。该平台开箱即支持自动标注、云端训练和模型监控。相比之下,训练 EfficientDet 通常需要处理较旧的 TensorFlow 目标检测 API 的复杂性,这可能会给快速原型开发带来较高的学习门槛。
此外,YOLOv5 的多功能性不止于边界框。通过持续更新,Ultralytics 框架原生支持实例分割和图像分类,为多种计算机视觉任务提供统一 API。
理想应用场景#
- 在以下情况下选择 YOLOv5: 你需要快速原型开发、无阻碍的训练体验以及高度优化的边缘部署。它非常适合无人机、零售分析和对低延迟至关重要的移动应用。
- 在以下情况下选择 EfficientDet: 你严格运行在 Google Cloud/TensorFlow AutoML 环境中,并且需要在没有严格实时延迟要求的情况下实现每个参数的最高精度。
下一代:拥抱 YOLO26#
虽然 YOLOv5 仍然是可靠的主力模型,但计算机视觉领域已经取得了进展。对于希望在 2026 年实现绝对领先性能的开发者而言,YOLO26 代表了 Ultralytics 产品线的新巅峰。
在前代模型(如 YOLOv8 和 YOLO11)基础上,YOLO26 引入了突破性的创新:
- 端到端无 NMS 设计: YOLO26 原生消除了对非极大值抑制后处理的需求。这显著降低了延迟波动,并简化了部署架构。
- CPU 推理速度最高提升 43%: 针对边缘 AI进行了深度优化,无需专用 GPU 即可为低功耗边缘设备和标准 CPU 带来前所未有的速度。
- MuSGD 优化器: 受大语言模型(LLM)训练技术的启发,这种 SGD 与 Muon 的混合优化器能够确保训练高度稳定并快速收敛。
- 高级损失函数: 集成 ProgLoss 和 STAL 后,小目标识别能力得到显著提升,这对于高空无人机图像和机器人技术至关重要。
- 移除 DFL: 通过移除 Distribution Focal Loss,模型导出流程得到简化,并进一步增强了在各种硬件加速器之间的兼容性。
想要探索 Ultralytics 生态中其他近期架构的用户,也可以比较 YOLOv10 或 RT-DETR 等模型。
Ultralytics Python API 的设计兼顾向后兼容和向前兼容。从 YOLOv5 升级到 YOLO26,实际上只需更改代码中的模型权重字符串即可!
代码示例:训练与推理#
为了展示 Ultralytics 生态无与伦比的易用性,下面介绍如何使用现代 YOLO 模型进行训练和推理。这段代码可 100% 运行,并会自动处理数据集下载、训练循环和验证。
from ultralytics import YOLO
# Load a modern model (Swap 'yolov5s.pt' for 'yolo26n.pt' to test the newest architecture!)
model = YOLO("yolov5s.pt")
# Train the model on the COCO8 example dataset for 20 epochs
results = model.train(data="coco8.yaml", epochs=20, imgsz=640)
# Run inference on an image from the web
inference_results = model("https://ultralytics.com/images/bus.jpg")
# Display the image with bounding boxes
inference_results[0].show()通过优先考虑用户体验、维护强大的生态并借助 YOLO26 等更新持续突破可能性的边界,Ultralytics 确保开发者始终拥有解决现实世界视觉智能挑战所需的最佳工具。