自学内容网 自学内容网

yolov8涨点系列之替换DW卷积

文章目录

    • yolov8.yaml文件增加DW卷积
      • yolov8.yaml
      • yolov8.yaml将Conv卷积替换成DWConv

  1. 深度可分离卷积(DW卷积)介绍

    • 原理
      • 深度可分离卷积是一种卷积操作的优化方式,它将标准卷积操作分解为两个部分:深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。
      • 深度卷积:对输入的每个通道分别进行卷积操作,即每个卷积核只处理一个通道的数据。例如,对于一个输入特征图有(C)个通道,就会有(C)个深度卷积核,每个卷积核的大小为(k\times k)((k)是卷积核尺寸,如(3\times3))。它的作用是对每个通道的空间信息进行提取,这个过程可以看作是对每个通道独立地进行滤波。
      • 逐点卷积:也称为(1\times1)卷积,它的主要作用是将深度卷积后的输出进行通道融合,通过(1\times1)的卷积核来调整通道数。例如,经过深度卷积后有(C)个通道的输出,逐点卷积可以将其转换为新的通道数(N),通过调整(1\times1)卷积核的数量来实现。
    • 优势
      • 参数数量减少:相比标准卷积,深度可分离卷积大大减少了参数量。对于标准卷积,假设输入通道为(C_{in}),输出通道为(C_{out}),卷积核大小为(k\times k),其参数量为(k\times k\times C_{in}\times C_{out})。而深度可分离卷积,深度卷积部分参数量为(k\times k\times C_{in}),逐点卷积部分参数量为(C_{in}\times C_{out}),总的参数量约为(k\times k\times C_{in}+C_{in}\times C_{out})。在(k = 3)等常见情况下,参数减少量是很可观的。
      • 计算量降低:由于参数量的减少,在进行卷积运算时,计算量也相应降低。这对于在资源受限的设备(如移动设备)上运行的深度学习模型或者对于大规模数据集进行训练时,能够有效提高运算效率,加快模型训练和推理的速度。
      • 模型轻量化:有助于构建轻量化的神经网络模型,在保持一定性能的前提下,降低模型的复杂度,便于模型的部署和应用。
  2. Yolov8替换DW卷积的优点

    • 性能提升方面
      • 更好的特征提取能力:通过替换卷积方式,可能采用了更适合目标检测任务的卷积结构。例如,一些新型卷积可能在提取目标的语义特征和位置特征方面更加有效。传统的DW卷积虽然有一定的优势,但新的卷积结构可能会根据Yolov8的特点进行优化,能够更好地捕捉目标的细节信息,对于小目标检测等具有挑战性的任务可能会有更好的表现。
      • 增强模型的泛化能力:新的卷积替换可能使得模型对不同场景、不同尺度目标的适应能力更强。在复杂的实际应用场景中,如不同光照、不同角度、不同物体形态等情况下,模型能够更稳定地检测目标,减少过拟合现象,提高模型在各种数据集和实际应用场景中的泛化性能。
    • 效率优化方面
      • 更快的推理速度:虽然DW卷积本身已经在一定程度上减少了计算量,但新的卷积可能在计算效率上有进一步的优化。这可能是通过改进卷积算法的实现方式,或者减少不必要的中间计算过程等手段来实现的。在实时目标检测应用场景中,如视频监控、自动驾驶等,更快的推理速度意味着能够更及时地检测到目标,提高系统的响应性能。
      • 内存占用优化:除了计算速度,内存占用也是模型部署的一个重要考量因素。新的卷积替换可能会减少模型在运行过程中的内存占用,使得模型能够在内存资源有限的设备上更流畅地运行,扩大了Yolov8模型的应用范围,比如在一些边缘计算设备上的部署。

yolov8.yaml文件增加DW卷积

yolov8.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

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

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

yolov8.yaml将Conv卷积替换成DWConv

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect

# Parameters
nc: 80  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPs
  s: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPs
  m: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPs
  l: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs
  x: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs

# YOLOv8.0n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, DWConv, [64, 3, 2]]  # 0-P1/2
  - [-1, 1, DWConv, [128, 3, 2]]  # 1-P2/4
  - [-1, 3, C2f, [128, True]]
  - [-1, 1, DWConv, [256, 3, 2]]  # 3-P3/8
  - [-1, 6, C2f, [256, True]]
  - [-1, 1, DWConv, [512, 3, 2]]  # 5-P4/16
  - [-1, 6, C2f, [512, True]]
  - [-1, 1, DWConv, [1024, 3, 2]]  # 7-P5/32
  - [-1, 3, C2f, [1024, True]]
  - [-1, 1, SPPF, [1024, 5]]  # 9

# YOLOv8.0n head
head:
  - [-1, 1, nn.Upsample, [None, 2, 'nearest']]
  - [[-1, 6], 1, Concat, [1]]  # cat backbone P4
  - [-1, 3, C2f, [512]]  # 12

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

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 12], 1, Concat, [1]]  # cat head P4
  - [-1, 3, C2f, [512]]  # 18 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 9], 1, Concat, [1]]  # cat head P5
  - [-1, 3, C2f, [1024]]  # 21 (P5/32-large)

  - [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

在这里插入图片描述


原文地址:https://blog.csdn.net/zhang1379/article/details/143575079

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!