YOLOv8模型改进 第十二讲 添加Haar小波下采样Down_wt卷积

         在深度学习中,特征提取是关键环节。传统的卷积神经网络(CNN)通过卷积层提取图像特征,但在处理复杂图像时,单一的频域信息可能不足以捕获所有重要细节。为了解决这个问题,我们可以结合小波变换(DWT)和卷积操作,使用Down_wt卷积提高YOLOv8模型的精度。

1. Down_wt卷积概述

下图展示了Down_wt卷积的结构。通过Haar小波变换,该卷积模块实现了高效的特征提取和降采样。

Down_wt 模块的设计

Down_wt 模块的核心功能是执行小波变换,并将变换后的结果与卷积层结合。下面是模块的关键组成部分:

        小波变换:使用 DWTForward 类进行小波变换,提取低频和高频成分。

        特征拼接:将低频成分和三个高频成分(水平、垂直和对角)拼接在一起,形成新的输入。

        卷积层:通过1x1卷积、批量归一化和ReLU激活函数处理拼接后的特征。

2. 安装Down_wt环境

第一:下载代码,并将其解压GitHub - fbcotter/pytorch_wavelets: Pytorch implementation of 2D Discrete Wavelet (DWT) and Dual Tree Complex Wavelet Transforms (DTCWT) and a DTCWT based ScatterNet

第二: 找到其路径pytorch_wavelets路径下使用 pip install . 安装包

第三:安装 PyWavelets   pip install PyWavelets -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com 

  3. 接下来,我们将详细介绍如何将Down_wt集成到 YOLOv8 模型中。        

这是我的GitHub代码:tgf123/YOLOv8_improve (github.com)

这是改进讲解:YOLOv8模型改进 第十二讲 添加Haar小波下采样Down_wt卷积_哔哩哔哩_bilibili

3.1  如何添加

        1. 首先,在我上传的代码中yolov8_improve中找到Down_wt.py代码部分,它包含两个部分一个是Down_wt.py的核心代码,一个是yolov8模型的配置文件。 

       

        2. 然后我们在modules文件夹下面创建Down_WT.py文件,然后将Down_wt的核心代码放入其中

    3. 在 task.py文件中导入Down_wt

from ultralytics.nn.modules.HWD import Down_wt

     4. 然后修改代码

        5. 最后将配置文件复制到下面文件夹下

        同时修改ultralytics-main\ultralytics\engine\validator.py  第115行添加下面代码,关闭验证时的半精度。

 

        6. 运行代码跑通 


from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld

if __name__=="__main__":

    # 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
    model = YOLO(r"D:\bilibili\model\ultralytics-main\ultralytics\cfg\models\v8\yolov8_downwt.yaml")\
        .load(r'D:\bilibili\model\ultralytics-main\tests\yolov8n.pt')  # build from YAML and transfer weights

    results = model.train(data=r'D:\bilibili\model\ultralytics-main\ultralytics\cfg\datasets\VOC_my.yaml',
                          epochs=100, imgsz=640, batch=8,amp = False)

### YOLOv8 中引入小波卷积 (WTConv) 的实现方法 为了在 YOLOv8 中集成小波卷积WTConv),可以按照以下步骤操作: #### 1. 环境准备 确保安装必要的依赖库,特别是 `PyWavelets` 库用于执行小波变换。 ```bash pip install PyWavelets -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 此命令会从清华大学镜像源下载并安装所需的 Python 包[^4]。 #### 2. 修模型定义文件 编辑 YOLOv8模型架构部分,在适当位置加入 WTConv 层。通常可以在骨干网络中的某些层之后添加这些新的卷积单元来增强特征提取能力。 对于具体如何修模型结构,可以从已有的改进版本获取灵感,比如 YOLOv11 改进版中提到的方法[^3]。 #### 3. 编写自定义卷积类 创建一个新的 Python 文件(如 `wtconv.py`),在此文件内定义一个小波卷积类 `WTConvLayer` 或者继承现有的卷积基类进行扩展。该类应包含前向传播逻辑以及任何其他辅助函数。 ```python import torch.nn as nn from pywt import dwt2, idwt2 class WTConvLayer(nn.Module): def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, padding=1): super(WTConvLayer, self).__init__() # 初始化标准卷积层和其他参数... def forward(self, x): LL, (LH, HL, HH) = dwt2(x, 'haar') # 进行二维离散小波变换 # 对低频分量LL应用常规卷积操作 conv_LL = ... # 使用预定义的标准卷积方式处理 # 合成逆变换后的图像 reconstructed_x = idwt2((conv_LL, (LH, HL, HH)), 'haar') return reconstructed_x ``` 这段代码展示了如何利用 PyWavelets 库来进行二维离散小波变换,并将其应用于输入张量上。 #### 4. 更新训练脚本 最后一步是在主程序里加载经过调整的新模块,并设置合适的超参数以适应新特性带来的变化。这可能涉及到调整学习率、批量大小等因素,以便更好地收敛于最优解。 通过上述过程,就可以成功地将基于小波理论设计的新型卷积算子融入到经典的 YOLO 物体检测框架当中去了[^2]。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值