【YOLOv8改进】HWD: Haar小波降采样,用于语义分割的降采样模块,减少特征图的空间分辨率

简介: YOLOv8专栏探讨了卷积网络的改进,特别是提出了一种名为HWD的基于Haar小波的下采样模块,用于语义分割,旨在保留更多空间信息。HWD结合了无损编码和特征表示学习,提高了模型性能并减少了信息不确定性。新度量标准FEI量化了下采样的信息保留能力。论文和代码可在提供的链接中找到。核心代码展示了如何在PyTorch中实现HWD模块。

专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例

专栏链接: YOLOv8基础解析+创新改进+实战案例

介绍

image-20240716230330732

摘要

下采样操作,如最大池化或步幅卷积,被广泛应用于卷积神经网络(CNN)中,用于聚合局部特征、扩大感受野和最小化计算开销。然而,对于语义分割任务,在局部邻域内进行池化特征可能会导致重要空间信息的丧失,而这些信息对于逐像素的预测是有帮助的。为了解决这个问题,我们引入了一种简单但有效的池化操作,称为基于Haar小波的下采样(HWD)模块。该模块可以轻松集成到CNN中,以提高语义分割模型的性能。HWD的核心思想是应用Haar小波变换来降低特征图的空间分辨率,同时尽可能保留信息。此外,为了研究HWD的优点,我们提出了一种新颖的度量标准,称为特征熵指数(FEI),用于衡量CNN下采样后的信息不确定程度。具体而言,FEI可以用来指示下采样方法在语义分割中保留关键信息的能力。我们的综合实验表明,提出的HWD模块可以(1)在不同模态图像数据集和各种CNN架构上有效提高分割性能,且(2)相比传统下采样方法,能有效减少信息不确定性。我们的实现可在https://github.com/apple1986/HWD获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

Haar小波

Haar小波是一种最简单的正交小波,其基本函数由两个函数构成:尺度函数 ϕ和小波函数 ψ。具体定义如下:

  1. 尺度函数ϕ0(x):
    $$ ϕ0(x) = \begin{cases} 1 & \text{if } 0 \leq x < 1 \\ 0 & \text{otherwise} \end{cases} $$

  2. 一维Haar变换的尺度函数ϕ1(x)和小波函数ψ1(x):
    $$ ϕ1(x) = \frac{1}{\sqrt{2}}(ϕ0(2x) + ϕ0(2x - 1)) $$
    $$ ψ1(x) = \frac{1}{\sqrt{2}}(ϕ0(2x) - ϕ0(2x - 1)) $$

通过这些函数,Haar变换可以将信号分解成低频(尺度函数)和高频(小波函数)成分。对于二维信号,如灰度图像,Haar小波变换会产生四个分量:低频分量(A),以及水平(H)、垂直(V)和对角线(D)方向的高频分量 。

Haar小波降采样(HWD)

Haar小波降采样(HWD)是一种用于语义分割的降采样模块,旨在通过Haar小波变换减少特征图的空间分辨率,同时尽量保留信息。HWD模块主要由两个部分组成:

  1. 无损特征编码模块:利用Haar小波变换来降低特征图的空间分辨率,同时保持所有信息。Haar小波变换是一种紧凑、二进制、正交的小波变换,广泛应用于图像编码、边缘提取和二进制逻辑设计 。

  2. 特征表示学习模块:由标准的1×1卷积层、批归一化层和ReLU激活函数组成,用于提取辨别性特征。此模块调整特征图的通道数,以适应后续层,并过滤冗余信息 。

核心代码

import torch
import torch.nn as nn
from pytorch_wavelets import DWTForward

class Down_wt(nn.Module):
    def __init__(self, in_ch, out_ch):
        super(Down_wt, self).__init__()
        # 定义离散小波变换 (DWT) 前向操作
        self.wt = DWTForward(J=1, mode='zero', wave='haar')
        # 定义卷积、批归一化和ReLU的组合
        self.conv_bn_relu = nn.Sequential(
            nn.Conv2d(in_ch * 4, out_ch, kernel_size=1, stride=1),  # 1x1卷积层,输入通道数为in_ch*4,输出通道数为out_ch
            nn.BatchNorm2d(out_ch),  # 批归一化层
            nn.ReLU(inplace=True),  # ReLU激活函数
        )

    def forward(self, x):
        # 对输入进行小波变换
        yL, yH = self.wt(x)  # yL是低频分量,yH是高频分量
        y_HL = yH[0][:, :, 0, ::]  # 获取高频分量中的水平细节分量
        y_LH = yH[0][:, :, 1, ::]  # 获取高频分量中的垂直细节分量
        y_HH = yH[0][:, :, 2, ::]  # 获取高频分量中的对角细节分量
        # 将低频分量和所有高频分量在通道维度上拼接
        x = torch.cat([yL, y_HL, y_LH, y_HH], dim=1)  
        # 通过卷积、批归一化和ReLU组合
        x = self.conv_bn_relu(x)

        return x  # 返回处理后的输出

task与yaml配置

详见: https://blog.csdn.net/shangyanaf/article/details/140479585

相关文章
|
7月前
|
机器学习/深度学习
YOLOv8改进 | 注意力篇 | ACmix自注意力与卷积混合模型(提高FPS+检测效率)
YOLOv8改进 | 注意力篇 | ACmix自注意力与卷积混合模型(提高FPS+检测效率)
349 0
|
数据处理
数据处理 过采样与欠采样 SMOTE与随机采样 达到样本均衡化
数据处理 过采样与欠采样 SMOTE与随机采样 达到样本均衡化
333 0
数据处理 过采样与欠采样 SMOTE与随机采样 达到样本均衡化
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
过采样与欠采样技术原理图解:基于二维数据的常见方法效果对比
本文介绍了处理不平衡数据集的过采样和欠采样技术,包括随机过采样、SMOTE、ADASYN、随机欠采样、Tomek Links、Near Miss 和 ENN 等方法。通过二维数据集的可视化示例,直观展示了各种方法的原理和效果差异。文章还讨论了混合采样方法(如SMOTETomek和SMOTEENN)以及应用这些方法的潜在风险,强调了在实际应用中审慎选择的重要性。
60 3
|
7月前
|
机器学习/深度学习 编解码 算法
SwinFIR:用快速傅里叶卷积重建SwinIR和改进的图像超分辨率训练
SwinFIR:用快速傅里叶卷积重建SwinIR和改进的图像超分辨率训练
212 1
|
7月前
|
机器学习/深度学习 编解码 测试技术
图像超分:真实感图像超分辨率的局部判别学习方法
图像超分:真实感图像超分辨率的局部判别学习方法
91 0
|
7月前
|
机器学习/深度学习 传感器 编解码
快7倍 | SpirDet基于降采样正交重参化+稀疏解码器有效减少延迟,同时提升小目标检测精度
快7倍 | SpirDet基于降采样正交重参化+稀疏解码器有效减少延迟,同时提升小目标检测精度
118 0
|
7月前
|
机器学习/深度学习 算法 计算机视觉
BEV新SOTA | Sparse4D v3用实例去噪+质量估计+解耦注意力全面提升BEV检测性能
BEV新SOTA | Sparse4D v3用实例去噪+质量估计+解耦注意力全面提升BEV检测性能
144 0
|
7月前
|
传感器 移动开发 测试技术
通过卷积公式学习声速重建的成像模型
【1月更文挑战第1篇】通过卷积公式学习声速重建的成像模型
82 2
|
7月前
|
机器学习/深度学习
YOLOv5改进 | 注意力篇 | ACmix自注意力与卷积混合模型(提高FPS+检测效率)
YOLOv5改进 | 注意力篇 | ACmix自注意力与卷积混合模型(提高FPS+检测效率)
215 0
|
机器学习/深度学习 传感器 算法
【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)
【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)

相关实验场景

更多