专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例
专栏链接: YOLOv8基础解析+创新改进+实战案例
介绍
摘要
下采样操作,如最大池化或步幅卷积,被广泛应用于卷积神经网络(CNN)中,用于聚合局部特征、扩大感受野和最小化计算开销。然而,对于语义分割任务,在局部邻域内进行池化特征可能会导致重要空间信息的丧失,而这些信息对于逐像素的预测是有帮助的。为了解决这个问题,我们引入了一种简单但有效的池化操作,称为基于Haar小波的下采样(HWD)模块。该模块可以轻松集成到CNN中,以提高语义分割模型的性能。HWD的核心思想是应用Haar小波变换来降低特征图的空间分辨率,同时尽可能保留信息。此外,为了研究HWD的优点,我们提出了一种新颖的度量标准,称为特征熵指数(FEI),用于衡量CNN下采样后的信息不确定程度。具体而言,FEI可以用来指示下采样方法在语义分割中保留关键信息的能力。我们的综合实验表明,提出的HWD模块可以(1)在不同模态图像数据集和各种CNN架构上有效提高分割性能,且(2)相比传统下采样方法,能有效减少信息不确定性。我们的实现可在https://github.com/apple1986/HWD获取。
文章链接
论文地址:论文地址
代码地址:代码地址
基本原理
Haar小波
Haar小波是一种最简单的正交小波,其基本函数由两个函数构成:尺度函数 ϕ和小波函数 ψ。具体定义如下:
尺度函数ϕ0(x):
$$ ϕ0(x) = \begin{cases} 1 & \text{if } 0 \leq x < 1 \\ 0 & \text{otherwise} \end{cases} $$一维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模块主要由两个部分组成:
无损特征编码模块:利用Haar小波变换来降低特征图的空间分辨率,同时保持所有信息。Haar小波变换是一种紧凑、二进制、正交的小波变换,广泛应用于图像编码、边缘提取和二进制逻辑设计 。
特征表示学习模块:由标准的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