Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结

论文:https://arxiv.org/pdf/2305.10899.pdf

URUR数据集:https://github.com/jankyee/URUR

目录

一、论文背景和出发点

二、创新点

三、URUR数据集制作的相关工作

四、WSDNet的具体实现

1. 浅层分支S

2. 深层分支D

五 、Wavelet Smooth Loss

六 、优化

七、实验

1. 下采样方法对比

2. WSL损失函数的有效性

八、结论


一、论文背景和出发点

随着人们对超高分辨率(UHR)分割方法的兴趣不断增加和快速发展,迫切需要一个覆盖广泛场景并具有全细粒度密集标注的大规模基准数据集来促进该领域的发展。

为此,引入了URUR数据集,一个包含最够多(3008张5120×5120大小的图像)且具有超丰富上下文的超高分辨率数据集。

此外,还提出了WSDNet,这是一个更高效、更有效的UHR分割框架,尤其是在超丰富的上下文中表现出色。

二、创新点

1. 介绍了URUR数据集,这是一个新的大规模数据集,涵盖了具有全细粒度密集注释的广泛场景,各方面比较,它优于所有现有的UHR数据集。
2. 提出了WSDNet,以通过多级DWT-IWT保留更多的空间细节,并提出了小波平滑损失,以在频域中利用平滑应变重建原始结构上下文和纹理分布。
3. 统计和实验证明了URUR和WSDNet的优越性。WSDNet在几个UHR数据集上实现了准确性、内存和推理速度之间的最新平衡。

URUR数据集与所有现有的UHR数据集对比结果:

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第1张图片

URUR在数量、注释质量、上下文丰富度和场景复杂度方面都远超所有数据集。

三、URUR数据集制作的相关工作

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第2张图片

原译文:

为了有效和准确地进行注释,首先将每个尺寸为5120×5120的原始UHR图像均匀地裁剪成多个尺寸为1000×1000的patches。我们让注释器分别对这些图像patches进行注释,然后将它们的结果相应地合并,以获得相对于原始UHR图的最终注释。这样,我们确保每个注释器只关注较小的图像补丁,这有利于注释过程,并提高了注释结果的准确性。在裁剪过程中,相邻的面片有120×1000像素的重叠区域,以保证标注结果的一致性,避免边界消失。为了进一步节省人力,加快整个过程,用早期手动标注的图像训练了ISD-Net模型,并用于在其余图像上生成分割掩模。作为参考,注释器在我们开发的注释工具的帮助下调整掩码。

URUR总共注释了788.52亿像素,在8个类别上具有100%的注释密度,注释实例总数高达20.58万个,远远优于所有其他数据集。此外,还揭示了每张图像注释统计的更多细节。我们统计了每张图像的平均类别和实例数,这在一定程度上反映了内容的丰富性和场景的复杂性。

为了比较数据集中的整体场景复杂性,本文设计了一个定量的度量指标,即场景上下文丰富度,算子公式如下:

其中,R是上下文丰富度,C是类别的数量,Oc是类别C的每个区域的对象实例的平均数量,pc是类别C每个区域的平均概率。q是调整实例数权重的可调参数,在实验中设置为2。

四、WSDNet的具体实现

WSDNet网络结构图:

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第3张图片

WSDNet由一个深分支D和一个浅分支S组成。

1. 浅层分支S

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第4张图片

目的:提取全尺寸的空间细节,同时保持较高的推理速度

过程:在S中,输入图像通过拉普拉斯金字塔(laplacian pyramid)被分解为两个原始图像的1/81/16的子频带H0、H1(高频残差),然后对H1进行上采样恢复到1/8,与H0进行concatenate操作(拼接),并馈送到shallow network中,以提取全尺寸的空间细节。经过shallow network分别输出两个原始图像的1/81/16的特征图,1/16的特征图经过上采样,与1/8的特征图和深层分支D的输出特征图经过融合。

(1)图像预处理(拉斯普斯金字塔)

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第5张图片

目的:将RGB图片转化为高频残差,使用高频残差可以进一步加强浅层分支学习互补的空间细节。

方法:原始输入RGB图像I被高频残差取代,算子公式如下:

其中g(·)表示高斯模糊,U(·)代表上采样操作。

2. 深层分支D

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第6张图片

目的:学习高级类别上下文。

过程:在D中,输入图像使用二维离散小波变换(DWT)进行下采样,得到的四个为原图大小1/2的子带图像I1,I2,I3,I4,然后再通过一个CNN模块和一个二维DWT,将每个子带图像又分解为四个为原图大小1/4的子带图像,再通过一个CNN块,然后输入到深度网络中,以获取高级类别上下文,得到的四组为原图大小1/32的子带图像,接着,利用两维反向离散小波变换(IWT将原大小1/32的图像上采样到1/8,与浅层分支S输出的图像进行融合。此外,在还会通过一个分割头使用原大小1/32的图像计算辅助损失Laux

(1) 离散小波变换(DWT)

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第7张图片

目的:以较少的信息丢失,保留原始图像的细节。

方法:小波变换是一种基本的时频分析方法,它将输入信号逐步分解为不同的频率子带,以解决混叠问题。特别是,离散小波变换(DWT)通过四个滤波器(f _{LL},f_{LH},f_{HL},f_{HH})将输入图像 I 变换为四个离散小波子带I_1,I_2,I_3,I_4 ,算子公式如下:

其中,⊗是卷积运算。I_1表示在粗粒度级别描述基本对象结构的所有低频信息I_2,I_3,I_4包括在细粒度级别保留对象纹理细节的高频信息


2DWT概括:由图像以不同的次序分别通过高通滤波器(High pass filter)和低通滤波器(Low pass filter),可以得到四种不同的离散小波子带:LL(低频分量,代表图像的轮廓信息)、LH(图像垂直方向细节信息,行低频、列高频)、HL(图像水平方向细节信息,行高频、列低频)、HH(斜45度高频分量,表示图像斜45度方向细节信息)。H和L表示的是高通滤波器(High pass filter)和低通滤波器(Low pass filter),高通滤波器用于提取边缘特征,低通滤波器用于提取全局特征

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第8张图片

连续小波变换(CWT):可以简单的理解为用一个很小的波拟合一个复杂的波,这样就可以得到一个反映非稳定信号波形变化的频率谱(这里指的是一维小波变换)。

一维离散小波变换(DWT):针对连续小波变换的尺度参数和平移参数进行的离散化取样。通常使用一维滤波器对图像数据进行一维离散小波变换。

二维离散小波变换(2DWT):图像信号具有非平稳特性,使用小波变换很好地聚焦到图像的任意细节。对于图像来说,我们希望对图像不同的方向进行采样,这时我们就需要使用二维离散小波变换,即小波分解,也就是分别使用一维高通滤波器和一维低通滤波器对图像进行行滤波和列滤波,其实可以看做对图像的行水平方向、列垂直方向分别进行隔点采样,这样就可以得到四种不同的离散小波子带LL、LH、HL、HH,反应了图像不同尺度上的特征信息。

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第9张图片

二维的离散小波变换细节可以参考二维MALLAT算法。

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第10张图片

总结:简单来说,使用DWT做下采样,可以高效描述图像的平坦区域(低频信息、全局信息),也可以有效处理图像信号的局部突变(高频信息,即图像的边缘轮廓等部分),使得在深度网络可以获取不同的类别上下文信息,此外使用DWT做下采样,由于DWT具有良好的双正交特性,可以通过反向离散小波变换(IWT)重建原始图像,可以避免直接使用简单的下采样和上采样,造成的信息的大量丢失


(2)反向离散小波变换(IWT)

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第11张图片

目的:重构图像,代替上采样。

方法:进行小波分解得到的四个子图,分别通过对应的反向高通滤波器和低通滤波器进行2次上采样并进行相加,最终得到重构图像。

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第12张图片

五 、Wavelet Smooth Loss

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第13张图片

目的:提出了小波平滑损失(WSL),来优化具有软约束的重构过程

方法:将L维DWT分别应用于II^{rec},并获得它们的低频子带和高频子带,在WSL损失函数中使用L1范数正则化约束高频子带,L2范数正则化约束低频子带,防止过拟合。WSL的算子公式如下:

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第14张图片

其中I_{l,b;1}表示第l个DWT之后的低频子带,I_{l,b;i}表示第l个DWT后的第i个高频子带。I^{rec}_{l,b;1}I^{rec}_{l,b;i}依次类推。λ1、λ2分别是低频和高频约束的权重。

L1范数正则化

WSL损失中更倾向对齐II^{rec}之间的纹理分布,而不是特定的频率值,但L2正则化的梯度与值密切相关,而L1正则化的梯度是独立的。 因此使用L1范数正则化约束I_{l,b;i}(高频子带)。

 L2范数正则化

相反,由于低频子带代表了基本的对象结构细节,利用L2正则化使输出的空间结构细节尽可能接近输入的细节,因此使用L1范数正则化约束低频子带I_{l,b;1}

六 、优化

目的:计算总损失,优化参数。

方法:小波平滑损失WSL、标准交叉熵损失Lseg和Laux。总损失L为:

其中λ3是损失函数Laux的权重。

七、实验

数据集:DeepGlobe,Inria Aerial和URUR

评估标准:mIoU,F1 score,Accuracy,精确性和每秒帧频(FPS)

1. 下采样方法对比

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第15张图片

实验结果表明,DWT-IWT模块在mIoU上实现了最佳性能和可观的推理速度,证明DWT-IWT模块可以为深度分支中的输入提供比普通下采样更高的性能。

2. WSL损失函数的有效性

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第16张图片

以交叉熵损失Lseg和辅助损失Laux作为基准。然后分别添加的普通超分辨率损失和所提出的WSL。实验结果表明,WSL表现最佳,证明了频域平滑约束的有效性。

八、结论

本文首先提出了URUR,这是一个覆盖广泛场景的大规模数据集,具有全细粒度的密集注释。它包含了足够高分辨率的大量图像、广泛的复杂场景、超丰富的上下文和细粒度的注释,远远优于现有的所有UHR数据集。此外,提出了一个更有效的为超高分辨率分割框架WS-DNet,其中DWT-IWT模块被整合以保留更多的空间细节小波平滑损失(WSL)被设计用于重建原始结构化上下文和纹理分布。实验证明了URUR和WSDNet的显著优越性。

DWT和IWT代码实现(使用哈尔小波变换)

def dwt_init(x):
    x01 = x[:, :, 0::2, :] / 2
    x02 = x[:, :, 1::2, :] / 2
    x1 = x01[:, :, :, 0::2]
    x2 = x02[:, :, :, 0::2]
    x3 = x01[:, :, :, 1::2]
    x4 = x02[:, :, :, 1::2]
    x_LL = x1 + x2 + x3 + x4
    x_HL = -x1 - x2 + x3 + x4
    x_LH = -x1 + x2 - x3 + x4
    x_HH = x1 - x2 - x3 + x4

    return torch.cat((x_LL, x_HL, x_LH, x_HH), 1)


def iwt_init(x):
    r = 2
    in_batch, in_channel, in_height, in_width = x.size()
    # print([in_batch, in_channel, in_height, in_width])
    out_batch, out_channel, out_height, out_width = in_batch, int(
        in_channel / (r ** 2)), r * in_height, r * in_width
    x1 = x[:, 0:out_channel, :, :] / 2
    x2 = x[:, out_channel:out_channel * 2, :, :] / 2
    x3 = x[:, out_channel * 2:out_channel * 3, :, :] / 2
    x4 = x[:, out_channel * 3:out_channel * 4, :, :] / 2

    h = torch.zeros([out_batch, out_channel, out_height, out_width]).float().cuda()

    h[:, :, 0::2, 0::2] = x1 - x2 - x3 + x4
    h[:, :, 1::2, 0::2] = x1 - x2 + x3 - x4
    h[:, :, 0::2, 1::2] = x1 + x2 - x3 - x4
    h[:, :, 1::2, 1::2] = x1 + x2 + x3 + x4

    return h


class DWT(nn.Module):
    def __init__(self):
        super(DWT, self).__init__()
        self.requires_grad = False

    def forward(self, x):
        return dwt_init(x)


class IWT(nn.Module):
    def __init__(self):
        super(IWT, self).__init__()
        self.requires_grad = False

    def forward(self, x):
        return iwt_init(x)

分解案例:

dwt_module=DWT()
x=Image.open('./test.png')
# x=Image.open('./mountain.png')
x=transforms.ToTensor()(x)
x=torch.unsqueeze(x,0)
x=transforms.Resize(size=(256,256))(x)
subbands=dwt_module(x)

# 分解
title=['LL','HL','LH','HH']

plt.figure()
for i in range(4):
    plt.subplot(2,2,i+1)
    temp=torch.permute(subbands[0,3*i:3*(i+1),:,:],dims=[1,2,0])
    plt.imshow(temp)
    plt.title(title[i])
    plt.axis('off')
plt.show()

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第17张图片

 重构案例:

dwt_module=DWT()
x=Image.open('./test.png')
# x=Image.open('./mountain.png')
x=transforms.ToTensor()(x)
x=torch.unsqueeze(x,0)
x=transforms.Resize(size=(256,256))(x)
subbands=dwt_module(x)

# 重构
title=['Original Image','Reconstruction Image']
reconstruction_img=IWT()(subbands).cpu()
ssim_value=ssim(x,reconstruction_img)  # 计算原图与重构图之间的结构相似度
print("SSIM Value:",ssim_value) # tensor(1.)
show_list=[torch.permute(x[0],dims=[1,2,0]),torch.permute(reconstruction_img[0],dims=[1,2,0])]

plt.figure()
for i in range(2):
    plt.subplot(1,2,i+1)
    plt.imshow(show_list[i])
    plt.title(title[i])
    plt.axis('off')
plt.show()

Ultra-High Resolution Segmentation with Ultra-Rich Context: A Novel Benchmark论文总结_第18张图片

参考博文:2DWT:2维离散小波变换(附Pytorch代码)、形象易懂讲解算法I——小波变换 、【图像处理】图像离散小波变换和小波变换之二维MALLAT 算法

你可能感兴趣的:(CVPR,2023论文盘点,小波变换,论文总结,cvpr,2022,超分辨)