总结一波:

与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计算这两个特征图之间的相似性。

特征的匹配是在  和  的特征空间中进行的,因为LR图像比较模糊,所以将参考图像进行下采用&上采样的模糊化。

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

swap

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

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

快速swap

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

  即表示 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是重叠的,在重叠位置取平均。另外,注意计算相似性是使用  ,纹理迁移则是利用 

备注:在实现上,利用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作为权重,抑制不相似纹理的惩罚,放大相似纹理的惩罚,这样可以自适应地进行纹理迁移

其中为计算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

(SRNTT)Image Super-Resolution by Neural Texture Transfer相关推荐

  1. 【图像超分辨率】Image Super-Resolution by Neural Texture Transfer

    Image Super-Resolution by Neural Texture Transfer 摘要: 1.引言 2 相关工作 2.1 基于深度学习的SISR 2.2基于参考的超分辨率 3. 方法 ...

  2. 轻量化网络(一)MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

    轻量化网络研究(一)MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 研究过深度学习的 ...

  3. 论文笔记(一)《Intriguing properties of neural networks》

    对抗样本(一)<Intriguing properties of neural networks> 神经网络的有趣特性 两点: 性质1:单个的深层神经元与随机线性组合的多个深层神经元并没有 ...

  4. 论文笔记(三):PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes

    PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes 文章概括 摘要 1. ...

  5. 机器学习入门课程笔记(二)——deeplearning.ai: Improving Deep Neural Networks

    欢迎前往我的个人博客网站:mathscode.top获取更多学习资源. 所有文本内容会在知乎: MathsCode同步 所有开放资源会在Github: MathsCode开放下载 有问题欢迎大家评论或 ...

  6. (EWC)Overcoming Catastrophic Forgetting in Neural Network

    论文链接:Overcoming Catastrophic Forgetting in Neural Network 1.论文基础思路 文章开发了一种类似于人工神经网络突触整合的算法,我们称之为弹性权重 ...

  7. 封装(encapsulation)继承(extend)多态(Polymorphism)this,super、类与类之间的关系

    封装(encapsulation) 属性可以用来描述事物的特征,方法可以描述事物可以做的操作.封装就是把同一类事务的共性(包括属性和方法)归到一个类中. 提高代码的安全性,通过访问权限将不想让客户端看 ...

  8. 架构搜索文献笔记(10):《Fast Hardware-Aware Neural Architecture Search》

    ***论文< Fast Hardware-Aware Neural Architecture Search>-2020-CVPR ***** 论文链接 一.摘要及主要贡献 1.1 摘要 论 ...

  9. Java零基础学习之路(十三)Java super

    Java super的定义 本章节目标: 掌握super都可以用在哪里?理解super在内存方面的存储位置.掌握怎么通过子类的构造方法调用父类的构造方法.super什么时候可以省略,什么时候不能省略 ...

最新文章

  1. mobilefacenet
  2. ASP.NET MVC IOC 之AutoFac攻略
  3. mysql innodb创建数据文件失败
  4. ADS2017打开出现cannot create the directory,解决办法。
  5. seo html空格影响,这一对HTML标签嵌套对SEO优化的影响,居然99%的人不知道!
  6. [转]IaaS、PaaS、SaaS、CaaS、MaaS五者的区别
  7. jmeter性能分析_使用JMeter和Yourkit进行REST / HTTP服务的性能分析
  8. 莫名其妙就发个手机!这家公司员工晒年终奖品:人手一部iPhone 11
  9. 安装插件报错:error: Microsoft Visual C++ 14.0 is required...
  10. System.IO.Directory.Delete 方法的使用
  11. 世事无常,深信服及其他
  12. 程序员代码面试指南 IT名企算法与数据结构题目最优解.pdf
  13. 信息学奥赛一本通(C++版) 第三部分 数据结构 第四章 图论算法
  14. JXLS (Excel 导出工具使用)
  15. 情迁机器人Tim_情迁机器人插件-情迁机器人app下载V1.5.0安卓版-西西软件下载
  16. 认知水平高下定义及提高认知水平的方法
  17. 修改飞秋2013~随便改,瞬间提升你的逼格
  18. 按键精灵——电脑永不熄屏
  19. php 编码转换 乱码解决
  20. FreeRTOS学习笔记

热门文章

  1. JEECG 3.6 自定义表单版本发布,智能快速开发平台
  2. easyui form 提交
  3. Python学习day02_数字类型 与 布尔类型 短路逻辑和运算符优先级
  4. C#数据结构-双链表
  5. maven的Windows环境下安装配置
  6. PB开发境界 多个DW进行update
  7. Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 359404 bytes) in
  8. java线程间的协调
  9. Java NIO原理图文分析及代码实现
  10. 慎用 TOraQuery RecordCount