中心提取:

1、该模型中提取Q、K、V的过程值得学习一下,他们使用的是:V自然就是参考图(Ref),用于辅助得到更好的纹理结果,Q是LR上采样图的特征(LR↑),K是参考图先下采样再上采样的特征(Ref↓↑),是否我们做特征提取过程可以借鉴这个设计?

2、使用跨层级特征融合(Cross-Scale Feature Integration )进行信息融合,与skip-connection类似是为了更多信息进行fuse

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

代码链接:https://github.com/researchmm/TTSR


万物皆可 Transformer:基于纹理 Transformer 模型的图像超分辨率技术

Transformer

在Transformer最初提出时,作者采用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算限制为是顺序的,这一点一方面会限制模型的并行能力,因为变量t要等待t-1的结果才能开始计算,另一点是顺序计算的过程中信息会丢失,尤其是跨度比较大的情况大。

相对于RNN(或者LSTM,GRU等),Transformer的提出就解决了这两个问题:

(1)Attention机制将序列中的任意两个位置之间的距离是缩小为一个常量【减少信息丢失】(顺序计算的过程中信息会丢失,尤其是跨度比较大的情况大
(2)它没有像RNN这样的顺序性,方便做并行处理上的优化。而这种“顺序无关性”的模型也跟图像这种数据类型比较匹配。

针对于图像超分辨率问题,微软亚洲研究院创新性地提出了一种基于纹理 Transformer 模型的图像超分辩率方法(TTSR),取得了显著的效果。该模型可以有效地搜索与迁移高清的纹理信息,最大程度地利用了参考图像的信息,并正确地将高清纹理迁移到生成的超分辨率结果当中,解决纹理模糊和纹理失真的问题。(引起思考?是否可以使用TTSR的特性(从高清纹理迁移到低分辨率上图像),将TTSR应用于image inpainting


LR:输入的低分辨率图像

Ref:参考图像,用于纹理迁移

HR:从Ref来的feature,是为了让硬注意力模块和软注意力模块利用从而transfer和fuse到LR的

T:经过转换后的HR纹理特征

SR:超分辨率图,即最后的生成结果

纹理 Transformer 模型

如图1所示,微软亚洲研究院提出的纹理 Transformer 模型包括:可学习的纹理提取器模块(Learnable Texture Extractor)、相关性嵌入模块(Relevance Embedding)、硬注意力模块(Hard Attention)、软注意力模块(Soft Attention)。以下分别针对上述四个模块展开介绍。

图1:本文提出的纹理 Transformer 模型

如图1所示,与传统的 Transformer 一样,本文提出的纹理 Transformer 同样具有 Q、K、V 要素。

  • 其中 Q 为 Query,代表从低分辨率提取出的纹理特征信息,用来进行纹理搜索
  • K 为 Key,代表高分辨率参考图像经过先下采样再上采样得到的与低分辨率图像分布一致的图像的纹理信息,用来进行纹理搜索
  • V为 Value,代表原参考图像的纹理信息,用来进行纹理迁移

对于 Q 和 K,本文提出了一个相关性嵌入模块来建立低分辨率输入图像和参考图像之间的关系。

相关性嵌入模块会输出一个硬注意力图和一个软注意力图。其中,硬注意力图记录了对 Q 中的每一个特征块,K 中对应的最相关的特征块的位置软注意力图记录了这个最相关的特征块的具体相关性,即内积大小。这两个图分别会应用到硬注意力模块和软注意力模块中。


1.可学习的纹理提取器:

目前主流方法存在的问题:对于纹理信息的提取,目前主流的方法是将图像输入到预训练好的 VGG 网络中,提取中间的一些浅层特征作为图像的纹理信息。然而,这种方式有明显的缺陷。首先,VGG 网络的训练目标是以语义为导向的图像类别标签,其高层级的语义信息与我们所需要的低层级的纹理信息有着很大的差异。因此,以 VGG 模型中间层的特征作为纹理特征是值得商榷的。其次,对于不同的任务,所需要提取的纹理信息是有差别的,使用预训练好并且固定权重的 VGG 网络是缺乏灵活性的

对此,我们在纹理 Transformer 中提出了一种可学习的纹理提取器。该纹理提取器是一个浅层的卷积神经网络,随着 Transformer 的训练,该提取器也在训练过程中不断更新自己的参数该设计使得我们的纹理特征提取器能够提取到最适合图像生成任务的纹理信息,为后面的纹理搜索与迁移提供了很好的基础,进而更加有利于高质量结果的生成

特征提取器比较普通,就是对三类图提取特征作为transformer的Q、K、V。这里要说一下QKV的说法是来源于信息检索系统,分别代表查询Query、键Key、值Val。

在超分这里,V自然就是参考图(Ref),用于辅助得到更好的纹理结果,Q是LR上采样图的特征(LR↑),K是参考图先下采样再上采样的特征(Ref↓↑),为啥先下采样再上采样?因为K起的作用就是建立参考图和LR图的关联关系,评估哪些地方像,相似的地方借鉴Ref的纹理。K先下采样再上采样的目的就是:让这个结果和LR在同一个domain中(因为LR↑就可看作GT(Ground Truth)先下采样再上采样得到的),两个在同domain的特征衡量相似度自然要更准确

备注:这个TTSR使用的“可学习的纹理提取器”与transformer通常使用的提取QKV的过程是不同的,TTSR是使用的VGG19的第1,(2.3),(4.5)层分别作为QKV的特征提取器,


2.相关性嵌入模块:【来建立低分辨率输入图像和参考图像之间的关系

评估K(Ref↓↑)与Q(LR↑)间关联关系的任务是由Relevance Embedding完成的。这里要注意,对于一张图,通过特征提取器后首先分若干patch,然后每个patch展成一条向量(模仿词向量?),即shape变成类似

的样子。然后Q、K中的任意两个patch向量就可以用余弦相似度表示。

具体的,该模块将 Q 和 K 分别像卷积计算一样提取出特征块patches,(We unfold both Q and K into patches他们将Q与K转为patches的过程是使用“unfold函数”

# To reduce the consumption of both time and GPU memory, the relevance embedding is only applied to the smallest scale and further propagated to other scales.
# We “unfold” both Q and K into patches
lrsr_lv3_unfold  = F.unfold(lrsr_lv3, kernel_size=(3, 3), padding=1)  # qi
refsr_lv3_unfold = F.unfold(refsr_lv3, kernel_size=(3, 3), padding=1) # kj
refsr_lv3_unfold = refsr_lv3_unfold.permute(0, 2, 1)

然后以内积的方式计算 Q 和 K 中的特征块两两之间的相关性。内积越大的地方代表两个特征块之间的相关性越强,可迁移的高频纹理信息越多。反之,内积越小的地方代表两个特征块之间的相关性越弱,可迁移的高频纹理信息越少。【使用F.normalize()表示的是qi/||qi||,使用“torch.bmn()”张量的相乘运算来计算相关性,总的来说他们的相关性计算是通过归一化内积计算得到的

# Then for each patch qi in Q and kj in K, we calculate the relevance(相关性) ri,j between these two patches by "normalized inner product(通过归一化内积计算)":
refsr_lv3_unfold = F.normalize(refsr_lv3_unfold, dim=2) # [N, Hr*Wr, C*k*k]
lrsr_lv3_unfold  = F.normalize(lrsr_lv3_unfold, dim=1)  # [N, C*k*k, H*W]
R_lv3 = torch.bmm(refsr_lv3_unfold, lrsr_lv3_unfold)    #[N, Hr*Wr, H*W]  三维张量进行相乘 ri,j:we calculate the relevance between Ref and LR
# The relevance(R_lv3) is further used to obtain the hard-attention map and the soft-attention map.

相关性嵌入模块会输出一个硬注意力图和一个软注意力图。
其中,硬注意力图记录了对 Q 中的每一个特征块,K 中对应的最相关的特征块的位置
软注意力图记录了这个最相关的特征块的具体相关性,即内积大小
这两个图分别会应用到硬注意力模块和软注意力模块中。

这里要注意区分(硬注意力图,软注意力图)、(硬注意力模块,软注意力模块),如下图所示:


3.硬注意力模块:

在硬注意力模块中,我们利用硬注意力图中所记录的位置,从 V 中迁移对应位置的特征块,进而组合成一个迁移纹理特征图 T。T 的每个位置包含了参考图像中最相似的位置的高频纹理特征。T 随后会与骨干网络中的特征进行通道级联,并通过一个卷积层得到融合的特征。


4.软注意力模块:

在软注意力模块中,上述融合的特征会与软注意力图进行对应位置的点乘。基于这样的设计,相关性强的纹理信息能够赋予相对更大的权重;相关性弱的纹理信息,能够因小权重得到抑制因此,软注意力模块能够使得迁移过来的高频纹理特征得到更准确的利用


硬注意力模块+软注意力模块

接下来就要用这个r(relevance)来做attention了。

前面说ri,j表示qi patch与kj patch的相似度,Hard Attention其实就是根据这个相似度,对于一个LR patch qi找到与其最相似的参考patch ti,如下式:

这里hi就是个hard index,所以叫hard attention。

与之对应的,soft-attention就是对T进行加权,仍然是与LR越像权重越大,而这个权重也是简单地来源于r,其实就是Q和K对应位置那个相似度:

如下式,S是最终应用到了F、T concat再卷积的结果上,其中F是LR图经DNN提取的Feature,T是hard attention生成的初步高分辨率texture图,Fout是预测的超分结果。

从上面的公式就可以看出这个soft和hard的用法是完全不一样的,soft的作用是提供了一个权重,具体来说我们来理解一下上述的F/T/S分别的意义:

  • F:lr的特征图,其实是提供了一个edge的信息和粗糙的纹理,可以想象成孩子的涂色本的轮廓;
  • T:上一步经过hard attention得到的feature map,具有了一定细致纹理,可以看成孩子先大致根据自己的想象力简单的涂色;
  • S:ref和lr的feature map级的相似度结果,具体来说找到每个位置与之对应的最大相似度,我的感觉是这样,越大说明ref参考价值越大,所以作为一个权重乘起来

跨层级特征融合(Cross-Scale Feature Integration

由代码可知:其实就是从VGG19三个不同的层中取出的V,然后经过一系列的公式变成的三层T,然后这三个T与S进行公式(8),每一层生成不同层级的图像,然后再经过上下采样..操作将他们连接起来。感觉有点类似于transformer的多头的意思...

传统 Transformer 通过堆叠使得模型具有更强的表达能力,然而在图像生成问题中,简单的堆叠很难产生很好的效果。因此,本文为了进一步提升模型对参考图像信息的提取和利用,有针对性地提出了跨层级的特征融合机制。我们将所提出的纹理Transformer 应用于 x1、x2、x4 三个不同的层级,并将不同层级间的特征通过上采样或带步长的卷积进行交叉融合。通过上述方式,不同粒度的参考图像信息会渗透到不同的层级,从而使得网络的特征表达能力增强,提高生成图像的质量

跨尺度特征融合模块(CSFI)就是融合transformer输出特征的模块。RBs指残差块,CSFI就是通过上采样、下采样将不同尺度特征进行concat。这种跨尺度的融合的操作在超分中(以及high-level任务中)并不少见。对超分任务而言,有效性上没啥问题,不过就是计算量大一些,而且技术含量一般。

Our texture transformer can be further stacked in a cross-scale way with a cross-scale feature integration module. Stacked texture transformers output the synthesized features for three resolution scales (1×, 2× and 4×), such that the texture features of different scales can be fused into the LR image.

To learn a better representation across different scales, we propose a cross-scale feature integration module (CSFI) to exchange information among the features of different scales.

  • 1.A CSFI module is applied each time the LR feature is up-sampled to the next scale.
  • 2.For the each scale inside the CSFI module, it receives the exchanged features from other scales by up/down-sampling, followed by a concatenation operation in the channel dimension.
  • 3.Then a convolutional layer will map the features into the original number of channels.

In such a design, the texture features transferred from the stacked texture transformers are exchanged across each scale, which achieves a more powerful feature representation. This cross-scale feature integration module further improves the performance of our approach.

训练损失函数

本文的训练损失函数由三部分组成,分别为重建损失,对抗训练损失和感知损失,具体如下式所示:

损失上,三项都很常见,rec重建损失就是预测结果与GT的L1,adv是GAN的损失,不过用的是GP(Gradient Punishment)梯度惩罚的形式,通过让梯度的值保持在一个范围内令训练更稳定。最后是per(perceptual loss)感知损失,也有小改动,就是加了后面的一项,通过约束SR结果和Texture图的距离来促进网络学习参考图的纹理,最终提升视觉效果。

1.重建损失:

本文选取 L1 作为重建损失函数,相对于 L2,L1 可以得到更加清晰的结果图像,具体如下式所示:

2.对抗训练损失:

相对于重建损失函数要求生成图像逐像素与原始图像一致,对抗训练损失函数相对约束较弱,仅要求生成图像与原始图像分布一致进而能生成更加清晰、真实的纹理,其具体计算过程如下式所示:

3.感知损失:

感知损失是施加在特定的预训练网络的特征空间中的一种特殊的“重建损失”。本文的感知损失分为两部分,

第一部分选取了 VGG 网络作为结果图像与原始图像的特征提取网络;
另一部分,选取了文中训练得到的纹理提取器网络作为结果图像的特征提取网络,与迁移特征T进行约束,具体如下式所示:

实验结果与分析

本文在 CUFED5、Sun80、Urban100、Manga109 数据集上针对文中提出的方法(TTSR)进行了量化的比较,具体如表1所示。

表1:本文提出的 TTSR 与现有方法在不同数据集上的量化比较结果

另一方面,本文还进行了用户调查,证实我们提出的方法在超过 90% 数据上取得了更好的结果,进一步证实了本文提出方法的有效性,具体如图3所示。

图3:用户调查结果

图4展示了本文提出的方法(TTSR)与现有的方法在不同数据集上的视觉比较结果,可以发现本文提出的方法显著领先于其他方法的结果。

图4:本文提出的 TTSR 与现有方法在不同数据集上的视觉比较结果


TTSR代码理解:

TTSR(Learning Texture Transformer Network for Image Super-Resolution)论文及代码_神思X學海無涯-CSDN博客

这个博客写的很好,可以看一下

对于代码的各个参数的位置

CVPR 2020丨图像超清化+老照片修复技术,拯救你所有的模糊、破损照片

黑糖 - 知乎

(TTSR)Learning Texture Transformer Network for Image Super-Resolution相关推荐

  1. 【图像超分辨率】Learning Texture Transformer Network for Image Super-Resolution

    论文地址:http://openaccess.thecvf.com/content_CVPR_2020/papers/Yang_Learning_Texture_Transformer_Network ...

  2. Learning Texture Transformer Network for Image Super-Resolution(全译文+大量名词链接)读论文记录①

    本文目录 摘要 附录 摘要 1.简介 附录 简介 2.相关工作 附录 相关工作 SISR RefSR 3.方法 附录 方法 3.1纹理转换器(Texture Transformer) 可学习的纹理提取 ...

  3. (MACN小米AI 轻量化SISR)A Matrix-in-matrix Neural Network for Image Super Resolution

    代码:https://github.com/macn3388/MCAN 1.简介 现存的SISR方法难以 用在手机等移动设备上面. However, these GAN-based methods i ...

  4. SDN实验(四)——Learning Switch自学习交换机

    SDN实验(四)--Learning Switch自学习交换机 一.自学习交换机原理 (一)普通交换机实现 (二)SDN交换机实现 二.自学习交换机代码实现 (一)代码 (二)代码讲解 (三)实验 三 ...

  5. Zero-shot Learning零样本学习 论文阅读(一)——Learning to detect unseen object classes by between-class attribute

    Zero-shot Learning零样本学习 论文阅读(一)--Learning to detect unseen object classes by between-class attribute ...

  6. 【自然语言处理(NLP)】基于Transformer的中-英机器翻译

    [自然语言处理(NLP)]基于Transformer的中-英机器翻译 作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业 ...

  7. 【CVPR 2021】剪枝篇(二):Convolutional Neural Network Pruning with Structural Redundancy Reduction

    [CVPR 2021]剪枝篇(二):Convolutional Neural Network Pruning with Structural Redundancy Reduction 论文地址: 主要 ...

  8. [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution)

    [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution) 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循&quo ...

  9. (STTN)Learning Joint Spatial-TemporalTransformations for Video Inpainting

    ECCV2020的文章,中山大学和微软亚研院 把transformer应用于video inpainting,解决逐帧修复造成的时序不一致的问题.(时域不一致(前后帧由于局部像素变化大导致播放时产生异 ...

最新文章

  1. 刻意练习:Python基础 -- Task12. 模块
  2. 在3D世界中创建不同的相机模式——检查对象是否可见
  3. 滴滴出行首次进军非洲市场,网络推广外包后的滴滴想去的国家还有很多
  4. java将数据封装为树结构_JAVA代码实现多级树结构封装对象
  5. Project interpreter not specified(eclipse+pydev)
  6. html5 jq图片效果,HTML5 jQuery可左右滑动拖拉的照片处理前后对比界面
  7. 矩形波傅里叶变换对以及三角波傅里叶变换
  8. WordPress 如何通过ID获取文章标题、内容等信息
  9. 【codevs3304】水果姐逛水果店Ⅰ,线段树练习
  10. Handler用法总结
  11. 被问到TCP的可靠传输和提高网络利用率?
  12. spring test---restful与文件上传
  13. 520礼包 | 情感分析算法从原理到PaddlePaddle实战全解
  14. Weex第一天:公共样式
  15. eclipse如何设置成保护眼的背景色
  16. STM32F407 + Codec AK4556 + NAND Flash MX30LF2G 录音机实现
  17. 从零开始学数据分析之——《微积分》第一章 函数与极限
  18. mysql表名命名规范_数据库表名的命名规范
  19. 航天金税502设置模拟环境步骤
  20. cdn回源php_简述回源原理和CDN缓存

热门文章

  1. SpringBoot2.0 基础案例(16):配置Actuator组件,实现系统监控
  2. B-Tree/B+-Tree/二叉树/红黑树/Hash表/MySQL底层到底用哪个数据表建立索引做快速查找?
  3. C/C++ 类型内存占用详解
  4. hihocoder 1032 最长回文子串(Manacher)
  5. POJ 1003 解题报告
  6. 2012年下半年我国信息化和信息安全走势分析与预测
  7. C程序中main函数参数调用[个人学习简记]
  8. 信息学奥赛一本通 1216:红与黑 / OpenJudge NOI 2.5 1818
  9. 信息学奥赛一本通 2073:【例2.16 】三角形面积
  10. 信息学奥赛一本通 1099:第n小的质数 | OpenJudge NOI 1.5 44