电脑基础 · 2023年4月18日

YOLOv8(n/s/m/l/x)&YOLOv7(yolov7-tiny/yolov7/yolov7x)&YOLOv5(n/s/m/l/x)不同模型参数/性能对比(含训练及推理速度)

YOLOv8&YOLOv7&YOLOv5不同模型参数/性能对比

  • 0.引言
  • 1.软硬件配置
    • (1)硬件配置
    • (2)软件配置
  • 2.数据集配置
  • 3.不同模型性能对比表
  • 4.结论
  • 5.后记

0.引言

由于YOLOv5/YOLOv7使用的设备不尽相同,考虑控制变量法,特此写一篇博客记录一下各模型的横向对比(由于时间有限,因此只针对640尺寸的模型进行训练测试)

1.软硬件配置

(1)硬件配置

  • CPU:英特尔E5-2640 v3@2.6GHz
  • GPU:Tesla P40 24G*4
  • 内存:64G

(2)软件配置

  • Ubuntu18.04
  • cuda11.3
  • pytorch:1.11.0
  • torchvision:0.12.0

2.数据集配置

2020年kaggle小麦检测数据集,包含3187张图片,各类标签的数量分别为:

  • arvalis_1: 42962
  • arvalis_2: 4022
  • arvalis_3: 15715
  • rres_1: 19077
  • ethz_1: 48606
  • usask_1: 5605
  • inrae_1: 3540

YOLOv8(n/s/m/l/x)&YOLOv7(yolov7-tiny/yolov7/yolov7x)&YOLOv5(n/s/m/l/x)不同模型参数/性能对比(含训练及推理速度)

3.不同模型性能对比表

每种算法均按默认配置,使用小麦检测数据集训练100轮,batch_size按显存最大来设置,img_size均为640*640,使用train.py进行4卡训练,使用detect.py进行单卡预测。加粗的表示最优结果。

算法 batch_size param/Million FLOPs/G weight_size/MB P/% R/% mAP50/% mAP50-95/% train_time/h Speed/ms
yolov5n 256 1.7 4.3 3.9 91.9 88.1 93.9 53.2 0.682 11.0
yolov5s 256 7.0 16.0 14.5 92.7 90.3 94.8 55.6 0.705 13.0
yolov5m 128 20.9 48.3 42.3 93.1 89.4 94.2 55.0 1.0098 16.8
yolov5l 64 46.2 108.3 92.9 93.1 88.8 94.3 55.0 1.751 25.6
yolov5x 32 86.2 204.8 173.2 92.6 89.4 94.5 55.4 3.068 40.4
yolov7-tiny 512 6.03 13.2 12.3 64.4 61.2 68.8 29.1 1.130 11.5
yolov7 128 37.2 105.2 74.9 92.0 91.9 94.9 54.9 1.912 30.4
yolov7x 128 70.9 189.0 142.2 93.4 91.0 94.6 54.9 2.668 42.3
yolov8n 256 3.1 8.2 6.3 91.9 88.4 94.1 55.6 1.641 14.7
yolov8s 128 11.1 28.7 22.5 91.1 89.0 94.2 56.1 1.862 13.9
yolov8m 128 25.9 79.1 52.1 91.6 90.0 94.6 56.4 2.228 20.3
yolov8l 64 43.6 165.4 87.7 92.1 89.1 94.6 56.6 2.974 30.7
yolov8x 64 68.2 258.2 136.8 91.8 90.3 95.0 56.8 3.658 40.2

4.结论

  • 从同一模型来看,模型的准确率和召回率并没有随着模型的加深而提高,相反,有着一定的降低,这主要是由于数据集量相比COCO数据集小得多,模型中有着大量的冗余参数,导致模型的各项指标下降;因此,对于量较小的数据集,选用参数量较少的模型,不光可以提高准确率,降低训练时间,还能在预测速度上有着比较大的优势;
  • 对比不同模型来看,yolov8相较yolov5和yolov7在准确率方面确实有一定的提升(仅限于大模型l/x),在本文使用的数据集上提升大概在1个点左右;而小模型(n/s)其实差距不大,甚至yolov7-tiny远低于正常水平(不知道是否是训练的时候出问题了,后续需要再测一下),这是我没有想到的;
  • 需要根据实际情况挑选自己的模型,没有最好的模型,只有最适合自己数据集的模型

5.后记

  • 如果还不会使用yolov8进行训练的朋友可以移步这篇文章:
    YOLOv8系列教程:一、使用自定义数据集训练YOLOv8模型(详细版教程),包含环境搭建/数据准备/模型训练/预测/验证/导出等
  • 如果想使用yolov7进行训练的朋友可以看下这几篇文章:
    YOLOv7系列教程:一、基于自定义数据集训练专属于自己的目标检测模型(保姆级教程,含数据集预处理),包含对train.py/test.py/detect.py/export.py详细说明
    YOLOv7系列教程:二、使用onnx导出成tensorrt模型,实现高性能部署,包含opencv多线程、图像队列存取、自动保存xml和jpg等模块
    YOLOv7系列教程:三、使用onnx导出成openvino模型,并调用接口进行摄像头推理预测