• YOLOV5学习笔记


    目录

    一、目标检测概述

    1.1 数据集介绍

    1.2 性能指标 

    1.2.1 混淆矩阵

    1.2.2 IOU(边界框回归)

    1.2.3 AP&mAP

    1.2.4 检测速度

    1.3 YOLO发展史

    ​1.3.1 算法思想

    1.3.2  YOLOv5网络架构


    一、目标检测概述

    1.1 数据集介绍

    • PASCAL VOC

    • MS COCO

    1.2 性能指标 

    1.2.1 混淆矩阵

    1.2.2 IOU(边界框回归)

    IOU=1 是完全重叠

    根据IOU设置的阈值来判断是TP还是FP ,比如重叠为0.5

    1.2.3 AP&mAP

    AP是衡量学习出来的模型在每个类别上的好坏

    mAP是衡量学习出来的模型在所有类别上的好坏是AP的平均值

    •  不同数据集对于AP和mAP的概念还是不同的

    • AP计算 

    1.2.4 检测速度

    1.3 YOLO发展史

    1.3.1 算法思想

    • yolov3框架图

    先经过卷积神经网络得到特征图像,之后对图像进行网格划分,每个网格单独进行画框检测和类别的概率图,最终得到结果。

    每个小框内包含了边界框坐标、目标得分和类别得分

    • 多尺度融合

     经过卷积神经网络可以得到不同大小的特征图,对不同大小的特征图进行融合利于小目标的检测。

    图片卷积经过32倍下采样得到19*19的图片,每个网格都会单独预测和画锚框 

    预先设定一些边界框的大小 ,每个尺度都有若干个锚框

     

    • 损失函数 

    1.3.2  YOLOv5网络架构

    一个网络往往有主干网络(Backbone)+颈部(Neck)+头部(Head)组成 

     

    可视化 

    1. pip install onnx>=1.7.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    2. pip install coremltools==4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    3. python models/export.py --weights weights/yolov5s.pt --img 640 --batch 1

    yaml文件

    1. # YOLOv5 🚀 by Ultralytics, GPL-3.0 license
    2. # Parameters
    3. nc: 10 # number of classes
    4. depth_multiple: 0.33 # model depth multiple 控制模型的深度用来控制模型的深度,仅在number≠1时启用。 如第一个c3层(c3具体是什么后续介绍)的参数设置为[-1, 3, c3, [128]],其中number=3,表示在v5s中含有1个c3(3*0.33)
    5. width_multiple: 0.50 # layer channel multiple 用来控制模型的宽度,主要作用于args中的ch_out。如第一个conv层,ch_out=64,那么在v5s实际运算过程中,会将卷积过程中的卷积核设为64x0.5,所以会输出32通道的特征图。
    6. #通过这两个参数可以不同的模型设计
    7. #边界框的设置
    8. anchors:
    9. - [10,13, 16,30, 33,23] # P3/8
    10. - [30,61, 62,45, 59,119] # P4/16
    11. - [116,90, 156,198, 373,326] # P5/32
    12. # YOLOv5 v6.0 backbone
    13. backbone:
    14. # [from, number, module, args]
    15. #from:当前模块输入来自那一层的输出,-1代表从上一层获得
    16. #number: 代表本模块重复的次数
    17. #model:表示网络模块的名称,具体细节可以在./models/common.py查看,如conv、c3、sppf都是已经在common中定义好的模块
    18. #args:表示向不同模块内传递的参数
    19. [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2 #64代表通道数,3表示3*3的卷积核,2代表步长为2,2表示分两组卷积
    20. #input:3x640x640
    21. #[ch_out, kernel, stride, padding]=[64, 6, 2, 2]
    22. #故新的通道数为64x0.5=32
    23. #根据特征图计算公式:feature_new=(feature_old-kernel+2xpadding)/stride+1可得:
    24. #新的特征图尺寸为:feature_new=(640-6+2x2)/2+1=320
    25. [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
    26. [-1, 3, C3, [128]],
    27. [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
    28. [-1, 6, C3, [256]],
    29. [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
    30. [-1, 9, C3, [512]],
    31. [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
    32. [-1, 3, C3, [1024]],
    33. [-1, 1, SPPF, [1024, 5]], # 9
    34. ]
    35. #sspf模块将经过cbs的x、一次池化后的y1、两次池化后的y2和3次池化后的self.m(y2)先进行拼接,然后再cbs提取特征。 仔细观察不难发现,虽然sspf对特征图进行了多次池化,但是特征图尺寸并未发生变化,通道数更不会变化,所以后续的4个输出能够在channel维度进行融合。这一模块的主要作用是对高层特征进行提取并融合,在融合的过程中作者多次运用最大池化,尽可能多的去提取高层次的语义特征。
    36. # YOLOv5 v6.0 head
    37. head:
    38. [[-1, 1, Conv, [512, 1, 1]],
    39. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
    40. [[-1, 6], 1, Concat, [1]], # cat backbone P4
    41. [-1, 3, C3, [512, False]], # 13
    42. [-1, 1, Conv, [256, 1, 1]],
    43. [-1, 1, nn.Upsample, [None, 2, 'nearest']],
    44. [[-1, 4], 1, Concat, [1]], # cat backbone P3
    45. [-1, 3, C3, [256, False]], # 17 (P3/8-small)
    46. [-1, 1, Conv, [256, 3, 2]],
    47. [[-1, 14], 1, Concat, [1]], # cat head P4
    48. [-1, 3, C3, [512, False]], # 20 (P4/16-medium)
    49. [-1, 1, Conv, [512, 3, 2]],
    50. [[-1, 10], 1, Concat, [1]], # cat head P5
    51. [-1, 3, C3, [1024, False]], # 23 (P5/32-large)
    52. [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
    53. ]

    通过底层源码理解YOLOv5的Backbone_Python_萬仟网

    yolo的不同网络大小仅仅改变这两个参数


     

  • 相关阅读:
    Hive 常用DML操作
    设计模式之状态模式
    机试算法——基本知识
    Java synchronized关键字常见面试题
    vector常用接口使用【c++】
    Spring的注解开发-依赖注入相关注解
    day1项目配置
    【ESP 保姆级教程】疯狂Node.js服务器篇 ——教室WiFi自动打卡考勤(飞书群信息+NodeJs)
    【附源码】Python计算机毕业设计企业人事管理系统
    TCP实现网络通信(多进程与多线程版本)
  • 原文地址:https://blog.csdn.net/HUASHUDEYANJING/article/details/126023842