yolov8涨点系列之替换DW卷积
文章目录
- yolov8.yaml文件增加DW卷积
- yolov8.yaml
- yolov8.yaml将Conv卷积替换成DWConv
-
深度可分离卷积(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)等常见情况下,参数减少量是很可观的。
- 计算量降低:由于参数量的减少,在进行卷积运算时,计算量也相应降低。这对于在资源受限的设备(如移动设备)上运行的深度学习模型或者对于大规模数据集进行训练时,能够有效提高运算效率,加快模型训练和推理的速度。
- 模型轻量化:有助于构建轻量化的神经网络模型,在保持一定性能的前提下,降低模型的复杂度,便于模型的部署和应用。
- 原理
-
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)!