YOLO_V5

img


个人网站
在这里插入图片描述
V5
V4
V3
V2
V1

一、前言

Yolov5是一种基于深度学习的目标检测算法,它可以在图像或视频中实现实时目标检测。它是YOLO(You Only Look Once)系列算法的最新版本,相比之前的版本,它具有更高的检测精度和更快的检测速度。相比于YOLOv4,YOLOv5的改进主要有以下几点:

  • 更高的检测精度:YOLOv5采用了更深的模型结构和更多的特征层,可以提高目标检测的精度。
  • 更快的检测速度:YOLOv5采用了更轻量化的模型结构和更高效的计算方式,可以在保持精度的同时提高检测速度。
  • 更好的通用性:YOLOv5在训练数据上进行了优化,可以适应更广泛的场景和物体类别。
  • 更方便的训练和部署:YOLOv5提供了更友好的API和更简单的部署方式

YOLOv5是一个开源项目,在GitHub上免费提供。代码方面比YOLOV3看起来好太多了,非常的简洁精炼,作者功底之深可见一斑,YOLOV4可以认为理论方面,V5实践方面。作者没有发表论文。代码

二、YOLO-V5模型

1.概述

YOLOv5在模块方面并没有多太多东西,加了CSP模块,还有各个版本的激活函数并不是一样的,V5的第三代是hardwish,前面是Leaky ReLU,第四代是wish,上一篇文章提过,反正无论什么激活函数目的都一样,自己搜一下,跟relu差不多,就是负数部分做了调整。

模块可以先看完V4,V4上没有的我会加上去。

2.新增模块

  • Focus模块:先分块,后拼接,再卷积,间隔的来完成分块任务,此时卷积输入的C就为12了,参考实验结果并不多,目的是为了加速,并不会增加AP

img

  • 激活函数,不同版本都不一样,注意一下就行

3.整体框架

img

上面所有模块基本都讲过了,大部分在V4那篇文章,右边Neck就是PAN,在FPN基础上再做一次。

模型文件:可以对比一下,其实差不多,是不是比YOLOV3看起来舒服太多了

# parameters
nc: 2  # number of classes  控制模型深度和通道
depth_multiple: 0.33  # model depth multiple  #下面的number*0.33
width_multiple: 0.50  # layer channel multiple   #下面的channel*0.33

# anchors 就是聚类的九个框
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 backbone 
backbone:
  # [from, number, module, args]
  # -1代表是一个输出,做了number次数,模块名,参数(通道数,卷积核,步长)
  [[-1, 1, Focus, [64, 3]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, BottleneckCSP, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 9, BottleneckCSP, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, BottleneckCSP, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 1, SPP, [1024, [5, 9, 13]]],
   [-1, 3, BottleneckCSP, [1024, False]],  # 9
  ]

# YOLOv5 head   就是FPN + PAN
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, BottleneckCSP, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, BottleneckCSP, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, BottleneckCSP, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, BottleneckCSP, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

4.模型可视化

  • 可视化工具
    配置好netron,详情:https://github.com/lutzroeder/netron 网页版
  • 安装好onnx,pip install onnx即可
  • 转换得到onnx文件,脚本原始代码中已经给出(/models/export.py)
  • 打开onnx文件进行可视化展示(.pt文件展示效果不如onnx)
    [img]在这里插入图片是描述

三、YOLO-V5模型梳理

1.整体模型图

可以理解为输入前BOF(数据处理部分)+ BOS(模型改进部分)

img

2.整体流程

  • 输入端:在模型训练阶段,提出了一些改进思路,主要包括Mosaic数据增强、自适应锚框计算、自适应图片缩放;
  • 基准网络:融合其它检测算法中的一些新思路,主要包括:Focus结构与CSP结构;
  • Neck网络:目标检测网络在BackBone与最后的Head输出层之间往往会插入一些层,Yolov5中添加了FPN+PAN结构;
  • Head输出层:输出层的锚框机制与YOLOv4相同,主要改进的是训练时的损失函数GIOU_Loss,以及预测框筛选的DIOU_nms。

3.YOLOv5基础组件

  • CBL-CBL模块由Conv+BN+Leaky_relu激活函数组成
  • Res unit-借鉴ResNet网络中的残差结构,用来构建深层网络,CBL是残差模块中的子模块
  • CSP1_X-借鉴CSPNet网络结构,该模块由CBL模块、Res unint模块以及卷积层、Concate组成而成
  • CSP2_X-借鉴CSPNet网络结构,该模块由卷积层和X个Res unint模块Concate组成而成
  • Focus,Focus结构首先将多个slice结果Concat起来,然后将其送入CBL模块中。
  • SPP-采用1×1、5×5、9×9和13×13的最大池化方式,进行多尺度特征融合

四、代码文件讲解

1.项目目录结构

img

2.目录解释

  • github是存放关于github上的一些“配置”的,这个不重要,我们可以不管它。
  • data文件夹主要是存放一些超参数的配置文件(如.yaml文件)是用来配置训练集和测试集还有验证集的路径的,其中还包括目标检测的种类数和种类的名称;还有一些官方提供测试的图片,YOLOv5 有大约 30 个超参数用于各种训练设置。
  • models是模型文件夹。里面主要是一些网络构建的配置文件和函数,其中包含了该项目的四个不同的版本,分别为是s、m、l、x。从名字就可以看出,这几个版本的大小。他们的检测速度分别都是从快到慢,但是精确度分别是从低到高。代码 下载模型
  • runs是我们运行的时候的一些输出文件。每一次运行就会生成一个exp的文件夹。

img

detect # 测试模型,输出图片并在图片中标注出物体和概率
train # 训练模型,输出内容,模型(最好、最新)权重、混淆矩阵、F1曲线、超参数文件、P曲线、R曲线、PR曲线、结果文件(loss值、P、R)等expn

expn # 第n次实验数据
confusion_matrix.png # 混淆矩阵
P_curve.png # 准确率与置信度的关系图线
R_curve.png # 精准率与置信度的关系图线
PR_curve.png # 精准率与召回率的关系图线
F1_curve.png # F1分数与置信度(x轴)之间的关系
labels_correlogram.jpg # 预测标签长宽和位置分布
results.png # 各种loss和metrics(p、r、mAP等,详见utils/metrics)曲线
results.csv # 对应上面png的原始result数据
hyp.yaml # 超参数记录文件
opt.yaml # 模型可选项记录文件
train_batchx.jpg # 训练集图像x(带标注)
val_batchx_labels.jpg # 验证集图像x(带标注)
val_batchx_pred.jpg # 验证集图像x(带预测标注)
weights # 权重
best.pt # 历史最好权重
last.pt # 上次检测点权重
labels.jpg # 4张图, 4张图,(1,1)表示每个类别的数据量,(1,2)真实标注的 bounding_box(2,1) 真实标注的中心点坐标,(2,2)真实标注的矩阵宽高
  • utils工具文件夹。存放的是工具类的函数,里面有loss函数,metrics函数,plots函数等等。

3.如何训练自己的数据

https://public.roboflow.com/object-detection/mask-wearing/4/download/yolov5pytorch

img

例如口罩数据集下载,选择yolov5pytorch格式,直接就能用,把它放在yolo_v5同级目录

pycharm 配置参数
--data ../MaskDataSet/data.yaml --epochs 300 --weights '' --cfg models/yolov5s.yaml  --batch-size 16
# data.yaml文件包含数据文件索引
train: ../MaskDataSet/train/images
val: ../MaskDataSet/valid/images

nc: 2
names: ['mask', 'no-mask']

结果:

img

日志可视化:切换运行环境的日志路径下,也就是

tensorboard --logdir runs/

img

img

猜你喜欢

转载自blog.csdn.net/weixin_62403633/article/details/130642453