real-world image and video super-resolution

文章目录

  • real-world image and video super-resolution
    • 1. Toward Real-World Single Image Super-Resolution:A New Benchmark and A New Model(2019)
      • 1.1 real-world数据集制作
      • 1.2 LP-KPN网络结构
      • 1.3 拉普拉斯金字塔构造代码
    • 2. Real-world Video Super-resolution: A Benchmark Dataset and A Decomposition based Learning Scheme
      • 2.1 一个预训练的weight应用到一个实际任务时候的表现
      • 2.2 real-VSR dataset
      • 2.3 损失函数
      • 2.4 实验
    • 3. real-basic vsr:Investigating Tradeoffs in Real-World Video Super-Resolution
      • 3.1 在面对实际超分场景时,是各种各样的退化场景, non-blind model 不能很好的应对。
      • 3.2 因此作者设计了一个clean 模块,放在 basicVSR前面
      • 3.3 traing speed 和 performance 分析
      • 3.4 batch size 和 sequence length的比较
      • 3.5 videoLQ dataset
      • 3.6 运行realbasic vsr官方代码跑的结果如下:

1. Toward Real-World Single Image Super-Resolution:A New Benchmark and A New Model(2019)

1.1 real-world数据集制作

如图所示,单反相机的简化成像模型

一般情况下,u > 3.0m, f最大时 105mm. u >> f
因此

可见 h2h_2h2​ 近似 与 fff成正比, 通过增加fff, 可以得到更好的图像细节。

因此作者利用 105mm, 50mm, 35mm, 28mm四个焦距来制作数据对,其中105mm的数据用于生成ground-truth HR, 其他焦距生成对应LR。

整体框架如下

同一个场景不同焦距的图像对,上面的图像肯定细节更多一些,首先进行畸变矫正,由于 图像边缘区域的畸变较大,作者使用photoshop中的方法无法完全得到完美的矫正,因此作者首先裁剪了中间的畸变较小的区域。

然后通过对 LR image进行裁剪和 迭代的方法进行像素级的配准,得到aligned LR image, 因此生成了一一对用的图像对。

作者利用 Canon 5D3和Nikon D810生成了 595个图像对。
关于本文介绍不同focus的像素级图像配准方法,是利用迭代的最小二乘方法,这里没有深入研究,有兴趣的可以参考官方提供的matlab源码。

1.2 LP-KPN网络结构

整体框图如下:

整体比较清晰,论文中的介绍也比较详细,可以参考代码理解

1.3 拉普拉斯金字塔构造代码

感觉这部分代码可以用于固定滤波核 的 滤波, 包括高斯滤波 和 高斯滤波上采样的写法

class GaussianBlur(nn.Module):def __init__(self):super(GaussianBlur, self).__init__()kernel = np.array([[1./256., 4./256., 6./256., 4./256., 1./256.],[4./256., 16./256., 24./256., 16./256., 4./256.],[6./256., 24./256., 36./256., 24./256., 6./256.],[4./256., 16./256., 24./256., 16./256., 4./256.],[1./256., 4./256., 6./256., 4./256., 1./256.]])kernel = torch.FloatTensor(kernel)kernel = kernel.unsqueeze(0).unsqueeze(0).repeat(3,1,1,1)self.gaussian = nn.Conv2d(3, 3, kernel_size=5, stride=1, padding=2,groups=3,bias=False)self.gaussian.weight = nn.Parameter(kernel, requires_grad=False)def forward(self, x):x = self.gaussian(x)return xclass GaussianBlur_Up(nn.Module):def __init__(self):super(GaussianBlur_Up, self).__init__()kernel = np.array([[1./256., 4./256., 6./256., 4./256., 1./256.],[4./256., 16./256., 24./256., 16./256., 4./256.],[6./256., 24./256., 36./256., 24./256., 6./256.],[4./256., 16./256., 24./256., 16./256., 4./256.],[1./256., 4./256., 6./256., 4./256., 1./256.]])kernel = kernel*4kernel = torch.FloatTensor(kernel)kernel = kernel.unsqueeze(0).unsqueeze(0).repeat(3,1,1,1)self.gaussian = nn.Conv2d(3, 3, kernel_size=5, stride=1, padding=2,groups=3,bias=False)self.gaussian.weight = nn.Parameter(kernel, requires_grad=False)def forward(self, x):x = self.gaussian(x)return xclass Laplacian_pyramid(nn.Module):def __init__(self, step=3):super(Laplacian_pyramid, self).__init__()self.Gau = GaussianBlur()self.Gau_up = GaussianBlur_Up()self.step = stepdef forward(self, x):Gaussian_lists = [x]Laplacian_lists= []size_lists = [x.size()[2:]]for _ in range(self.step-1):gaussian_down = self.Prdown(Gaussian_lists[-1])Gaussian_lists.append(gaussian_down)size_lists.append(gaussian_down.size()[2:])Lap = Gaussian_lists[-2]-self.PrUp(Gaussian_lists[-1],size_lists[-2])Laplacian_lists.append(Lap)return Gaussian_lists, Laplacian_listsdef Prdown(self,x):x_ = self.Gau(x)x_ = x_[:,:,::2,::2]return x_def PrUp(self,x,sizes):b, c, _, _ = x.size()h,w = sizesup_x = torch.zeros((b,c,h,w),device='cuda')up_x[:,:,::2,::2]= xup_x = self.Gau_up(up_x)  return up_x

2. Real-world Video Super-resolution: A Benchmark Dataset and A Decomposition based Learning Scheme

2.1 一个预训练的weight应用到一个实际任务时候的表现

在Vimeo-90k上训练的模型应用在 iphone11上并没有大的改善,说明其实很多现有论文的pretrained weight 应用在实际数据集中是不可行的。

2.2 real-VSR dataset

配准方法和Toward Real-World Single Image Super-Resolution:A New Benchmark and A New Model(2019)方法类似

  1. 利用iphone的多摄像头系统和DoubleTake 软件采集 52mm等效焦距和26mm焦距分别生成 HR和LR序列。HR 是X2 LR

  2. 利用 Real-sr的方法进行配准

  3. 生成 500 LR-HR sequence pairs, each of which has 50 frames in length and 1024×512 pixels

2.3 损失函数

作者的目的是为了恢复图像细节,而不是全局的 luminance 和colors .
同样是分离为 Y, CbCr 通道。

Y通道的低频用SSIM,更加关注全局亮度

Y通道的高频用Charbonnier loss(类似L2)

CbCr通道用gradient weighted lss

整体框架如下图,此外作者还引入 GAN loss

2.4 实验

作者利用5个 VSR networks (RCAN, FSTRN,TOF, TDAN, EDVR),在 Vimeo-90k 和 RealVSR两个数据集上进行训练,得到10个模型, 再在作者提供的RealVSR test dataset上做测试,毫无疑问肯定是在 RealVSR 上训练效果好,能说明数据集好吗,不太能。

作者使用3个相邻帧去估计中间帧。
结果如下:可以看出各模型的泛化能力都很差,甚至不如bicubic

一些具体的细节对比:

3. real-basic vsr:Investigating Tradeoffs in Real-World Video Super-Resolution

3.1 在面对实际超分场景时,是各种各样的退化场景, non-blind model 不能很好的应对。

在non-blind vsr中序列越长,效果越好。但是对于实际场景并不是这样,因为序列太长可能会学到artifact.

3.2 因此作者设计了一个clean 模块,放在 basicVSR前面

1. 这样可以降低各种degradation对后续网络的影响,如下图:

cleaning 模块的输出是:

然后 进入 到 后续 VSRnet:

cleaning 模块的损失函数是:
其中d 表示低分辨率版本的gound-truth

网络末端的损失:

ρ\rhoρ 是 Charbonnier loss.

2. cleaning 模块是一个refinement 模块,可能被通过多次不断优化

停止条件是 相邻两次迭代的 差异 小于 θ\thetaθ, θ\thetaθ在non Gan-based model设为1.5,否则设为5。

3. cleaning 模块架构

cleaning 模块是 a stack of residual blocks。 作者提出也可以是其他任何结构,由于加入了cleaning mudule, 作者减少了 basic vsr net的 参数,将其中的redidual blocks从60减少到40.
代码中好像是20?

4. cleaning模块分析

4.1 不引入cleaning模块的loss 或者 引入循环网络代替 cleaning mudule,效果都不好。

4.2 refinement 迭代clean module可以更好的平衡 细节保留和不引入artifact。

θ\thetaθ 可以确定 保留细节的程度

3.3 traing speed 和 performance 分析

在VSR中一般一个样本有L各图像组成图像序列,每个batch有 B个样本,因此每次训练需要载入 B x L 个图像,作者使用一个stochastic degradation(随机退化)方法可以减半 L的长度。
具体做法就是 对于 L / 2长度的序列,反转后得到 L长度,每个图像使用不同的 degradation 方法。
相比与 直接翻转(flip only),可以引入更多 variation。

方法和结果对比如下:

3.4 batch size 和 sequence length的比较

固定计算budget, 怎么选择 B 和 L呢?
序列长一些比较好。对于不同的模型不一定适用吧。

3.5 videoLQ dataset

covers a wide range of degradations, content, and resolution, 每个图像序列有100张图像。

3.6 运行realbasic vsr官方代码跑的结果如下:

是会清晰挺多,更加有棱有角,但是存在artifact,是否真实,和还原原图?

real-word super resulution: real-sr, real-vsr, realbasicvsr 三篇超分和视频超分论文相关推荐

  1. 【教学类-06-03】20220327 X以内数字分合题(分)及生成word 打印docx纸(方法一)(Python VS )

    本代码价值: 终端生成的列表 通过TXT文本转换成docx文件 征文需求: 3月上海疫情隔离开启居家办公生涯.月底区教育局有一个"工具运用"的征文比赛,阿夏以<设计Pytho ...

  2. word中摘要不分栏,正文分两栏,脚注不分栏怎么设置

    百度很多都不完整,找到完美解决办法记录下 接下来一步步解决 1.摘要不分栏,正文分两栏 选中需要分栏的正文(摘要不要选),页面布局--->  分栏 2.基金脚注 不分栏 先调整脚注兼容方式 wo ...

  3. bootstrap怎么强制不换行_【Word考点】页面设置:页边距、分隔符要怎么设置?如何分栏?...

    跟着步骤操作会让思路更清晰.两个真理:积少成多 | 实践是检验真理的唯一标准. 接下来的时间会将MS Office的知识点一个个来讲解,所以先从Word开始吧,这次主要说的内容都在[页面布局]选项卡中 ...

  4. 怎样在word文档画虚线_班级工作小技巧——怎样在word里画出美观正式的四线三格?...

    低年级的语文老师要划"拼音格",英语老师要划"英文四线格",这篇图文我们就来分享一下怎样在word里划出既美观又实用的拼音四线格. 一.首先在word里插入一个 ...

  5. Word文档怎么横向排版?这三种方法简单高效专业

    我们在利用Word文档处理日常工作时,为了文档的美观,我们会经常对Word文档进行各种形式的排版,比如对Word文档进行横向排版.如果有小伙伴不知道该如何进行横向排版,那么今天小编将要向大家分享三个横 ...

  6. PDF转Word方法大盘点:看了这一篇,就不用再找转换技巧了

    PDF文档成为正式文件之后,传输之间都是使用PDF文件.但是有部分的人仍不习惯编辑PDF文档,而适应Word编辑.这时转换就成了桥梁,将PDF文档转换成Word,即可以使用Word编辑文档,又可以接收 ...

  7. 微信公众号如何上传附件(Word、Excel、Pdf、PPT),三步轻松实现

    相信很多朋友都看到过,在公众号文章中的一些带蓝色图标的文字,点击时会弹出一个跳转到"附文件"小程序的提示窗,点击允许后,就可以跳转到"附文件"小程序下载附件. ...

  8. Word排版之段落样式+如何创建一个三线表外观的表格样式

      通过建立正文.标题.表格等的段落样式可以方便的统一调整文章各部分样式类型.点击样式栏右下角的小三角可以弹出样式对话框,执行新建.管理.删除样式等操作. 首先建立"论文正文"样式 ...

  9. 利用Word 2010对书籍排版进行设置(三)--常用格式设置(1)

    大家好,本座又回来了,这期继续为大家带来带来书籍排版设置的秘籍. 经过前面的设置后,就可以开始进行书籍内容的排版了.在排版过程中经常用到以下几种常用格式的设置. 应用样式的设置 我们都知道,在合适的位 ...

最新文章

  1. 1108. Defanging an IP Address
  2. python编程做什么工作-什么样的人要学点python编程?请你对号入座
  3. 实战1--应用EL表达式访问JavaBean的属性
  4. 密度泛函DFT与神经网络
  5. 机器人学习--电子指南针定位导航
  6. 支持向量机器—SMO算法
  7. SAP fiori上直接连接到操作系统层面 然后进行相关操作的需求
  8. Java9Java10 Java11新特性
  9. 开源巨献:Google最热门60款开源项目
  10. poj-3034 Whac-a-Mole
  11. Markdown——让你专注写作
  12. avast注册号|好用的avast注册号|没过期avast注册号
  13. 如何在IOS上玩gba游戏(免越狱)
  14. 使用Jquery+bootstrap无限级菜单树
  15. 人工智能时代已经到来,政务工业商业等各领域都将是刚需
  16. handsome优化 - AMP/MIP阅读
  17. 想想五年后的你,什么工作值得你去拼命? 转~ 推迟满足感 成长比成功重要
  18. 理解Java虚拟机(七)低延迟垃圾收集器-Shenandoah
  19. do while(0)的作用
  20. 曲线救国: 使用 Markdown 编辑器来写 Confluence 文档

热门文章

  1. 构建档案馆发展新趋势:智慧档案馆三维可视化方案
  2. 帮我用python写一个淘宝抢购的代码
  3. 8086指令系统(一)数据传送指令
  4. echarts 折线图 无数据时连接线段
  5. 在过去的职业生涯中,我收获了什么?我的工作成果是什么?我拿什么证明?
  6. python中zipfile的使用_详解python3中zipfile模块用法
  7. 【macbookpro】重装ventura系统
  8. 王凤英正式加入小鹏汽车出任总裁
  9. c语言数码管3位译码地址,三位数码管显示实验总结
  10. Facebook的Aquila遭查,无人机事故频发皆因哪般