论文阅读:Blind Super-Resolution Kernel Estimation using an Internal-GAN

这是发表在 2019 年 NIPS 上的一篇文章,那个时候还叫 NIPS,现在已经改名为 NeurIPS 了。文章中的其中一个作者 Michal Irani 是以色 Weizmann Institute of Science (魏茨曼科学研究学院) 的一名教授,对图像纹理的内在统计规律有着很深入的研究,提出了很多基于单帧图像的 GAN 模型。这篇文章也是提出了基于单张图像的一种 Internal-GAN 模型,也算是最早开始尝试研究用深度学习进行盲超分的工作,今天看来,依然有一定的借鉴意义。文章中的一个重要假设就是 SR-kernel 是可以在不同尺度下进行递归作用的一种卷积核。

一般的超分方法都会假设一张高分辨率的图经过一个理想的下采样核(比如 Bicubic)得到一张低分辨率的图,基于这样的假设,进行超分的重建。然而,实际的下采样核往往不是理想的,也比一般的假设要复杂。基于理想下采样核训练的超分模型在遇到真实下采样核的时候,重建效果往往不好。这就延伸出了对盲超分的需求,盲超分,顾名思义,就是对下采样核未知情况下的超分重建。进一步证明,真实的 SR-核是能最大化的在 LR 图像的不同尺度上递归地作用在图像 patch 上的一个核。在这篇文章里,文章作者展示了这种跨尺度的递归属性可以通过 Deep Internal Learning 来实现。这篇文章介绍了一种 kernel-GAN,即面向特定图像的 Internal-GAN,在推理阶段,通过对待测试的 LR 图像进行训练,学习图像块之间的内在分布。这个 kernel GAN 的生成器用于生成一个 LR 图像的下采样版本,与此同时判别器无法区分原始 LR 图像的块分布与下采样图像的块分布。生成器一旦训练好,就可以作为特定图像的 SR-kernel。Kernel GAN 不需要额外的训练数据,只需要测试图像本身。

超分的基本假设是一张低分辨率的图像是由一张高分辨率的图像通过卷积和下采样之后得到的:

I L R = ( I H R ∗ k s ) ↓ s (1) I_{LR} = (I_{HR} \ast k_{s}) \downarrow_{s} \tag{1} ILR=(IHRks)s(1)

超分的目标,就是给定低分辨率的图 I L R I_{LR} ILR,去恢复高分辨率的图 I H R I_{HR} IHR,之前的很多工作都是假设一些理想的卷积核,比如 Bicubic 等,然而实际的卷积核比这要复杂的多,实际的卷积核会受到 sensor 的影响,以及相机运动的影响,基于错误假设的 SR kernel 去训练超分模型,在实际的 LR 图像上的效果并不理想。

只给定输入的 LR 图像,文章的目的是找到图像特定的 SR 核。我们希望这个核能够最好地保持不同尺度下图像的块分布。更具体点说,我们希望能生成一个下采样的图像,这个图像的块分布与原始的 LR 图像的块分布要尽可能接近。为了匹配一个分布而不是某个单一的图像patch,文章利用了生成模型 GAN 网络,GAN 网络本身就是用来学习分布的一种模型,GAN 通常是通过大量的数据来学习图像的分布。将源分布的样本 p x p_x px 映射到目标分布 p y p_y py

G : x → y x ∼ p x G ( x ) ∼ p x G: x \rightarrow y \quad x \sim p_x \quad G(x) \sim p_x G:xyxpxG(x)px

而文章中用到的 kernel GAN 是训练在一张图像上,学习的是这张图像内部图像块之间的独特分布。kernel GAN 包含一个下采样的生成器 G 和一个判别器 D。其中 G 和 D 都是全卷积网络,网络的输入是图像块。给定一张输入的低清图 I L R I_{LR} ILR,生成器 G 是为了生成一个下采样的图,而判别器 D 是为了对生成器生成的图与原始的低清图进行区分。

在这里插入图片描述

判别器 D 输出的是一张 heat map,可以称之为 D-map,D-map 上的每个像素会有一个概率,表示的是像素周围的 patch 有多大概率是来自于原始的块分布。D 的训练是交替着进行的,真实样本与虚假样本交替进行训练。D 的 loss 是 pixel-wise 的 MSE loss。label 分别是全 1 和全 0 两种形式。训练的损失函数为:

G ∗ ( I L R ) = arg min ⁡ G max ⁡ D { E x ∼ p a t c h e s ( I L R ) [ ∣ D ( x ) − 1 ∣ + ∣ D ( G ( x ) ) ∣ ] + R } (2) G^{*}(I_{LR}) = \argmin_{G} \max_{D} \{ \mathbb{E}_{x \sim patches(I_{LR})} [\left|D(x) - 1 \right| + \left| D(G(x))\right|] + R \} \tag{2} G(ILR)=GargminDmax{Expatches(ILR)[D(x)1+D(G(x))]+R}(2)

其中, R R R 表示正则项。

Discriminator

判别器的模型是一个全卷积网络,第一层是一个 7 × 7 7 \times 7 7×7 的卷积层,后面跟了 6 层 1 × 1 1 \times 1 1×1 的卷积层,输入和输出是相同 size 的。

在这里插入图片描述

Deep Linear Generator = The downscaling SR-Kernel

在这里插入图片描述

对于生成器,文章中使用了一个全线性的卷积网络,也称为深度线性网络,整个网络都是卷积操作,没有非线性的激活函数。整个生成器包含 6 层卷积层,前三层分别是 7 × 7 , 5 × 5 , 3 × 3 7 \times 7, 5 \times 5, 3 \times 3 7×7,5×5,3×3 的卷积层,后面三层是 1 × 1 1 \times 1 1×1 的卷积层,前三层的卷积层可以形成一个 13 × 13 13 \times 13 13×13 的感受野,相当于一个 13 × 13 13 \times 13 13×13 的卷积核。

在训练过程中,可以对生成器直接估计出一个等效的 SR-kernel,上式中的正则项其实是对提取出的 SR-kernel 做的假设,满足如下的关系:

R = α L s u m + β L b o u n d + γ L s p a r s e + σ L c e n t e r (3) R = \alpha \mathcal{L}_{sum} + \beta \mathcal{L}_{bound} + \gamma \mathcal{L}_{sparse} + \sigma \mathcal{L}_{center} \tag{3} R=αLsum+βLbound+γLsparse+σLcenter(3)

其中, α = 0.5 , β = 0.5 , γ = 5 , σ = 1 \alpha=0.5, \beta=0.5, \gamma=5, \sigma=1 α=0.5,β=0.5,γ=5,σ=1

  • $\mathcal{L}{sum} = \left | 1 - \sum{i, j} k_{i, j} \right | $
  • $\mathcal{L}{bound} = \sum{i, j} \left | k_{i, j} m_{i, j} \right | $ 希望 kernel 的分布尽量靠近中心, m i j m_{ij} mij 是一个预设好的 mask,随着离中心越远,权重越高
  • $\mathcal{L}{spare} = \sum{i,j} \left | k_{i,j} \right |^{1/2} $ 希望 kernel 比较稀疏,而不是比较平均的分布
  • $\mathcal{L}{center} = \left | (x_0, y_0) - \frac{\sum{i,j}k_{i,j}*(i,j)}{\sum_{i,j}k_{i,j}} \right |_{2} $ 希望kernel 的中心能在中心

文章中也提到,SR-kernel 除了与图像内容本身有关,也和需要下采样的尺度有关,文章中认为不同尺度的 SR-kernel 存在一个简单的变换关系,这也是文章一直强调的,SR-kernel 是可以在不同图像的尺度下重复递归作用的一种核。文章中列举了 4x 下采样与 2x 下采样下的SR-kernel 之间的关系:

( I H R ∗ k 4 ) ↓ 4 = ( ( I H R ∗ k 2 ) ↓ 2 ) ∗ k 2 ↓ 2 (I_{HR} \ast k_{4}) \downarrow_{4} = ((I_{HR} \ast k_{2}) \downarrow_{2}) \ast k_{2} \downarrow_{2} (IHRk4)4=((IHRk2)2)k22

简单来说,文章认为,通过 2x 下采样的 SR-kernel 的估计,再通过递归关系,可以实现更大尺度下的 SR-kernel 的估计,所以文章最终只训练了一个 2x 下采样下的 SR-kernel。文章中也给出了基于 2x 下采样学习到的 SR-kernel 通过递归的方式去预测估计 4x 下采样的 SR-kernel,如下图所示。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ASP.NET Core】处理异常

依照老周的良好作风,开始之前先说点题外话。前面的博文中,老周介绍过自定义 MVC 视图的搜索路径,即向 ViewLocationFormats 列表添加相应的内容,其实,对 Razor Page 模型,也可以向 PageViewLocationFormats…

树莓派3B上部署运行.net core 2程序

针对Linxu arm处理器如何部署.net core 2的资料很少,网上找到几篇但都写得不够详细,按照他们教程来撞墙了,折磨了几天终于部署成功了,先上一张运行成功的图1.windows系统中,在项目的目录下使用CMD命令运行进行发布dotn…

拥抱.NET Core系列:MemoryCache 初识

MSCache能做什么?绝对过期支持滑动过期支持(指定一个时间,TimeSpan,指定时间内有被Get缓存时间则顺延,否则过期)过期回调自定义过期MSCache目前最新的正式版是 2.0.0,预览版是2.1.0,…

Spark Structure Streaming(一)之简介

一、Structure Streaming 结构化流是基于Spark SQL引擎构建的可伸缩且容错的流处理引擎。可以像对静态数据进行批处理计算一样,来表示流计算。 当流数据继续到达时,Spark SQL引擎将负责递增地,连续地运行它并更新最终结果。可以在Scala&…

Ocelot中使用Butterfly实践

Ocelot(https://github.com/TomPallister/Ocelot)是一个用.net core实现的API网关,Butterfly(https://github.com/ButterflyAPM/butterfly)是用.net core实现的全程序跟踪,现在,Ocelot中可以使用Butterfly了,关于Ocelot和Butterfl…

jzoj6290-倾斜的线【计算几何,贪心】

正题 题目大意 有nnn个点,将两个点连成线,求斜率最接近PQ\frac{P}{Q}QP​的线。 解题思路 我们有一个结论:若我们对于每一个点做一条斜率为PQ\frac{P}{Q}QP​的线,然后按截距排序,然后答案必定是相邻的点。 证明: 我…

Java 平台调试架构JPDA

转载自 Java-JPDA 概述 JPDA:Java 平台调试架构(Java Platform Debugger Architecture) 它是 Java 虚拟机为调试和监控虚拟机专门提供的一套接口。 一、JPDA https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/ JPDA 由三个…

Ocelot + Consul实践

关于Consul(https://www.consul.io)是一个分布式,高可用,支持多数据中心的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 在Consul的文档上,Consul 支持Service Discovery, Health …

Arthas - 开源 Java 诊断工具

转载自 Arthas使用 Authas — 开源的java诊断工具 下载安装 authas是一个jar包,可以直接下载后运行 wget https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar就可以启动起来。启动后,authas会自动检测存在的java进程&…

jzoj6307-安排【归并排序】

正题 题目大意 一个目前序列,一个目标序列,每次可以选择一个区间交换区间最大值和最小值。 询问在345678345678345678步内将目前序列转换回目标序列的方案(输出该方案)。 解题思路 我们考虑归并排序,对于两个升序的序列,我们考…

.NET Core 2.1 Preview 1发布:更快的构建性能

今天,我们宣布发布 .NET Core 2.1 Preview 1。这是 .NET Core 2.1 的第一个公开发布。我们有很大的改进希望分享出来,并且渴望得到您的反馈意见,无论是在评论中还是在github中dotnet/core #1297ASP.NET Core 2.1 Preview 1 和 Entity Framewo…

Spark SQL(七)之基于用户的相似度公式

一、基于用户的Jaccard相似度公式 其中,u、v表示任意两个用户,N(u)表示用户u喜欢的物品集合,N(v)表示用户v喜欢物品的集合。 代码 public class UserCFApp {public static void main(String[]args){SparkConf sparkConf new SparkConf();sparkConf.se…

欢乐纪中A组赛【2019.8.17】

前言 前几天题目没改完(好难QvQQvQQvQ),然后这几天ZZYZZYZZY和WHFWHFWHF去广州二中了 然后我是菜鸡,今天暴力写挂了QAQQAQQAQ,T2T2T2少判断了个东西少了808080 成绩 懒得写只放自己的了(反正垫底) Rank51,20ptsRank51,20ptsRank51,20pts 正…

BXUG第11期活动

分享主题:Xamarin Azure 微软云加端移动应用技术架构分享者:周岳 微软MVP分享主题:从设计图到最终界面- Xamarin跨平台界面最佳实践分享者: 程文锋 视高盛景分享主题:基于VSTS的App DevOps分享者: 安庭庭 张浩 视高…

Spark SQL(八)之基于物品的相似度公式

一、基于物品的Jaccard相似度公式 其中,i、j表示任意两个物品,N(i)表示喜欢物品i的用户数,N(j)表示喜欢物品j的用户数。 代码: public class ItemCFApp {public static void main(String[]args){SparkConf sparkConf new Spark…

ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL

ASP.NET CORE MVC 中,默认的 Route 模板是: /{controller}/{action} 。我们可以通过开启 URL 小写转换将 URL 变为小写,但此方式在 Controller 或者 Action 为一个词组时,生成的 URL 并不友好。假设我们有 UserController 和 Add…

Spark SQL(九)之基于用户的推荐公式

一、基于用户的推荐公式 其中,S(u,K)表示与用户u最相似的K个用户,N(i)代表喜欢物品i的用户集合,rm表示用户v对物品i的评分。 二、代码 public class UserCFRecommendApp {public static void main(String[]args){SparkConf sparkConf new S…

jzoj6309-完全背包【贪心,背包】

正题 题目大意 完全背包,不过容量特别大。 解题思路 然后我们可以先做一个1∼200001\sim 200001∼20000的背包,然后枚举一个大小,然后将这个大小填入背包知道无法填入为止,然后剩下的空位在再一次背包就好。 codecodecode #incl…

拥抱.NET Core系列:MemoryCache 缓存过期

MSCache项目MSCache目前最新的正式版是 2.0.0,预览版是2.1.0,会与.NETCore 2.1一起发布。本篇用了2.0.0版本开源在GitHub上,仓库地址是:https://github.com/aspnet/CachingNuGet地址为:https://www.nuget.org/packages…

Spark SQL(十)之基于物品的推荐公式

一、基于物品的推荐公式 其中,S(j,K)表示与物品j最相似的K个物品,N(u)表示用户u喜欢的物品集合,Rui表示用户u对物品i的评分。 二、代码 public class ItemCFRecommendApp {public static void main(String[]args){SparkConf sparkConf new …