YOLOv5 对比 EfficientDet#
当你着手一个新的 computer vision 项目时,选择正确的神经网络架构是你将做出的最重大的决定之一。本指南对 Ultralytics YOLOv5 与谷歌的 EfficientDet 进行了深入的技术对比。通过分析它们的架构、性能指标和训练生态系统,我们旨在帮助开发者和研究人员为其特定的部署环境识别最佳的 object detection 模型。
虽然 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 以其高度优化的架构而闻名,该架构优先考虑无缝的 machine learning 生命周期。它采用修改后的 CSPDarknet53 主干网络与路径聚合网络 (PANet) 颈部相结合,极大地改善了跨多个空间尺度的特征传播。
关键进步包括:
- Mosaic 数据增强: 这种训练技术将四张不同的训练图像组合成一个马赛克图。这迫使模型学习如何在复杂的空间背景下识别物体,并显著增强了其检测小目标的能力。
- 自动学习锚框: 在训练开始之前,YOLOv5 会分析你的自定义 training data,并使用 k-means 聚类自动计算出最佳的 anchor box 尺寸。
- 内存效率: 与繁重的基于 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 dataset 等标准基准上的性能至关重要。下表重点介绍了规模、计算需求 (FLOPs) 和推理速度之间的权衡。
| 模型 | 尺寸 (像素) | mAPval 50-95 | 速度 CPU ONNX (ms) | 速度 T4 TensorRT10 (ms) | 参数量 (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 非常适合高吞吐量视频分析和 real-time inference 管道。此外,Ultralytics 生态系统使导出为 ONNX、CoreML 和 TensorRT 等格式成为只需一行命令的操作。
EfficientDet 提供了出色的参数效率。对于给定的参数数量,它通常能提取出较高的 mean Average Precision (mAP)。然而,这种理论上的效率并不总能转化为边缘 GPU 上更快的实际墙钟推理时间,因为 BiFPN 层的复杂路由可能会受到内存带宽而非计算能力的限制。
生态系统与易用性#
选择 Ultralytics 模型的决定性优势在于其周边的生态系统。YOLOv5 是一个维护良好、开发活跃且拥有庞大社区支持的存储库的一部分。
随着 Ultralytics Platform 的推出,用户可以无缝过渡从数据收集到部署的整个过程。该平台开箱即用,支持自动标注、云端训练和模型监控。相比之下,训练 EfficientDet 通常需要应对较旧的 TensorFlow 对象检测 API 的复杂性,这对于快速原型开发来说可能会带来陡峭的学习曲线。
此外,YOLOv5 的多功能性不仅限于边界框。通过持续更新,Ultralytics 框架原生支持 instance segmentation 和 image classification,为多个计算机视觉任务提供统一的 API。
理想使用场景#
- 在以下情况下选择 YOLOv5: 你需要快速原型开发、无摩擦的训练体验以及高度优化的边缘部署。它非常适合低延迟至关重要的无人机、retail analytics 和移动应用程序。
- 选择 EfficientDet 的场景: 当你严格在 Google Cloud/TensorFlow AutoML 环境中操作,并且在没有严格实时延迟限制的情况下需要每个参数的最大准确性时。
下一代产品:拥抱 YOLO26#
虽然 YOLOv5 仍然是一个可靠的主力,但计算机视觉领域已经取得了进展。对于在 2026 年寻求绝对最先进技术的开发者来说,YOLO26 代表了 Ultralytics 产品线的新巅峰。
在继承前代产品(如 YOLOv8 和 YOLO11)传统的基础上,YOLO26 引入了突破性的创新:
- 端到端无 NMS 设计: YOLO26 原生消除了对非极大值抑制 (NMS) 后处理的需求。这显著降低了延迟差异并简化了部署架构。
- CPU 推理速度提升高达 43%: 针对 edge AI 进行了高度优化,它为没有专用 GPU 的低功耗边缘设备和标准 CPU 带来了前所未有的速度。
- MuSGD 优化器: 受大语言模型 (LLM) 训练技术的启发,这种 SGD 和 Muon 的混合体确保了高度稳定的训练和快速收敛。
- 高级损失函数: ProgLoss 和 STAL 的集成显著提高了对小目标的识别能力,这对于高空无人机图像和 robotics 至关重要。
- 移除 DFL: 通过移除分布式焦点损失 (DFL),简化了模型导出过程,进一步增强了跨不同硬件加速器的兼容性。
对探索 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 确保开发者始终拥有解决现实世界视觉智能挑战的最佳工具。