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 于 2019 年由 Google Research 推出,旨在提供一系列可扩展的目标检测器。它以 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)和推理速度之间的权衡。
| 模型 | 尺寸 (像素) | mAP验证集 50-95 | 速度 CPU ONNX (毫秒) | 速度 T4 TensorRT10 (ms) | 参数 (M) | FLOPs (B) |
|---|---|---|---|---|---|---|
| YOLOv5n | 640 | 28.0 | - | 1.12 | 1.9 | 4.5 |
| YOLOv5s | 640 | 37.4 | - | 1.92 | 7.2 | 16.5 |
| YOLOv5m | 640 | 45.4 | - | 4.03 | 21.2 | 49.0 |
| YOLOv5l | 640 | 49.0 | - | 6.61 | 46.5 | 109.1 |
| YOLOv5x | 640 | 50.7 | - | 11.89 | 86.7 | 205.7 |
| 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 的可选一对一检测头(
nms=False)无需进行非极大值抑制后处理。这显著降低了延迟波动,并简化了部署架构。 - CPU 推理速度最高提升 43%:YOLO26 针对边缘 AI进行了深度优化,即使在没有独立 GPU 的低功耗边缘设备和标准 CPU 上,也能实现前所未有的速度。
- MuSGD 优化器:这种结合 SGD 和 Muon 的混合优化器受大语言模型 (LLM) 训练技术启发,可确保训练高度稳定并快速收敛。
- 高级损失函数:引入 ProgLoss 和 STAL 后,小目标识别能力大幅提升,这对于高空无人机影像和机器人应用至关重要。
- 移除 DFL:移除分布焦点损失后,模型导出流程更加精简,同时进一步增强了模型对各种硬件加速器的兼容性。
想要探索 Ultralytics 生态系统中其他近期架构的用户,也可以比较 YOLOv10 或 RT-DETR 等模型。
Ultralytics Python API 旨在兼容旧版本和新版本。从 YOLOv5 升级到 YOLO26,只需在代码中更改模型权重字符串即可!
代码示例:训练与推理#
为了展示 Ultralytics 生态系统无与伦比的易用性,下面介绍如何使用现代 YOLO 模型进行训练和推理。这段代码开箱即可运行,会自动处理数据集下载、训练循环和验证。
from ultralytics import YOLO
# 加载现代模型(将 'yolov5su.pt' 替换为 'yolo26n.pt',即可测试最新架构!)
model = YOLO("yolov5su.pt") # YOLOv5u:适用于 ultralytics 软件包的无锚框 YOLOv5 权重
# 使用 COCO8 示例数据集训练模型 20 个 epoch
results = model.train(data="coco8.yaml", epochs=20, imgsz=640)
# 对网络图像运行推理
inference_results = model("https://ultralytics.com/images/bus.jpg")
# 显示带有边界框的图像
inference_results[0].show()Ultralytics 将用户体验放在首位,维护稳健的生态系统,并通过 YOLO26 等更新不断突破可能性的边界,从而确保开发者始终拥有解决现实世界视觉智能挑战的最佳工具。