当前位置:   article > 正文

基于深度学习的目标图像检测【Yolov8】_yolov8目标检测步骤流程图

yolov8目标检测步骤流程图

研究工作

一、Yolo算法原理及流程

        YOLO(You Only Look Once: Unified, Real-Time Object Detection),是Joseph Redmon和Ali Farhadi等人于2015年提出的基于单个神经网络的目标检测系统。在2017年CVPR上,Joseph Redmon和Ali Farhadi又发表的YOLO 2,进一步提高了检测的精度和速度。

图 1 yolo算法的网络结构

        Yolo算法的核心思想:利用整张图片作为网格的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。

       每一个bounding box要预测(x, y, w, h)和confidence共5个值

       每个网格还要预测一个类别信息,记为C类

        下述流程图是yolov8算法的流程:

       整体来看,Yolo算法采用一个单独的CNN模型实现end-to-end的目标检测,整个系统如下图所示:首先将输入图片resize到448x448,然后送入CNN网络,最后处理网络预测结果得到检测的目标。相比R-CNN算法,其是一个统一的框架,其速度更快,而且Yolo的训练过程也是end-to-end的。

        上图2为Yolo检测系统原理

图 3模型预测值结构

二、建立Python虚拟运行环境

C:\Users\yonghu\Desktop>python -m venv yolo8

三、安装yolo

        用pip install ultralytics的方法安装yolov8

        在这里需要等待一段时间。

四、使用labelImg进行图片标注

4.1安装labelImg

        使用pip install labelimg的方法安装。

4.2对图片格式的统一

        在下载之后,可能会碰到一些情况,比如测试数据【图片】格式不统一,这个时候需要进行以下统一,但是面对上百张照片,如果一张张改格式实在是太麻烦了,所以这里有一个小tips,使用

dir

ren *.jpg *.jpeg

        进行图像格式的转换

  1. (yolo8) C:\Users\34025\Desktop\yolo8\data\images>dir
  2. (yolo8) C:\Users\34025\Desktop\yolo8\data\images>ren *.jpg *.jpeg

        上图为案例测试。

4.3对图片进行标注

标注样例:

首先启动labelimg:

        在此处进行图像标注

五、准备训练模型

5.1在官网下载相关预训练模型

        官网上关于yolo的训练模型种类繁多,下表为官方在 COCO Val 2017 数据集上测试的 mAP、参数量和 FLOPs 结果。可以看出 YOLOv8 相比 YOLOv5 精度提升非常多,但是 N/S/M 模型相应的参数量和 FLOPs 都增加了不少。

表 1YoloV5和YoloV8的对比

5.2进入yolo并展开训练

        第一次训练时,考虑到图片工作量较大,因此应用的训练数据集与测试数据集相同。训练的数据集选用的是三千张图片,并将每一张照片通过labelImg进行标注。再通过yolo模型进行训练。

        Yolo官网提出了yolov8n、yolov8s、yolov8m、yolov8l、yolov8x等五种模型,考虑到机器学习所需要的时间以及设备性能等方面的原因,在本次研究中研究这五个模型并分别考虑其训练数据集与测试数据集相同与不同的两种情况并做出对比。

环境配置:

i7-12700F + 1660Super + 32G

i5-12490F + 4070Ti + 32G

        我是直接在终端上进入模型,开始训练的,代码在cmd上操作

  1. //对30张照片数据集的训练—仅做测试
  2. (yolo8)C:\Users\34025\Desktop\yolo8\data>yolo task=detect mode=train model=yolov8n.pt data=data.yaml epochs=1000
  3. //使用yolov8n进行预训练,训练1000
  4. //对3000张照片数据集的训练-- yolov8n,记作train_n
  5. (yolo8)C:\Users\34025\Desktop\yolo8\data3000>yolo task=detect mode=train model=yolov8n.pt data=data.yaml epochs=1000
  6. //使用yolov8n进行预训练,训练1000

参数解释:

        TASK(可选) 是[detect、segment、classification]中的一个。如果没有显式传递,YOLOv8将尝试从模型类型中猜测TASK。

        分类(classification)、检测(dection)、分割(segmentation)

        MODE(必选) 是[train, val, predict, export]中的一个 (训练、评估、预测、导出)

        ARGS(可选) 是任意数量的自定义arg=value对,如imgsz=320,覆盖默认值。

        预训练模型内容示意:

  1. //train_xv中args.yaml代码
  2. task: detect
  3. mode: train
  4. model: runs/detect/train_x/weights/best.pt
  5. data: data.yaml
  6. epochs: 1000
  7. patience: 50
  8. batch: 8
  9. imgsz: 640
  10. save: true
  11. save_period: -1
  12. cache: false
  13. device: null
  14. workers: 8
  15. project: null
  16. name: null
  17. exist_ok: false
  18. pretrained: true
  19. optimizer: auto
  20. verbose: true
  21. seed: 0
  22. deterministic: true
  23. single_cls: false
  24. rect: false
  25. cos_lr: false
  26. close_mosaic: 10
  27. resume: false
  28. amp: true
  29. fraction: 1.0
  30. profile: false
  31. overlap_mask: true
  32. mask_ratio: 4
  33. dropout: 0.0
  34. val: true
  35. split: val
  36. save_json: false
  37. save_hybrid: false
  38. conf: null
  39. iou: 0.7
  40. max_det: 300
  41. half: false
  42. dnn: false
  43. plots: true
  44. source: null
  45. show: false
  46. save_txt: false
  47. save_conf: false
  48. save_crop: false
  49. show_labels: true
  50. show_conf: true
  51. vid_stride: 1
  52. line_width: null
  53. visualize: false
  54. augment: false
  55. agnostic_nms: false
  56. classes: null
  57. retina_masks: false
  58. boxes: true
  59. format: torchscript
  60. keras: false
  61. optimize: false
  62. int8: false
  63. dynamic: false
  64. simplify: false
  65. opset: null
  66. workspace: 4
  67. nms: false
  68. lr0: 0.01
  69. lrf: 0.01
  70. momentum: 0.937
  71. weight_decay: 0.0005
  72. warmup_epochs: 3.0
  73. warmup_momentum: 0.8
  74. warmup_bias_lr: 0.1
  75. box: 7.5
  76. cls: 0.5
  77. dfl: 1.5
  78. pose: 12.0
  79. kobj: 1.0
  80. label_smoothing: 0.0
  81. nbs: 64
  82. hsv_h: 0.015
  83. hsv_s: 0.7
  84. hsv_v: 0.4
  85. degrees: 0.0
  86. translate: 0.1
  87. scale: 0.5
  88. shear: 0.0
  89. perspective: 0.0
  90. flipud: 0.0
  91. fliplr: 0.5
  92. mosaic: 1.0
  93. mixup: 0.0
  94. copy_paste: 0.0
  95. cfg: null
  96. v5loader: false
  97. tracker: botsort.yaml
  98. save_dir: runs\detect\train18

5.3得到完成训练的模型

5.4 Yolo模型的停止训练的条件

  1. 达到指定训练次数
  2. 未达到指定训练次数但是训练结果检测达到预期(0.99)
  3. 连续五十次迭代寻找不到更好的训练结果,持续低识别度

5.5测试训练效果

  1. // train_n
  2. (yolo8) C:\Users\34025\Desktop\yolo8>cd data
  3. (yolo8) C:\Users\34025\Desktop\yolo8\data3000>yolo task=detect mode=predict model=../data/runs/detect/train_n/weights/best.pt conf=0.1 source=..\data\test
  4. // Results saved to runs\detect\predict

        结果储存的文件夹如下所示:

        将会在最后进行集中不同模型的识别准确率对比。

六、YOLO-V8训练结果的对比

        在本次研究中,我分别下载了yolov8n、yolov8s、yolov8m、yolov8l、yolov8x这五个模型,并将每一个模型都进行了两种不同的实验:训练集与测试集相同、训练集与测试集不同。在理论上应该是后者的准确度更好,接下来将根据实验结果对其进行比较。

        在本次实验中,分别命名为:train_n、train_nv、train_s、train_sv、train_m、train_mv、train_l、train_lv、train_x、train_xv

6.1 confusion_matrix混淆矩阵归一化

        对于混淆矩阵,当数据主要存在于对角线上时,反映出更高的识别准确率。对于图a、图c、图e、图g、图i而言,由于其测试数据集与训练集相同,因此会有更明显的斜对角线,在测试准确率方面会高于测试数据集与训练集不同的的组b、d、f、h、j。

        综合来看,效果最好的模型是yolov8x。但其差异较小,还需要更详细的比较。

6.2 P_curve

        precision(单一类准确率) : 预测为positive的准确率。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/618296
推荐阅读
相关标签
  

闽ICP备14008679号