super_resolution
超分辨率增强方向的一些记录
1. 解决方案
(1) 基本解决方案
SRCNN: 首次提出了 特征提取、非线性映射和重建三个模块的理论。
VDSR: 首次将整体残差引入到 SR 中, 引导了之后的大部分的 SR 残差设计。
SRResNet:
- 首次设计了 特征提取、非线性映射、上采样、重建四个模块
- 首次使用 GAN 进行网络训练
- 首次提出了 感知损失的概念
EDSR:去掉了其中的 BN 层 NTIRE 2017 冠军模型
RCAN:加入了 channnel 机制
(2) 移动端网络:
CRAN:涉及了一种独特的连接机制,有利于信息的流动。轻量级别超分
WDSR:主要有三点改进: NTIRE 2018 冠军模型
- 整体结构涉及改进: 两次上采样
- weight Normalization
- 在残差模块中 ReLU 激活函数前增大特征图
(3) 一些其他论文:
- TTSR: 融入 transformer 模型
- FANet: 特征融合
- IGNN(NUS): 基于图网络的超分辨率模型
- FLASR(xiaomi): 基于nas 的超分辨率模型
- Microsoft: Invertible Image Rescaling
- RawSR: 从 Raw 数据直接进行超分重建
- Real SR: 解决真实场景和合成数据之间的域自适应问题 UDSR NTIRE 2019 冠军模型
- videoSR
- 一些新式卷积的应用
(4) 一些新的解决方案
IMDN: NTIRE 2019 冠军模型 2019年声网 4xSR 冠军模型
AWSRN
DRLN
2. 评价指标
(1) 客观评价指标
对于超分辨率重建,常用的两个客观评价指标是峰值信噪比 (peak single to noise ratio, PSNR)和结构相似性指标 (structure Similarity Index, SSIM), 这两个指标的值越高, 重建结果与原图越接近。 主要注意的是, 基于感知损失的网络在 psnr 指标 和 ssim 上并不一定好, 但是看起来效果相对会比较好。
PSNR 的定义为:
针对于 uint8 数据, 最大的像素值为 255, 针对于浮点型数据, 最大像素值为 1。
SSIM 公式基于样本 x 和 y 之间的三个比较衡量: 亮度(luminance)、对比度(contrast) 和结构(structure)。
$\mux$ 为 $x$ 的均值,$\mu_y$为 $y$ 的均值。$\sigma_x$ 为 $x$ 的方差, $\sigma_y$ 为 $y$ 的方差, $σ{xy}$ 为 $x$ 和 $y$ 的协方差。
一般取 $c1=(k_1L)^2$, $c2=(k_2L)^2 $, $c3=c2/2$,避免除零。其中 $L$位像素值的范围 $2^B-1$, $k_1 = 0.01, k_2 = 0.03 为默认值$。
(2) 主观评价指标
目前还没有较好的(伪)主观评价指标, 一般还是以展示或者平均主观得分(MOS) 的方式来对比不同算法的主观效果。MOS 要求人类测评员对测试图像进行评价。通常情况下,分数从1(坏)到5(好),而最后的 MOS 是以所有评分的算术平均值计算的。
(3) 其他
除上述 IQA 方法外,还有其他一些不太常用的方法, 比如: 多尺度结构相似性(MS-SSIM)、特征相似性(FSIM)、自然图像质量评估器(NIQE)等。
- MS-SSIM 使用多尺度的 SSIM
- 特征相似性(FSIM) 提取特征点, 基于相位一致性和图像的人类兴趣的梯度幅度来评估图像质量。
- NIQE
最近,Blau等人[77]用数学方法证明了失真(如PSNR,SSIM)和感知质量(如MOS)是相互矛盾的,并表明随着失真度降低,感知质量一定更差。 因此,如何准确地测量SR质量,仍然是一个亟待解决的问题。
(4) 复杂度,运行时间、参数量
另外,网络的好坏不应该仅仅依次来进行评判, 还需要考虑网络的网络的复杂度,运行时间 runtime, 参数量 等因素。
运行时间: 这里选择
torch.cuda.Event
进行计时:start = torch.cuda.Event(enable_timing=True) end = torch.cuda.Event(enable_timing=True) start.record() ... some CPU bound operations, i.e. loading data ... end.record() # Waits for everything to finish running torch.cuda.synchronize() print(start.elapsed_time(end))
模型复杂度
使用 https://github.com/mit-han-lab/torchprofile 来统计模型的复杂度, 其对每一层进行分析。
3. 数据增强
- 翻转
- 旋转
- Rethinking Data Augmentation for Image Super-resolution: A Comprehensive Analysis and a New Strategy
4. 损失函数:
L1 or L2
l2 损失是刷高 pnsr 的理想损失函数,但是,l2 损失对大的 error 有较强的惩罚,对小的 error 则惩罚较低, 这样容易导致图像平滑,对与人类的视觉感知系统并不友好。(人类的视觉系统对图像中的无纹理区域的亮度和颜色变化更加敏感)。
l1 的损失函数的收敛性能是优于 l2 损失函数的
内容(特征)损失 content loss
使用预训练模型来计算图像的高层特征的欧式距离。并非着眼于单个像素的匹配,而是让两张图像的感知更加接近。个人认为在得到感知域内容的过程中,对图像的内容进行了一次提炼,因此在感知域空间中计算损失相当于结合图像内容的损失,会使得复原后的图像视觉效果上更好。
texture loss
adversarial loss
全变分损失 total variation loss
TV loss 是常用的一种正则项(注意是正则项,配合其他 loss 一起使用,用来约束噪声)。TV 损失用在图像超分辨率中的作用就是保持图像的光滑性,消除图像超分可能带来的伪影和噪声。缺陷在于会使得复原的图像过于光滑,在一些细节比较多的图像中会使得超分后的图像丢失细节。它定义为相邻像素的差值的绝对值之和,可以用来衡量图片的噪声。
6. 综述
Deep Learning for Image Super-resolution: A Survey
7. 几个经典问题
框架设计
基本可以分为四个阶段: 特征提取、非线性映射、上采样、重建。 主要的设计几种在非线性映射上。
几种上采样方式的区别? 优劣?
常见的上采样方式有:插值、反卷积、subpixel等
比较好的方式是:最近邻采样 + 卷积。在时间上最快, 然后也能够避免反卷积带来的棋盘格效应。
- 为啥不需要 bn 层? 为啥 wn 可以用?
- 三通道重建 or YCrcb 空间 Y 通道重建
现在基本是在 RGB 空间进行超分辨率重建,YCrcb 在之前的工作中使用过。
- 噪声问题 ?
现在想到的一个解决方案是添加 TV Loss, 但是会带来一定的平滑。
- 前采样 和 后采样的区别?
后采样使得整个特征提取在高维空间中进行,虽然能够 hold 住能多得细节信息。但是计算量较大。现在一般都是前采样来降低分辨率,从而能够显著降低计算量。
8. 相关比赛
- AIM 2019 & AIM 2020
- NTIRE
参考文献
[1] Loss Functions for Image Restoration with Neural Networks IEEE TCI 2017 [[paper]] [[code]]
[2] 2018 PIRM Challenge on Perceptual Image Super-resolution [[paper]]
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!