ren648154292/YOLOv10-Ascend-NPU
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

YOLOv10: Real-Time End-to-End Object Detection

YOLOv10 的官方 PyTorch 实现。NeurIPS 2024。


在延迟-精度(左)和大小-精度(右)权衡方面与其他模型的对比。

YOLOv10: Real-Time End-to-End Object Detection。
Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, and Guiguang Ding
arXiv Open In Colab Hugging Face Spaces Hugging Face Spaces Hugging Face Spaces Transformers.js Demo LearnOpenCV Openbayes Demo

摘要 近年来,YOLO 系列凭借其在计算成本与检测性能之间的有效平衡,已成为实时目标检测领域的主导范式。研究人员在 YOLO 的架构设计、优化目标、数据增强策略等方面进行了深入探索,并取得了显著进展。然而,对非极大值抑制(NMS)后处理的依赖阻碍了 YOLO 的端到端部署,并对推理延迟产生不利影响。此外,YOLO 各组件的设计缺乏全面深入的审视,导致存在明显的计算冗余,限制了模型性能。这使得模型效率欠佳,同时也意味着其性能提升潜力巨大。在本研究中,我们旨在从后处理和模型架构两方面进一步拓展 YOLO 的性能-效率边界。为此,我们首先提出了用于 YOLO 无 NMS 训练的一致性双分配策略,该策略同时带来了具有竞争力的性能和低推理延迟。此外,我们引入了面向 YOLO 的整体效率-精度驱动模型设计策略。我们从效率和精度两个角度全面优化了 YOLO 的各个组件,大幅降低了计算开销并增强了模型能力。我们的研究成果是新一代用于实时端到端目标检测的 YOLO 系列,命名为 YOLOv10。大量实验表明,YOLOv10 在各种模型规模上均实现了最先进的性能和效率。例如,我们的 YOLOv10-S 在 COCO 数据集上与 RT-DETR-R18 具有相近的 AP 时,速度快 1.8 倍,同时参数数量和 FLOPs 减少 2.8 倍。与 YOLOv9-C 相比,YOLOv10-B 在保持相同性能的情况下,延迟降低 46%,参数减少 25%。

注意事项

  • 2024/05/31:请使用导出格式进行基准测试。在非导出格式(如PyTorch)中,由于推理过程中会执行v10Detect中不必要的cv2和cv3操作,YOLOv10的速度会存在偏差。
  • 2024/05/30:我们提供了一些说明和建议,用于使用YOLOv10检测较小物体或远处物体。感谢SkalskiP!
  • 2024/05/27:我们更新了检查点,包含了类别名称,以方便使用。

更新 🔥

  • 2024/06/01:感谢ErlanggaYudiPradana完成与C++ | OpenVINO | OpenCV的集成!
  • 2024/06/01:感谢NielsRogge和AK在HuggingFace Hub上托管模型!
  • 2024/05/31:youjiang构建了yolov10-jetson Docker镜像!
  • 2024/05/31:感谢mohamedsamirx使用BoxMOT库完成与BoTSORT、DeepOCSORT、OCSORT、HybridSORT、ByteTrack、StrongSORT的集成!
  • 2024/05/31:感谢kaylorchen完成与rk3588的集成!
  • 2024/05/30:感谢eaidova完成与OpenVINO™的集成!
  • 2024/05/29:添加了用于在本地运行模型的Gradio演示。感谢AK!
  • 2024/05/27:感谢sujanshresstha完成与DeepSORT的集成!
  • 2024/05/26:感谢CVHub520将其集成到X-AnyLabeling中!
  • 2024/05/26:感谢DanielSarmiento04完成与c++ | ONNX | OPENCV的集成!
  • 2024/05/25:添加了Transformers.js演示和ONNX权重(yolov10n/s/m/b/l/x)。感谢xenova!
  • 2024/05/25:添加了Colab演示、HuggingFace演示和HuggingFace模型页面。感谢SkalskiP和kadirnar!

性能

COCO

模型测试尺寸参数数量计算量APval延迟
YOLOv10-N6402.3M6.7G38.5%1.84ms
YOLOv10-S6407.2M21.6G46.3%2.49ms
YOLOv10-M64015.4M59.1G51.1%4.74ms
YOLOv10-B64019.1M92.0G52.5%5.74ms
YOLOv10-L64024.4M120.3G53.2%7.28ms
YOLOv10-X64029.5M160.4G54.4%10.70ms

安装

推荐使用 conda 虚拟环境。

conda create -n yolov10 python=3.9
conda activate yolov10
pip install -r requirements.txt
pip install -e .

演示

python app.py
# Please visit http://127.0.0.1:7860

验证

yolov10n yolov10s yolov10m yolov10b yolov10l yolov10x

yolo val model=jameslahm/yolov10{n/s/m/b/l/x} data=coco.yaml batch=256

或

from ultralytics import YOLOv10

model = YOLOv10.from_pretrained('jameslahm/yolov10{n/s/m/b/l/x}')
# or
# wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt
model = YOLOv10('yolov10{n/s/m/b/l/x}.pt')

model.val(data='coco.yaml', batch=256)

训练

yolo detect train data=coco.yaml model=yolov10n/s/m/b/l/x.yaml epochs=500 batch=256 imgsz=640 device=0,1,2,3,4,5,6,7

或者

from ultralytics import YOLOv10

model = YOLOv10()
# If you want to finetune the model with pretrained weights, you could load the 
# pretrained weights like below
# model = YOLOv10.from_pretrained('jameslahm/yolov10{n/s/m/b/l/x}')
# or
# wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt
# model = YOLOv10('yolov10{n/s/m/b/l/x}.pt')

model.train(data='coco.yaml', epochs=500, batch=256, imgsz=640)

推送到 🤗 模型仓库

你也可以选择将微调后的模型作为公开或私有模型推送到 Hugging Face hub:

# let's say you have fine-tuned a model for crop detection
model.push_to_hub("<your-hf-username-or-organization/yolov10-finetuned-crop-detection")

# you can also pass `private=True` if you don't want everyone to see your model
model.push_to_hub("<your-hf-username-or-organization/yolov10-finetuned-crop-detection", private=True)

推理

请注意,可以设置较小的置信度阈值来检测较小的物体或远处的物体。详细信息请参考此处。

yolo predict model=jameslahm/yolov10{n/s/m/b/l/x}

或

from ultralytics import YOLOv10

model = YOLOv10.from_pretrained('jameslahm/yolov10{n/s/m/b/l/x}')
# or
# wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt
model = YOLOv10('yolov10{n/s/m/b/l/x}.pt')

model.predict()

导出

# End-to-End ONNX
yolo export model=jameslahm/yolov10{n/s/m/b/l/x} format=onnx opset=13 simplify
# Predict with ONNX
yolo predict model=yolov10n/s/m/b/l/x.onnx

# End-to-End TensorRT
yolo export model=jameslahm/yolov10{n/s/m/b/l/x} format=engine half=True simplify opset=13 workspace=16
# or
trtexec --onnx=yolov10n/s/m/b/l/x.onnx --saveEngine=yolov10n/s/m/b/l/x.engine --fp16
# Predict with TensorRT
yolo predict model=yolov10n/s/m/b/l/x.engine

或

from ultralytics import YOLOv10

model = YOLOv10.from_pretrained('jameslahm/yolov10{n/s/m/b/l/x}')
# or
# wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt
model = YOLOv10('yolov10{n/s/m/b/l/x}.pt')

model.export(...)

致谢

本代码库基于 ultralytics 和 RT-DETR 构建。

感谢这些出色的实现!

引用

如果我们的代码或模型对您的工作有所帮助,请引用我们的论文:

@article{wang2024yolov10,
  title={YOLOv10: Real-Time End-to-End Object Detection},
  author={Wang, Ao and Chen, Hui and Liu, Lihao and Chen, Kai and Lin, Zijia and Han, Jungong and Ding, Guiguang},
  journal={arXiv preprint arXiv:2405.14458},
  year={2024}
}