在图像处理的图像去模糊领域,传统方法面临诸多困境,促使深度学习中的深度神经网络方法成为研究焦点,其中多尺度架构与频率域变换至关重要。在此背景下,WaveletConv 应运而生,其与离散小波变换紧密相连。传统单图像盲去模糊的单尺度方法在直接处理复杂恢复问题时效率低下,多尺度方法虽基于粗到细思想,但在恢复空间细节方面存在局限。与此同时,傅里叶变换也被一些先进算法引入作为频率先验辅助图像恢复,然而离散小波变换在处理包含突变信号的图像上更具优势,且能更好地利用现实世界中因相机短曝光产生的具有特定方向性和连续轨迹的模糊信息。WaveletConv 通过特殊的卷积操作和精心设计的滤波器,实现从空间域到小波域的特征转换,生成具有不同频率和方向特征的子信号,并借助自监督机制构建小波损失加以约束,有效提升图像去模糊算法对边缘和细节高频成分的恢复能力,在增强图像质量方面发挥着不可或缺的作用,相比傅里叶变换在处理此类问题上展现出独特的价值。
上面是原模型,下面是改进模型

1. 小波卷积WaveletConv介绍
1. WaveletConv原理:
基于离散小波变换(DWT):WaveletConv 的核心原理是利用离散小波变换来处理图像信号。离散小波变换可以将图像信号分解为不同频率的子信号,包括低频近似信号和高频细节信号。低频信号代表图像的大致轮廓和整体结构,高频信号则包含了图像的边缘、纹理等细节信息。通过这种分解,能够更有效地捕捉和处理图像中的不同特征,尤其在图像去模糊等任务中,有助于更好地恢复图像的细节和清晰度。
特征域转换与信息提取:在实际应用中,WaveletConv 将输入图像的特征从空间域转换到小波域。在小波域中,不同频率和方向的信息被分离和提取,使得网络能够更有针对性地处理这些信息。例如,对于模糊图像,高频细节信息往往是恢复图像清晰度的关键,WaveletConv 通过在小波域的操作,能够更精准地处理这些高频成分,从而提升图像恢复的质量。
2. WaveletConv 结构:
输入与输出:输入为特征图,经过 WaveletConv 操作后,输出在小波域的投影。输出的特征图包含了低频(L)、水平高频(H)、垂直高频(V)和对角高频(D)等不同频率和方向的成分,维度变为原来的 4 倍,空间分辨率变为原来的一半。
内部操作:内部包含了一系列卷积操作,如先进行的卷积,然后经过深度可分离卷积(DWConv )、激活函数(GELU)以及卷积等,实现特征的转换和提取。
逆小波卷积(InverseWaveletConv):与正向小波卷积相对应,用于将小波域的特征转换回空间域,以得到最终的输出结果
2. YOLOv11与卷积调制ConvMod的结合
可以在YOLOv11原有的局部特征基础上,增加对全局特征的关注,使特征表达更加丰富和准确。
3. 小波卷积WaveletConv代码部分
YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub
视频讲解:YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何根据自己的数据集选择最优的模块提升精度_哔哩哔哩_bilibili
YOLOv11全部代码,现有几十种改进机制。
4. 将小波卷积WaveletConv引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在task.py中导入包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行成功
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"D:\model\yolov11\ultralytics\cfg\models\11\yolo11_waveletConv.yaml")\
.load(r'D:\model\yolov11\yolo11n.pt') # build from YAML and transfer weights
results = model.train(data=r'D:\model\yolov11\ultralytics\cfg\datasets\VOC_my.yaml',
epochs=300,
imgsz=640,
batch=64,
# cache = False,
# single_cls = False, # 是否是单类别检测
# workers = 0,
# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
# amp = True
)