(SRNTT)Image Super-Resolution by Neural Texture Transfer

总结一波:

与TTSR有很多相似之处,SRNTT可以看成是TTSR的前身,其中除了网络设计不同外,损失函数SRNTT比TTSR多了一个纹理损失(与以往的工作不同,我们添加了纹理损失来考虑文纹理上的一致性)。

思考:是否可以用Charbonnier Loss来替换重建损失?


1. 简介

本文是Adobe发表在CVPR2019的基于参考图像的图像超分辨率重建论文,本文借鉴图像风格化 (image stylization)中神经纹理迁移(Neural Texture Transfer)思想,利用参考图像中的纹理,弥补低分辨率图像的细节信息。本文方法主要包括两步:1)特征空间的纹理匹配,2)移匹配的纹理。另外,本文提出一个CUFFED5数据集,这个数据集包含不同像素级别的参考图像。

SRNTT主要有以下几个贡献:

  1. 放松了现有的RefSR方法的约束问题,不要求参考图像与模糊图像严格对齐
  2. 提高了现有RefSR方法的鲁棒性,即使使用相似性不是很高的参考图像也可以得到较好的结果
  3. 构建了一个基准数据集CUFED5

2. 动机

对于传统的SISR问题,虽然使用感知相关的约束,比如感知损失(perceptual loss)和对抗损失(adversarial loss)能提升图像质量,使图像看起来更清晰,但是会生假的纹理(hallucinate fake textures)和人工的特征(artifacts)。也就是说,使用感知损失常常得不到真实的纹理细节信息

基于参考(reference-based)的方法, 即RefSR,通过利用高分辨率(HR)参考图像的丰富纹理来补偿低分辨率(LR)图像丢失的细节。但是之前的方法需要参考图像与LR包含相似的内容,并且需要图像对齐,否则的话,这些方法效果会很差。RefSR理想上应该可以有效利用参考图像,如果参考图像与LR不同,也不应该损害LR的复原效果,即RefSR应不差于SISR。

为了解决传统RefSR的缺点,本文不需要图像对齐,而是通过在特征空间上匹配的方法,将语义相关的特征进行迁移·

3. 方法

SRNTT整体框架,主要包含局部纹理特征匹配(交换)和纹理迁移两部分:

 SRNTT主要由两个部分组成,一是上图中蓝色方框之外的部分,称之为特征交换;另一部分为蓝色方框内部的纹理迁移部分。

为什么SRNTT可以做到不用对齐也不需要相似度太高就能将参考图像的纹理信息传送给SR图呢?其特点就在于特征交换和纹理转换这两部分都是在特征空间进行的,不是在原图上进行的。

3.1. Feature swaping(特征匹配/交换)

 特征交换就是将低分辨率图像的众多特征与参考图像的众多特征进行匹配,然后提取出能够使用的合理的特征图,然后通过纹理转换部分将提取出的特征图与低分辨率的特征图合并,最终得到SR图像。
特征交换流程如下:

将模糊图像的上采样图像、参考图像、参考图像的下上采样图像,三张图像分别送入VGG19网络,并取出VGG的Relu1_1、Relu2_1、Relu3_1这三层输出的特征图。
对模糊图像的上采样图像和参考图像的下上采样图像的特征图,SRNTT会使用下面的公式1计算这两个特征图之间的相似性。

特征的匹配是在 I^{L R \uparrow} 和 I^{R e f} \& I^{R e f \uparrow \downarrow} 的特征空间中进行的,因为LR图像比较模糊,所以将参考图像进行下采用&上采样的模糊化。

如何计算两个局部特征纹理相似性呢?对于两个特征patch,使用内积计算相似性。

swap
swap

 该公式1计算了正则化后的参考图像的下上采样图像(\operatorname{Ref} \downarrow \uparrow)的特征图模糊图像(\operatorname{LR} \uparrow)的上采样图像的特征图的内积,并把结果定义为了两张特征图的相似性。但这种一张一张计算的方式很费时间,所以采用了下面这个公式2:

上式,计算了LR的 i-th patch和模糊化参考图像 的 j-th patch的相似性。注意,对参考patch进行了归一化。可以通过卷积或者互相关(correlation operation)来加速以上计算过程:

快速swap

得到了每张 LR 与 Ref 特征图之间的相似性之后,对每张模糊图像的上采样图像的特征图(\operatorname{LR} \uparrow,我们将与它最相似的特征图\operatorname{Ref} \downarrow \uparrow)所对应的那个参考图像(\operatorname{Ref})的特征图一起拿出来组成M,也就是下面这个公式的操作(注意I^{\operatorname{Ref} \downarrow \uparrow} 和 I^{\operatorname{Ref} } 是有区别的)


S_{j}  即表示 s-th patch 相对 LR的相似性。相当于一个卷积核对LR进行卷积,计算结果即为 Similarity map。因为在LR和Ref的特征空间中密集采样,所以每个LR位置都对应多个不同的卷积核的卷积结果,对应多个不同相似性的纹理特征。基于Similarity map,选择LR每个位置的相似性最高的Ref patch,构成交换特征图M (swapped feature map):

match

 即M是在(x,y)位置对应的Ref patch是similairty score最大的Ref patch。由于每一个位置对应一个Ref patch,所以这些patch是重叠的,在重叠位置取平均。另外,注意计算相似性是使用 I^{R e f \uparrow \downarrow} ,纹理迁移则是利用I^{R e f } 

备注:在实现上,利用VGG-19提取特征,relu1_1, relu2_1,relu3_1用于多个尺度上纹理编码,但是为了加快匹配,只在relu3_1层进行匹配,将匹配结果对应到relu1_1和relu2_1


3.2. Texture Transfer(纹理迁移)

  1. 原始模糊图像首先会和特征交换模块得到的 M 进行特征合并得到合并后的特征图(通过逐通道concatenation),
  2. 合并后的特征图会经过一个残差模块,
  3. 经过残差模块的特征图再与原始模糊图像相加
  4. 然后再通过(2× upscaling with sub-pixel convolution)被放大2倍,

这个步骤会进行3次,只不过最后一次不会放大2倍,而是直接输出的超分辨率图像。

 

 特征合并后经过残差模块并放大:

 

最后一次不放大得到输出结果:


3.3. 损失函数

1、Reconstruction loss: SR与HR的L1距离,用于维持结构的相似性

在这里插入图片描述


2、Perceptual loss:提升SR的视觉质量, 采用VGG-19的relu5_1层

在这里插入图片描述

 
3、Adversarial loss:提升SR的视觉质量,利用 WGAN-GP

在这里插入图片描述

4、Texture loss:用于保证充分利用Ref纹理的真实性,以防生成虚假纹理,纹理损失是为了让SR的纹理与Ref纹理更接近,另外,通过使用similarity map作为权重,抑制不相似纹理的惩罚,放大相似纹理的惩罚,这样可以自适应地进行纹理迁移

其中G_{r}为计算Gram矩阵,lambda是对应层l的特征尺寸的归一化因子,S*l 是包含每一个LR块对应的最高的Ref块的相似度。该loss使得与ILR不同的纹理将具有较低的权重,因此在纹理转移中受到较低的惩罚


特征交换的实现:

首先是第一步的匹配:

输入:

  1. map_in : VGG output of I^{LR↑},
  2. map_ref_blur : VGG output of I^{Ref↓↑}
  3. is_weight : whethere weights is output.权重是否输出
 
 
    def match(self,
              map_in: OrderedDict,
              map_ref_blur: OrderedDict,
              is_weight: bool = True) -> tuple:

返回: 

  1. max_idx : The indices of the most similar patches.   最相似的patch的索引
  2. max_val : The pixel value within max_idx.                最相似patch内的像素值
 
 

2019-06-15 CVPR2019 论文解读 Image Super-Resolution by Neural Texture Transfer - 简书

 [论文笔记] Image Super-Resolution by Neural Texture Transfer (CVPR2019)_Deephome的博客-CSDN博客_feature texture transfer

猜你喜欢

转载自blog.csdn.net/weixin_43135178/article/details/123278940