SUNet: Swin Transformer with UNet for Image Denoising

ISCAS 2022的一篇文章,作为首个Swin Transformer在图像去噪领域的应用,效果来说感觉还有很大提高空间。但不的不说,自从Swin Transformer(2021)提出后,在整个cv领域独领风骚。作为一个通用的架构,可以将其应用在各个cv领域,从paperwithcode里就可以见其影响力:(截止到22.8.28)

1、目标检测:

2、图像超分辨率

3、实例分割:

4、3D医学图像分割:

今天,就来看看Swin Transformer 对于图像去噪任务的处理效果:

个人觉得 Swin Transformer 对于去噪来说还有很大的扩展空间,这篇论文的模型效果不是很好,可以值得去尝试尝试,看看有没有更好的方法提高模型效果。

论文的主要贡献:

1、结合Unet网络+ Swin Transformer

2、提出了一个双上采样模块 dual up-sample block

3、首个将Swin +unet用于图像去噪领域

4、在 两个通用数据集中测试的结果还不错

网络结构:

网络分为三个部分:1)Shallow feature extraction; 2) UNet feature extraction; and
3) Reconstruction module

1、Shallow feature extraction

使用3*3卷积,提取特征,输出通道96

2、 UNet feature extraction

带有 Swin Transformer Block 的UNET体系结构,其中包含8个 Swin Transformer 层,以取代卷积。
Swin Transformer Block(STB)和Swin Transformer层(STL):

STB:包含8个STL

这块建议去看 Swin Transformer 论文,讲的比较清楚。注意此时的输入输出大小完全一致,因此需要下采样。

下采样: Patch merging

Patch merging:通过查看Patch merging的源码,可以看到,其实就是一个下采样的过程,它可以看成一种加权池化的过程。实现维度下采样、特征加倍的效果。

class PatchMerging(nn.Module):
    def __init__(self, input_resolution, dim, norm_layer=nn.LayerNorm):
        super().__init__()
        self.input_resolution = input_resolution
        self.dim = dim
        self.reduction = nn.Linear(4 * dim, 2 * dim, bias=False)
        self.norm = norm_layer(4 * dim)

    def forward(self, x):
        """
        x: B, H*W, C
        """
        H, W = self.input_resolution
        B, L, C = x.shape
        assert L == H * W, "input feature has wrong size"
        assert H % 2 == 0 and W % 2 == 0, f"x size ({H}*{W}) are not even."

        x = x.view(B, H, W, C)

        x0 = x[:, 0::2, 0::2, :]  # B H/2 W/2 C
        x1 = x[:, 1::2, 0::2, :]  # B H/2 W/2 C
        x2 = x[:, 0::2, 1::2, :]  # B H/2 W/2 C
        x3 = x[:, 1::2, 1::2, :]  # B H/2 W/2 C
        x = torch.cat([x0, x1, x2, x3], -1)  # B H/2 W/2 4*C
        x = x.view(B, -1, 4 * C)  # B H/2*W/2 4*C

        x = self.norm(x)
        x = self.reduction(x)

        return x

上采样:Dual up-sample

作者提出了 上采样,

该模块包括两种现有的上样本方法(即双线性和PixelShuffle),以防止棋盘伪影(Deconvolution and Checkerboard Artifacts中提出的)https://distill.pub/2016/deconv-checkerboard/ 产生原因:主要是出现在反卷积中。

上采样模块

通过两种上采样后,cat维度拼接后,通过一个卷积层将维度减半C/2

实验:

如上图所示。

Real-ESRGAN 超分辨网络

论文:Real-ESRGAN: TrainingReal-World Blind Super-Resolution with Pure Synthetic Data

代码:https://github.com/xinntao/Real-ESRGAN

Real-ESRGAN 的目标是开发出实用的图像/视频修复算法。
在 ESRGAN 的基础上使用纯合成的数据来进行训练,以使其能被应用于实际的图片修复的场景(顾名思义:Real-ESRGAN)。

  1. 目标:解决真实场景下的图像模糊问题。
  2. 数据集的构建:模糊核、噪声、尺寸缩小、压缩四种操作的随机顺序。
  3. 超分网络backbone:ESRGAN的生成网络+U-Net discriminator判别器。
  4. 损失函数:L1 loss,perceptual loss,生成对抗损失。
  5. 主要对比方法是:RealSR、ESRGAN、BSRGAN、DAN、CDC。

创新点

  1. 提出了新的构建数据集的方法,用高阶处理,增强降阶图像的复杂度。
  2. 构造数据集时引入sinc filter,解决了图像中的振铃和过冲现象。
  3. 替换原始ESRGAN中的VGG-discriminator,使用U-Net discriminator,以增强图像的对细节上的对抗学习。
  4. 引入spectral normalization以稳定由于复杂数据集和U-Net discriminator带来的训练不稳定情况。

数据集构建

在讨论数据集的构建前,作者详细讨论了造成图像模糊的原因,例如:年代久远的手机、传感器噪声、相机模糊、图像编辑、图像在网络中的传输、JPEG压缩以及其它噪声。原文如下:

For example, when we take a photo with our cellphones, the photos may have several degradations, such as camera blur, sensor noise, sharpening artifacts, and JPEG compression. We then do some editing and upload to a social media APP, which introduces further compression and unpredictable noises.

所以作者针对以上问题,提出了High-order降级模型。先面我们先介绍first-order降级模型,然后就很好理解High-order降级模型了。

First-order

First-order降级模型其实就是常规的降级模型,如上式所示,按顺序执行上述操作。

x代表降级后的图像,D代表降级函数,y代表原始图像;
k代表模糊核,r代表缩小比例,n代表加入的噪声,JPEG代表进行压缩。

每一种降级方法又有多种降级方案可以选择,如下图所示:

对于模糊核k,本方法使用各项同性(isotropic)和各向异性(anisotropic)的高斯模糊核。关于sinc filter会在下文中提到。

对于缩小操作r,常用的方法又双三次插值、双线性插值、区域插值—由于最近邻插值需要考虑对齐问题,所以不予以考虑。在执行缩小操作时,本方法从提到的3种插值方式中随机选择一种。

对于加入噪声操作n,本方法同时加入高斯噪声和服从泊松分布的噪声。同时,根据待超分图像的通道数,加入噪声的操作可以分为对彩色图像添加噪声和对灰度图像添加噪声。

JPEG压缩,本方法通过从[0, 100]范围中选择压缩质量,对图像进行JPEG压缩,其中0表示压缩后的质量最差,100表示压缩后的质量最好。JPEG压缩方法点此处

  • High-order

First-order由于使用相对单调的降级方法,其实很难模仿真实世界中的图像低分辨模糊情况。因此,作者提出的High-order其实是为了使用更复杂的降级方法,更好的模拟真实世界中的低分辨模糊情况,从而达到更好的学习效果。一阶降级模型构建的数据集训练结果如下:

高阶降级模型公式如下:

上式,其实就是对First-order进行多次重复操作,也就是每一个D都是执行一次完整的First-order降级。作者通过实验得出,当执行2次First-order时生成的数据集训练效果最好。所以,High-order的pipeline如下:

  • sinc filter

为了解决超分图像的振铃和过冲现象(振铃过冲在图像处理中很常见,此处不过多介绍),作者提出了在构建降级模型中增加sinc filter的操作。先来看一下振铃和过冲伪影的效果:

上图表示实际中的振铃和过冲伪影现象,下图表示通过对sinc filter设置不同的因子人工模仿的振铃和过冲伪影现象。过于如何构造sinc filter,详细细节建议看原文。

sinc filter在两个位置进行设置,一是在每一阶的模糊核k的处理中,也就是在各项同性和各项异性的高斯模糊之后,设置sinc filter;二是在最后一阶的JPEG压缩时,设置sinc filter,其中最后一阶的JPEG和sinc filter执行先后顺序是随机的。

网络结构

  • 生成网络

生成网络是ESRGAN的生成网络,基本没变,只是在功能上增加了对x2和x1倍的图像清晰度提升。对于x4倍的超分辨,网络完全按照ESRGAN的生成器执行;而对于X2和X1倍的超分辨,网络先进行pixel-unshuffle(pixel-shuffl的反操作,pixel-shuffle可理解为通过压缩图像通道而对图像尺寸进行放大),以降低图像分辨率为前提,对图像通道数进行扩充,然后将处理后的图像输入网络进行超分辨重建。举个例子:对于一幅图像,若只想进行x2倍放大变清晰,需先通过pixel-unshuffle进行2倍缩小,然后通过网络进行4倍放大。

对抗网络

由于使用的复杂的构建数据集的方式,所以需要使用更先进的判别器对生成图像进行判别。之前的ESRGAN的判别器更多的集中在图像的整体角度判别真伪,而使用U-Net 判别器可以在像素角度,对单个生成的像素进行真假判断,这能够在保证生成图像整体真实的情况下,注重生成图像细节。

  • 光谱标准正则化

通过加入这一操作,可以缓和由于复杂数据集合复杂网络带来的训练不稳定问题。

训练

分为两步:

  1. 先通过L1 loss,训练以PSRN为导向的网络,获得的模型称为Real-ESRNet。
  2. 以Real-ESRNet的网络参数进行网络初始化,损失函数设置为 L1 loss、perceptual loss、 GAN loss,训练最终的网络Real-ESRGAN。

ESRGAN图像超分辨

论文:https://arxiv.org/abs/1809.00219

github: https://github.com/xinntao/ESRGAN

ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks发表于ECCV 2018 的 Workshops,在SRGAN的基础上进行了改进,包括改进网络的结构,判决器的判决形式,以及更换了一个用于计算感知域损失的预训练网络

超分辨率生成对抗网络(SRGAN)是一项开创性的工作,能够在单一图像超分辨率中生成逼真的纹理。这项工作发表于CVPR 2017,

文章链接:Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

但是,放大后的细节通常伴随着令人不快的伪影。为了更进一步地提升视觉质量,作者仔细研究了SRGAN的三个关键部分:1.网络结构 2.对抗性损失 3.感知域损失;并对每一项进行改进,得到ESRGAN。具体而言,文章提出了一种Residual-in-Residual Dense Block (RRDB)的网络单元,在这个单元中,去掉了BN(Batch Norm)层。此外,作者借鉴了relativistic GAN的想法,让判别器预测图像的真实性而不是图像“是否是fake图像”。最后,文章对感知域损失进行改进,使用激活前的特征,这样可以为亮度一致性和纹理恢复提供更强的监督。在这些改进的帮助下,ESRGAN得到了更好的视觉质量以及更逼真和自然的纹理。

在纹理和细节上,ESRGAN都优于SRGAN

SRGAN的思考与贡献

现有的超分辨率网络在不同的网络结构设计以及训练策略下,超分辨的效果得到了很大的提升,特别是PSNR指标。但是,基于PSNR指标的模型会倾向于生成过度平滑的结果,这些结果缺少必要的高频信息。PSNR指标与人类观察者的主观评价从根本上就不统一。

一些基于感知域信息驱动的方法已经提出来用于提升超分辨率结果的视觉质量。例如,感知域的损失函数提出来用于在特征空间(instead of 像素空间)中优化超分辨率模型;生成对抗网络通过鼓励网络生成一些更接近于自然图像的方法来提升超分辨率的质量;语义图像先验信息用于进一步改善恢复的纹理细节。

通过结合上面的方法,SRGAN模型极大地提升了超分辨率结果的视觉质量。但是SRGAN模型得到的图像和GT图像仍有很大的差距。

ESRGAN的改进

文章对这三点做出改进:1.网络的基本单元从基本的残差单元变为Residual-in-Residual Dense Block (RRDB);2.GAN网络改进为Relativistic average GAN (RaGAN);3.改进感知域损失函数,使用激活前的VGG特征,这个改进会提供更尖锐的边缘和更符合视觉的结果。

网络结构及思想

生成器部分

首先,作者参考SRResNet结构作为整体的网络结构,SRResNet的基本结构如下:

SRResNet基本结构

为了提升SRGAN重构的图像的质量,作者主要对生成器G做出如下改变:1.去掉所有的BN层;2.把原始的block变为Residual-in-Residual Dense Block (RRDB),这个block结合了多层的残差网络和密集连接。

如下图所示:

RRDB

思想:

BN层的影响

对于不同的基于PSNR的任务(包括超分辨率和去模糊)来说,去掉BN层已经被证明会提高表现和减小计算复杂度。BN层在训练时,使用一个batch的数据的均值和方差对该batch特征进行归一化,在测试时,使用在整个测试集上的数据预测的均值和方差。当训练集和测试集的统计量有很大不同的时候,BN层就会倾向于生成不好的伪影,并且限制模型的泛化能力。作者发现,BN层在网络比较深,而且在GAN框架下进行训练的时候,更会产生伪影。这些伪影偶尔出现在迭代和不同的设置中,违反了对训练稳定性能的需求。所以为了稳定的训练和一致的性能,作者去掉了BN层。此外,去掉BN层也能提高模型的泛化能力,减少计算复杂度和内存占用。

Trick:

除了上述的改进,作者也使用了一些技巧来训练深层网络:1.对残差信息进行scaling,即将残差信息乘以一个0到1之间的数,用于防止不稳定;2.更小的初始化,作者发现当初始化参数的方差变小时,残差结构更容易进行训练。

判别器部分

除了改进的生成器,作者也基于Relativistic GAN改进了判别器。判别器 D 使用的网络是 VGG 网络,SRGAN中的判别器D用于估计输入到判别器中的图像是真实且自然图像的概率,而Relativistic判别器则尝试估计真实图像相对来说比fake图像更逼真的概率。

具体而言,作者把标准的判别器换成Relativistic average Discriminator(RaD),所以判别器的损失函数定义为:

求均值的操作是通过对mini-batch中的所有数据求平均得到的,xf是原始低分辨图像经过生成器以后的图像。

可以观察到,对抗损失包含了xr和xf,所以这个生成器受益于对抗训练中的生成数据和实际数据的梯度,这种调整会使得网络学习到更尖锐的边缘和更细节的纹理。

感知域损失

文章也提出了一个更有效的感知域损失,使用激活前的特征(VGG16网络)。

感知域的损失当前是定义在一个预训练的深度网络的激活层,这一层中两个激活了的特征的距离会被最小化。与此相反,文章使用的特征是激活前的特征,这样会克服两个缺点。第一,激活后的特征是非常稀疏的,特别是在很深的网络中。这种稀疏的激活提供的监督效果是很弱的,会造成性能低下;第二,使用激活后的特征会导致重建图像与GT的亮度不一致。

使用激活前与激活后的特征的比较,(a)亮度;(b)细节

作者对使用的感知域损失进行了探索。与目前多数使用的用于图像分类的VGG网络构建的感知域损失相反,作者提出一种更适合于超分辨的感知域损失,这个损失基于一个用于材料识别的VGG16网络(MINCNet),这个网络更聚焦于纹理而不是物体。尽管这样带来的增益很小,但作者仍然相信,探索关注纹理的感知域损失对超分辨至关重要。

损失函数

经过上面对网络模块的定义和构建以后,再定义损失函数,就可以进行训练了。

对于生成器G,它的损失函数为:

代码解析:

https://zhuanlan.zhihu.com/p/54473407?utm_id=0

3.提取感知域损失的网络(Perceptual Network)

文章使用了一个用于材料识别的VGG16网络(MINCNet)来提取感知域特征,定义如下:

class MINCNet(nn.Module):
    def __init__(self):
        super(MINCNet, self).__init__()
        self.ReLU = nn.ReLU(True)
        self.conv11 = nn.Conv2d(3, 64, 3, 1, 1)
        self.conv12 = nn.Conv2d(64, 64, 3, 1, 1)
        self.maxpool1 = nn.MaxPool2d(2, stride=2, padding=0, ceil_mode=True)
        self.conv21 = nn.Conv2d(64, 128, 3, 1, 1)
        self.conv22 = nn.Conv2d(128, 128, 3, 1, 1)
        self.maxpool2 = nn.MaxPool2d(2, stride=2, padding=0, ceil_mode=True)
        self.conv31 = nn.Conv2d(128, 256, 3, 1, 1)
        self.conv32 = nn.Conv2d(256, 256, 3, 1, 1)
        self.conv33 = nn.Conv2d(256, 256, 3, 1, 1)
        self.maxpool3 = nn.MaxPool2d(2, stride=2, padding=0, ceil_mode=True)
        self.conv41 = nn.Conv2d(256, 512, 3, 1, 1)
        self.conv42 = nn.Conv2d(512, 512, 3, 1, 1)
        self.conv43 = nn.Conv2d(512, 512, 3, 1, 1)
        self.maxpool4 = nn.MaxPool2d(2, stride=2, padding=0, ceil_mode=True)
        self.conv51 = nn.Conv2d(512, 512, 3, 1, 1)
        self.conv52 = nn.Conv2d(512, 512, 3, 1, 1)
        self.conv53 = nn.Conv2d(512, 512, 3, 1, 1)

    def forward(self, x):
        out = self.ReLU(self.conv11(x))
        out = self.ReLU(self.conv12(out))
        out = self.maxpool1(out)
        out = self.ReLU(self.conv21(out))
        out = self.ReLU(self.conv22(out))
        out = self.maxpool2(out)
        out = self.ReLU(self.conv31(out))
        out = self.ReLU(self.conv32(out))
        out = self.ReLU(self.conv33(out))
        out = self.maxpool3(out)
        out = self.ReLU(self.conv41(out))
        out = self.ReLU(self.conv42(out))
        out = self.ReLU(self.conv43(out))
        out = self.maxpool4(out)
        out = self.ReLU(self.conv51(out))
        out = self.ReLU(self.conv52(out))
        out = self.conv53(out)
        return out

再引入预训练参数,就可以进行特征提取:

class MINCFeatureExtractor(nn.Module):
    def __init__(self, feature_layer=34, use_bn=False, use_input_norm=True, \
                device=torch.device('cpu')):
        super(MINCFeatureExtractor, self).__init__()

        self.features = MINCNet()
        self.features.load_state_dict(
            torch.load('../experiments/pretrained_models/VGG16minc_53.pth'), strict=True)
        self.features.eval()
        # No need to BP to variable
        for k, v in self.features.named_parameters():
            v.requires_grad = False

    def forward(self, x):
        output = self.features(x)
        return output

网络插值思想

为了平衡感知质量和PSNR等评价值,作者提出了一个灵活且有效的方法—网络插值。具体而言,作者首先基于PSNR方法训练的得到的网络G_PSNR,然后再用基于GAN的网络G_GAN进行finetune。

然后,对这两个网络相应的网络参数进行插值得到一个插值后的网络G_INTERP:

这样就可以通过 α 值来调整效果

训练细节

训练细节

放大倍数:4,mini-batch:16

通过Matlab的bicubic函数对HR图像进行降采样得到LR图像。

HR patch大小:128×128(实验发现使用大的patch时,训练一个深层网络效果会更好,因为一个增大的感受域会帮助模型捕捉更具有语义的信息)

训练过程:

1.训练一个基于PSNR指标的模型(L1 Loss)

初始化学习率:2×1e-4

每200000个mini-batch学习率除以2

2.以1中训练的模型作为生成器的初始化

λ=5×10−3,η=0.01,β=0.2 (残差scaling系数)

初始学习率:1e-4,并在50k,100k,200k,300k迭代后减半。

一个基于像素损失函数进行优化的预训练模型会帮助基于GAN的模型生成更符合视觉的结果,原因如下:1.可以避免生成器不希望的局部最优;2.再预训练以后,判别器所得到的输入图像的质量是相对较好的,而不是完全初始化的图像,这样会使判别器更关注到纹理的判别。

优化器:Adam( β1=0.9,β2=0.999 );交替更新生成器和判别器,直到收敛。

生成器的设置:1.16层(基本的残差结构) 2.23层(RDDB)

数据集:DIV2K,Flickr2K,OST;(有丰富纹理信息的数据集会是模型产生更自然的结果)

可以看到,ESRGAN得到的图像PSNR值不高,但是从视觉效果上看会更好,Percpetual Index值更小(越小越好),而且ESRGAN在 PIRM-SR 竞赛上也获得了第一名(在Percpetual Index指标上)。

经过实验以后,作者得出结论:

1.去掉BN:并没有降低网络的性能,而且节省了计算资源和内存占用。而且发现当网络变深变复杂时,带BN层的模型更倾向于产生影响视觉效果的伪影。

2.使用激活前的特征:得到 的图像的亮度更准确,而且可以产生更尖锐的边缘和更丰富的细节。

3.RaGAN:产生更尖锐的边缘和更丰富的细节。

4.RDDB:更加提升恢复得到的纹理(因为深度模型具有强大的表示能力来捕获语义信息),而且可以去除噪声。

网络插值实验

为了平衡视觉效果和PSNR等性能指标,作者对网络插值参数 α 的取值进行了实验,结果如下:

总结

文章提出的ESRGAN在SRGAN的基础上做出了改进,包括去除BN层,基本结构换成RDDB,改进GAN中判别器的判别目标,以及使用激活前的特征构成感知域损失函数,实验证明这些改进对提升输出图像的视觉效果都有作用。此外,作者也使用了一些技巧来提升网络的性能,包括对残差信息的scaling,以及更小的初始化。最后,作者使用了一种网络插值的方法来平衡输出图像的视觉效果和PSNR等指标值。

SRGAN —使用GAN进行图像高分辨的开山之作

论文: https://arxiv.org/abs/1609.04802(CVPR 2017)

这篇文章第一次将将生成对抗网络用在了解决超分辨率问题上。将GAN引入SR领域

之前超分的研究虽然主要聚焦于“恢复细粒度的纹理细节”这个问题上,但将问题一直固定在最大化峰值信噪比(Peak Signal-to-Noise Ratio, PSNR)上,等价于 最小化与GT图像的均方重建误差(mean squared reconstruction error, MSE)。

而这也就导致:

  1. 高频细节(high-frequency details) 的丢失,整体图像过于平滑/模糊;
  2. 与人的视觉感知不一致,超分图像的精确性与人的期望不匹配(人可能更关注前景,而对背景清晰度要求不高)。
中间蓝色框是基于MSE所学到的超分图像所在像素空间,红色框是真实超分图像所在的像素空间流形,基于GAN的方法驱动重构图像往真实图像像素流形区域靠近,从而感知上更真实可信

从而提出3个改进:

  1. 新的backbone:SRResNet;
  2. GAN-based network 及 新的损失函数:
  3. adversarial loss:提升真实感(photo-realistic natural images);
  4. content loss:获取HR image和生成图像的感知相似性(perceptual similarity),而不只是像素级相似性(pixel similarity);或者说特征空间的相似性而不是像素空间的相似性。
  5. 使用主观评估手段:MOS,更加强调人的感知。

SRGAN算法改进细节:

生成网络是新的结构SRResNet(横跨主干网络的skip connection操作很关键),卷积核尺寸k,输出通道数n,步长s。头部后续接了两个输出通道数为256=64*4的卷积块,因为其中PixelShuffle*2会将feature map转化 (64, H*2, W*2)的输出(sub-pixel convolution操作),这样总共upscale *4
  • SRResNet和GAN-based Network

上图就是新的网络结构,G网络是SRResNet,论文使用了16个residual blocks;D网络为8次卷积操作(4次步长为2)+2次全连接层的VGG网络。

损失函数

生成网络的损失函数为:

包含:

论文对VGG高层特征和低层特征分别做了实验,最终选择可能关注更多图像内容的高层特征作为论文实验的损失特征图。

判别网络的损失函数为二分类交叉熵损失函数:

SRGAN实验设置

使用数据集Set5,Set14,BSD100,BSD300测试集对训练模型进行实验评估: 4×分辨率超分,然后对图像的每个边界移除4个像素点,最后center-cropped计算PSNR和SSIM,进行有效性统计分析。

随机采样ImageNet数据集中350张图像进行训练(参考源码):

SRGAN实验结果及分析

消融实验说明:

  1. skip-connection结构的有效性;
  2. PSNR体现不出人的感知(MOS);
  3. GAN-based Network能更好捕捉一些人的感知细节(高频信息?),MOS更高;
  4. VGG特征重建也有助于捕捉图像的部分感知细节。

重新审视全局统计聚合以改进图像复原|旷视

论文标题: Revisiting Global Statistics Aggregation for Improving Image Restoration 

论文链接:https://arxiv.org/abs/2112.04491

作者单位:旷视科技

github地址:https://github.com/megvii-research/TLC

沿整个空间维度聚合的全局空间统计数据广泛用于高性能图像恢复器。例如,HINet 采用的实例归一化 (IN) 中的均值、方差,以及应用于 MPRNet 的 Squeeze and Excitation (SE) 中的全局平均池化(即均值)。本文首先表明,在训练/测试阶段分别在基于补丁/基于整个图像的特征上聚合的统计数据可能分布非常不同,并导致图像恢复器的性能下降。它已被以前的作品广泛忽视。为了解决这个问题,我们提出了一种简单的方法,即测试时间本地统计转换器(TLSC),它仅在测试时间将统计聚合操作的区域从全局替换为本地。无需重新训练或微调,我们的方法显着提高了图像恢复器的性能。特别是,通过将带有 TLSC 的 SE 扩展到最先进的模型,MPRNet 在 GoPro 数据集上的 PSNR 提高了 0.65 dB,达到了 33.31 dB,超过了之前的最佳结果 0.6 dB。此外,我们简单地将 TLSC 应用于高级视觉任务,即语义分割,并取得了有竞争力的结果。进行了大量的数量和质量实验,以证明 TLSC 解决了边际成本问题,同时获得了显着收益。

旷视提出TLSC:重新审视全局统计聚合以改进图像恢复

训练和测试的统计分布:

应用场景:

1、Extending TLC to SE Block

2、Extending TLC to IN

3、Extending to transposed self-attention

NTIRE冠军方案 | NAFSSR

论文:https://arxiv.org/pdf/2204.08714v2.pdf

代码:https://github.com/megvii-research/NAFNet

近日,New Trends in Image Restoration and Enhancement (以下简称:NTIRE) 比赛结果揭晓,旷视研究院荣获双目图像超分辨率赛道的冠军。NTIRE 即“图像恢复与增强的新趋势”,是近年来计算机图像恢复领域最具影响力的一场全球性赛事,由苏黎世联邦理工学院计算机视觉实验室(Computer Vision Laboratory, ETH Zurich)主办,每年都会吸引大量的关注者和参赛者。

双目图像超分辨率挑战赛 (Stereo Image Super-Resolution Challenge)作为 NTIRE 研讨会的一部分与 CVPR 2022 一起举办,本次大赛的目的是从低分辨率(LR)双目图像重建高分辨率(HR)双目图像。

赛题简介

图像恢复(Image Restoration) 任务,旨在将降质的图像(如带噪声的,模糊的,低分辨率的…)恢复成清晰的图像。而本次的赛题,双目超分辨率任务,目标是用低分辨率的一对左右视角的立体图像来重建高分辨率的立体图像。与单张图像的超分辨率任务不同,双目超分辨率可以利用场景的左右两个视角提供的互补信息,从而提升图像恢复质量。

旷视夺冠算法介绍

对于双目超分辨率任务,最直接的想法是将左右视角的两张图片独立的恢复成清晰图像,互不影响。而我们的工作,Nonlinear Activation Free Network for Image Restoration [2] (以下简称:NAFNet)在单张图像恢复领域提供了一个简单且强有力的基线。其效果如下图所示:

0ec55234-029b-42ff-b2f4-86d6a3d69186.gif

图1. NAFNet 的降噪/去模糊效果
受此启发,我们直接利用 NAFNet 进行单张图像的超分辨率重建。虽然已经能取得不错的性能,但是这样的做法忽略了双目任务的特殊性:没有充分利用两个视角提供的互补信息。为此,我们在使用 NAFNet 分别提取左右两个视角的单图像特征之外,引入了立体交叉注意力模块(Stereo Cross Attention Module, 以下简称: SCAM)来融合左右视角的图像特征。我们称该方法为 NAFSSR: Stereo Image Super-Resolution Using NAFNet (以下简称:NAFSSR),其总体结构如下图所示:

image.png
图2. NAFSSR 总体结构
其中 NAFBlock 直接采用了 NAFNet 的模块,而 SCAM 细节如下图所示:

image.png

图3. SCAM

它用于融合 NAFNet 提取到的左右视图特征。

在模型设计之外,我们发现训练/测试时的统计值分布不一致问题(对于该问题,可以参考我们的另外一项工作,TLSC [3])在双目超分辨率任务中依然存在,会降低图像恢复的质量,所以我们采用了 TLSC 以缓解该不一致问题。

结合模型设计与训练/测试时的策略,我们在 Flicker1024 测试集上的性能如下图所示:

image.png
图4. NAFSSR 的在客观指标上和现有先进方法的对比
可视化结果如下图所示:
image.png

更多可视化结果,方法细节,可以参考我们的论文:

[1] NAFSSR: Stereo Image Super-Resolution Using NAFNet

[2] Simple Baselines for Image Restoration

[3] Revisiting Global Statistics Aggregation for Improving Image Restoration

来源:旷视研究院
作者:旷视研究院

SwinIR:图像恢复

cvpr2021: https://arxiv.org/abs/2108.10257

代码:https://github.com/JingyunLiang/SwinIR

本文提出了一个基于Swin Transformer的用于图像恢复的强基线模型SwinIR,在图像超分辨率、去噪等任务上表现SOTA!

图像恢复是一个长期存在的低级视觉问题,旨在从低质量图像(例如,缩小、噪声和压缩图像)中恢复高质量图像.虽然最先进的图像恢复方法基于卷积神经网络,但很少有人尝试使用 Transformer,它们在high-level视觉任务中表现出令人印象深刻的性能。

在本文中,我们提出了一种基于 Swin Transformer 的强大基线模型 SwinIR 用于图像恢复。SwinIR由浅层特征提取、深层特征提取和高质量图像重建三部分组成。特别是,深度特征提取模块由几个残差 Swin Transformer 块 (RSTB) 组成,每个残差块都有几个 Swin Transformer 层和一个残差连接。我们对三个具有代表性的任务进行了实验:图像超分辨率(包括经典、轻量级和真实世界的图像超分辨率)、图像去噪(包括灰度和彩色图像去噪)和 JPEG 压缩伪影减少。实验结果表明,SwinIR 在不同任务上的表现优于最先进的方法高达 0.14 ∼ 0.45dB, 而参数的总数可以减少高达 67%.

网络结构:(感觉其实没啥创新点,就是用了swin block + 残差结构,但效果却挺好)

Shallow and deep feature extraction:3 ×3 convolutional layer

HQ Image Reconstruction:sub-pixel convolution layer or single
convolution layer

消融Ablation Study

实验结果

实验结果表明,SwinIR 在不同任务上的性能优于最先进的方法高达 0.14∼0.45dB,而参数总数最多可减少 67%。

作者多了很多实验:

SR:Classical image SR Lightweight image SR 和Real-world image SR


JPEG compression artifact reduction

Image Denoising

结果:

最新综述丨视频超分辨率研究方法

摘自:极市平台,作者@ Wangsy

https://zhuanlan.zhihu.com/p/342225916

本文是第一个也是唯一一个视频超分方向的综述,回顾了基于深度学习的视频超分技术的研究进展,提出了一种基于深度学习的视频超分分类方法,并总结了SOTA方法在一些公共基准数据集上的性能。

论文地址:https://arxiv.org/abs/2007.12928

看点

近年来,深度学习在很多领域取得了进展,其中包括视频超分辨率任务。本文是第一个也是唯一一个视频超分方向的综述,主要看点如下:

1)回顾了基于深度学习的视频超分技术的研究进展;
2)提出了一种基于深度学习的视频超分分类方法,利用不同处理帧间信息的方式进行分类;
3)总结了SOTA方法在一些公共基准数据集上的性能;
4)分析了视频超分任务的一些前景和挑战;

分类

多篇研究表明,帧间信息的利用对视频超分的性能有很大影响。正确、充分地利用这些信息可以提高超分的最终结果。因此,根据帧间信息的利用方式——是否对齐,将现有方法分为两大类:对齐方法和非对齐方法,如下图所示:

总结

到目前为止,已经有了许多的视频超分算法。下图总结了近年来基于深度学习的视频超分方法的特点。其中MEMC表示运动估计和补偿方法,DC表示可变形卷积方法,3D Conv表示3D卷积方法,RCNN表示循环卷积神经网络方法。

趋势和挑战

尽管基于深度学习的视频超分方法已经取得了很大的进展,但是仍然存在一些挑战。

轻量级超分模型

基于深度学习的视频超分辨率方法虽然具有很高的性能,但由于模型参数庞大,需要大量的计算和存储资源,训练时间长,在实际问题中难以有效部署。随着移动设备在现代生活中的流行,人们期望将模型应用到这些设备上。如何设计和实现一种高性能、轻量级的超分算法,以满足实际应用的需要是一个挑战。

模型的可解释性

深度神经网络通常被认为是黑箱。也就是说,不管模型表现如何,我们也无法知道模型学到了什么真正的信息。在现有的视频超分模型中,卷积神经网络如何恢复低分辨率视频序列还没有一个理论解释。随着对其解释的深入研究,包括视频和图像超分方法在内的超分算法的性能可能会有很大的提高。

大尺度超分辨率

对于视频超分任务,现有的工作主要集中在放大倍数为4的情况下。更具挑战性的尺度(如×8、×16)很少被探索。随着高分辨率(如4K、8K)显示设备的普及,大尺度的超分有待进一步研究。显然,随着尺度的增大,视频序列中未知信息的预测和恢复会变得越来越困难。这可能导致算法的性能下降,削弱模型的鲁棒性。因此,如何开发稳定的深度学习算法来实现更大规模的视频超分辨率仍然是一个重要的问题。

更合理、更恰当的视频降质过程

在现有的研究中,LR视频的退化通常由两种方法得到。一种是使用插值(如双三次插值)直接对HR视频进行下采样。另一种是对HR视频进行高斯模糊,然后对视频序列进行降采样。虽然这两种方法在理论上都有很好的表现,但在实践中却总是表现不佳。真实世界的退化过程是非常复杂的,并且在真实世界的问题中包含了大量的不确定性,模糊和插值对问题的建模是不够的。因此,在构建LR视频时,应该从理论上建立与实际情况相一致的退化模型,以缩小研究与实践之间的差距。 大多数最先进的视频超分辨率方法都是有监督学习。由于降质过程是复杂的和HR/LR对获取是比较难获取的。或许无监督的超分方法可能会称为解决这个问题的一个方法。

更有效的场景变换算法

现有的视频超分方法很少涉及场景变化的视频。实际上,一个视频序列通常有许多不同的场景。在研究这类视频的超分问题时,必须在不改变场景的情况下将其分割成多个片段,并分别进行处理。这可能会导致大量的计算和计算时长。因此,能够处理场景变化的深度学习方法对于实际应用是必要的。

更合理的视频质量评价标准

评价超分辨率结果质量的标准主要有PSNR和SSIM。然而,它们的值并不能反映视频质量对人的感知。也就是说,即使视频的PSNR值很高,视频对人类来说也不一定是舒服的。因此,需要开发出符合人类感知的新的视频评价标准。虽然提出了一些评价标准,但仍需要更多能被广泛接受的标准。

利用帧间信息的更有效方法

视频超分的一个重要特征是利用帧间信息。它的有效利用直接影响着模型的性能。尽管本文提出了许多方法,但仍存在一些不足。例如,三维卷积和非局部模运算量大,光流估计的精度无法保证等。因此,有效利用帧间信息的方法值得进一步研究。

BasicVSR|视频超分算法

视频超分====”钞“能力,没几张显卡真玩不了。

paper: https://arxiv.org/abs/2012.0218

该文是南洋理工&腾讯PCG、CUHK-SenseTime联合实验室、中科院深圳先进技术研究院2020年提出的一种视频超分方案BasicVSR。在多个数据集上、在两种退化方式上,所提BasicVSR与IconVSR均超越已有视频超分方案,特别的,在UDM10数据集上取得了高达0.68dB的性能提升。

Video Super-Resolution on MSU Video Super Resolution Benchmark:

截至2022,该方法仍是sota方法。

正如作者所说,BasicVSR及其扩展IconVSR可以作为未来VSR方法的强大基线!!!

Abstract

​ 由于需要利用额外的时序信息,视频超分往往比图像超分包含更多的模块,这就导致了各式各样的复杂结构。

​ 该文作者对视频超分进行了梳理并重新审查了视频超分的四个基本模块:PropagationAlignmentAggregation以及Upsampling。通过复用现有方案的模块并添加微小改动,作者提出了一种简单方案:BasicVSR,它在推理速度、复原质量方面取得了引人注目的提升。

​ 作者对BasicVSR进行了系统的分析,解释了性能提升的原因所在,同时也讨论了其局限性。在BasicVSR的基础上,作者进一步提出了“信息寄存(information-refile)”与“耦合传播(coupled propagation)”两种机制促进信息集成。所提BasicVSR及其改进IconVSR将视频超分的性能进行了更进一步的提升,可以作为视频超分领域的一个更强的基准。

Introduction

​ 作者对现有各式各样的VSR方案按照各个模块的功能(propagation, alignment, aggregation, upsampling)进行了拆分,相关总结见下表。

  • Propagation:在这里特指信息的流动,比如局部信息,单向信息流动,双向信息流动;
  • Alignment:在这里特指对齐的类型以及有无;
  • Aggregation:在这里指的是对齐特征的集成方式;
  • Upsampling:在这里指的是上采样过程所采用的方案,基本都是Pixel-Shuffle。

​ 在上述四个功能单元中,Propagation和Alignment对性能和效率影响最大。双线传播有助于最大化的进行信息汇集,光流方案有助于进行相邻帧特征对齐。通过简单的上述模块组合所得的BasicVSR即取得了超越SOTA的指标与速度(指标提升0.61dB,推理速度快了24倍)。

什么是光流法?光流是一种用于描述图像运动的技术。它通常应用于它们之间具有小时间步长的一系列图像,例如视频帧。光流计算图像中点的速度,并估计点可能在下一个图像序列中的位置。

光流是由物体或照相机的运动引起的两个连续帧之间图像物体的视运动的模式。它是2D向量场,其中每个向量都是位移向量,表示点从第一帧到第二帧的运动。考虑下面的图片,它显示了一个球连续5帧运动。箭头显示其位移向量。光流在以下领域具有许多应用: – 运动的结构 – 视频压缩 – 视频稳定…光流基于以下几个假设进行工作: 1. 在连续的帧之间,对象的像素强度不变。 2. 相邻像素具有相似的运动。

光流

​ 在BasicVSR的基础上,作者提出了如下两种新颖的扩展得到了IconVSR。

  • 信息寄存,它采用了额外的模块提取从稀疏选择帧(比如关键帧)中提取特征,然后插入到主网络用于特征改善。
  • 耦合传播,它促进了前向与反向传播分支中的信息交换。

​ 这两个模块不仅可以降低误差累积问题,同时可以获取更完整的时序信息以生成更高质量的特征,进而得到更好的重建结果。得益于上述两种设计,IconVSR以0.31dB指标提升超过了BasicVSR。

Method

 上图给出了BasicVSR的架构示意图。在这里我们先对BasicVSR转给你所涉及到的几个功能性模块进行一些简单的介绍。

Propagation

Propagation 是VSR中最具影响力的模块,它特指信息的利用方式。现有的传播机制可以分为一下三大类:

  • Local Propagation: 滑动窗口的方法(比如RBPN,TGA,EDVR)采用局部窗口内的多帧LR图像作为输入并进行中间帧的重建。这种设计方式约束了信息范围,进而影响了模型的性能。下图给出了不同信息范围下的模型性能对比,可以看到:(1)全局信息的利用具有更佳性能;(2) 片段的两端性能差异非常大,说明了长序列累积信息(即全局信息)的重要性。

Unidirectional: 已有单向传播方案(比如RLSP、RSDN、RRN、FRVSR)采用了从第一帧到最后一帧的单向传播的方式,这种方式导致了不同帧接受的信息是不平衡的,比如第一帧只会从自身接受信息,而最后一帧则可以接受整个序列的信息。下图给出了单向传播与双向传播的性能差异对比。可以看到:(1)在早期,单向传播方案的PSNR指标严重低于双向传播方案;(2)整体来看,单向传播方案的指标要比双向传播的方案低0.5dB。

Bidirectional:上述两种信息传播方案的弊端可以通过双向传播方案解决。BasicVSR采用了经典的双向传播机制,给定输入图像及其近邻帧,相应的特征传播分别描述为和

Alignment

​ 空间对齐在VSR中起着非常重要的作用,它负责将高度相关的的图像/特征进行对齐并送入到后续的集成模块。主流VSR方案可以分别以下三大类:

  • Without Alignment: 现有的递归方案(比如RLSP、BRCN、RSDN、RRN)通常不进行对齐,非对齐的特征直接进行集成导致了次优的性能。作者在实验中发现:不添加对齐会导致1.19dB的指标下降,也就是说对齐是非常有必要
  • Image Alignment:早期的TOFlow采用光流在图像层面进行对齐,已有研究表明:相比图像层面对齐,特征层面的对齐可以取得显著的性能提升
  • Feature Alignment: 作者采用了类似TOFlow的光流方案,并用于特征对齐,对齐后的特征融入到后的残差模块中。这里采用的特征对齐可以描述如下:

Aggregation and Upsampling

​ BasicVSR采用了非常基本的模块(残差模块以及PixelShuffle)用于特征集成与上采样,假设中间特征表示,这里的特征集成与上采样模块描述如下:

​ 总而言之,BasicVSR采用了双向传播机制、特征层面的光流对齐、concate进行特征集成,pixelshuffle进行上采样。

IconVSR

​ 以BasicVSR作为骨干,作者引入了两种新颖的单元以消除传播过程中的误差累积促进时序信息集成。

  • Information-Refil: 不精确的对齐会导致误差累积问题,尤其是该文所采用的长期传播方案。为消除上述问题,作者提出了信息寄存机制,见下图。

​ 它采用了额外的特征提取器提取关键帧与近邻帧的特征,所提取的特征将于对齐特征通过卷积进行融合。

Coupled Propagation: 在双向传播中,特征经由相反的方向进行独立处理。作者对此添加了耦合传播机制,使得两者产生关联

Experiments

​ 训练数据:REDS和Vimeo90K;测试数据:REDS4、REDSval4、Vid4、UDM10、Vimeo90K-T。数据退化方式BI和BD。

​ SpyNet用于光流估计,EDVR-M用于特征提取,Adam优化器,Cosine学习率机制,特征提取与光流部分的学习率为,其他部分的学习率为。总计训练300K,特征提取与光流的权值在前5000次冻结。Batch=8,LR的大小为,Cb损失。

​ 下表给出了所提方案与其他视频超分方案在不同退化方式、不同测试集上的指标、推理速度以及参数量的对比。

​ 从上表可以看到:

  • BasicVSR以全面优势超过了现有视频超分方案,在UDM10数据集上,以0.61dB超过了RSDN且具有相当的参数量、更快的速度;
  • IconVSR可以进一步提升BasicVSR的指标高达0.31dB

Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network

论文标题:Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network

github: https://github.com/leftthomas/ESPCN

2016年的文章。在此之前使用CNN进行SR的方法都是将LR图像先用一个single filter(通常是bicubic)upscale至HR的尺寸,再进行reconstruction的。所有SR的操作都再HR空间进行。  而本文提出在LR空间进行特征提取。并引入sub-pixel convolution layer用于学习一组upscaling filter,用这些针对特征图训练得到的更复杂的filter代替手工bicubic filter。可以降低计算成本,实现实时SR。直接将LR图像输入一个l层的CNN中,之后通过一层sub-pixel卷积层upscaleLR特征图生成对应的HR图像。

这篇论文提出了一种亚像素卷积的方法来对图像进行超分辨率重建,速度特别快。虽然论文里面称提出的方法为亚像素卷积(sub-pixel convolution),但是实际上并不涉及到卷积运算,是一种高效、快速、无参的像素重排列的上采样方式。由于很快,直接用在视频超分中也可以做到实时。其在Tensorflow中的实现称为depthtospace ,在Pytorch中的实现为PixelShuffle

这种上采样的方式很多时候都成为了上采样的首选,经常用在图像重建领域,如后续有在降噪领域中的FFDNet

论文的主要创新点为:

1. 只在模型末端进行上采样,可以使得在低分辨率空间保留更多的纹理区域,在视频超分中也可以做到实时。
2.模块末端直接使用亚像素卷积的方式来进行上采样,相比于显示的将LR插值到HR,这种上采样方式可以学习到更好、更为复杂的方式,可以获得更好的重建效果。

可以看到,相比于其他的一些超分算法,这里实际上只改动了最后的上采样方式。在模型倒数第二层学习对应的通道数( r2c )的卷积,其中c为最终的通道数,如输出是RGB图,则c为3,如输出是灰度图或者Y通道的图,则c为1;r为需要进行的上采样倍数,为正整数倍,不同的上采样倍数只需要调整这一层卷积的通道数即可。

由于带计算的操作都是在低分辨率空间中进行的,所以速度相对会快很多。

这里给出的示例为r=3,c=1,即单通道图的3倍上采样图。结合超像素的思想来看,以第一张特征图进行的3×3宫格的像素重排列,行优先地按顺序将不同深度的特征依次重排列到宫格上。

这里给出的示例图是简单场景,像素重排列的方式为:

从公式可以看出,对于多通道的图,以通道数作为一个整体,即将特征图通道数中连续的c个通道作为一个整体,再然后进行像素重排列,得到多通道的上采样图。

论文的核心创新点就在于这里的像素重排列的方式。

整体的效果上来说,也是非常的惊人。从模型的角度上而言,其主干模型可以采样其他SOTA的主干结构。由于上采样的差异,可以学习到更好、更复杂的上采样方式,所以最终的重建效果是要稍好于SOTA的模型的。并且由于上采样特别高效,速度非常的快。从PSNR的角度来看,ESPCN比TNRD(TNRD发表于TPAMI2015,是DnCNN的前身)稍好,但是速度却相差一个数量级左右。

结论

这篇论文提出了一种亚像素卷积层,在低分辨率空间中可以学习到更好、更复杂的上采样方式,对于不同的重建倍数,只需要对应地更改低分辨率空间中的卷积通道数,非常灵活。其最终的重建PSNR效果也是SOTA,速度上具有很巨大的优势,视频超分也能做到实时。这种上采样方式也广泛地应用于其他的重建领域中。