【图像超分辨率】Wavelet-SRNet -- A Wavelet-based CNN for Multi-scale Face Super Resolution

paper:Wavelet-SRNet
github:A pytorch implementation of Paper Wavelet-srnet


摘要

人脸超分辨(Face super-resolution (SR))指的是从低分辨率(HR)的人脸图像中解析出相应的高分辨率(LR) 人脸图像,当前大多数人脸超分辨方法都是通过CNN来实现。

当处理极低分辨率的图像时,基于CNN的方法性能明显降低;同时这些方法得到的输出过于平滑,损失了一些细节信息

为了解决这个问题,Wavelet-SRNet这篇论文提出了一个基于小波的CNN方法,此方法可以将16×16甚至更小的低分辨率人脸图像解析为原图像的几倍大小(2×,4×,8×,16×)。

在这里插入图片描述

1、小波包分解

小波变换(Wavelet transform,WT)能够从不同的level上来描述图像的上下文和纹理信息。如下图所示的不同level的小波包分解,近似系数(the approximation coefficients)包含图像的全局拓扑信息,细节系数( detail coefficients)显示了图像的纹理信息

Wavelet-SRNet通过小波包分解将图像解析为一组具有相同大小的小波系数。小波包分解示意图如下:
在这里插入图片描述

Wavelet-SRNet选用最简单的小波:haar小波,此小波足以描述不同频率的人脸信息。另外,使用快速小波变换(2-D fast wavelet transform ,FWT))来计算haar小波。计算过程如下图所示:
在这里插入图片描述

2、网络架构

下图是训练过程流程图:

训练阶段:高分辨率输入HR经小波分解得到一组小波系数,其中只有一个低频分量。将此低频分量输入网络得到N个小波分量,最后再通过小波重建得到和原高分辨率输入一样大小的图SR。

(loss函数让网络输出的N个小波分量,与最初HR小波分解后的N个小波分量接近)

在这里插入图片描述
Wavelet-SRNet分为三个子网: embedding, wavelet prediction and reconstruction networks。

(1)将一张低分辨率的人脸图像(LR Input)输入到embedding net中得到一组feature map;
(2)将这组embedded features输入到wavelet prediction net的各个并行的独立子网中得到 N w N_{w} Nw组小波系数。wavelet prediction net中的子网数量 N w N_{w} Nw 可根据需求进行调整;
(3)reconstruction net根据多组小波系数重建得到高分辨率图像。

以下三个阶段输入输出的关系如下:
在这里插入图片描述
embedding net和wavelet prediction net中的卷积层的filter:3×3,sride=1,pad=1。故这两个子网中feature map的大小都与输入图像的大小相同,只在深度上有所变化。

小波包分解级数 n n n 决定了低分辨率图像到高分辨率图像的放大倍数 r r r 和小波系数的数量 N w N_{w} Nw r = 2 n , N w = 4 n r=2^{n},N_{w}=4^{n} r=2nNw=4n

3、loss函数
3.1、full-image loss (MSE loss)

超分辨率方法中最常使用MSE损失函数,MSE损失函数是在图像空间上的一个限制,MSE几乎不能获取到高频纹理细节信息。

Wavelet-SRNet的full-image loss 一方面是在图像空间上的限制,另一方面也能在平滑度和纹理细节上达到一个平衡。

在这里插入图片描述

3.2、 wavelet-based loss

Wavelet-SRNet提出了两个wavelet-based loss: wavelet prediction loss and texture loss.

(1)wavelet prediction loss

wavelet prediction loss相当于在小波域上的加权MSE,定义如下:

W = ( λ 1 , λ 2 , ⋅ ⋅ ⋅ , λ N w ) W=(\lambda_{1},\lambda_{2},···,\lambda_{N_{w}}) W=(λ1,λ2,λNw)是一个平衡不同组小波系数重要性的权重矩阵; C C C是真实值, C ˉ \bar{C} Cˉ是小波系数。

这个loss函数应该更关注局部纹理信息,故高频系数的权重应该更大一点。

∣ ∣ c 1 ˉ − c 1 ∣ ∣ ||\bar{c_{1}}-c1 || c1ˉc1项提取全局拓扑信息,其中 c 1 c_{1} c1是网络的输入(?)。
在这里插入图片描述
(2)texture loss

texture loss是为了避免高频小波系数收敛为0。

α 和 ϵ \alpha和\epsilon αϵ是 slack values,可以使高频小波系数不为0,因此避免了纹理细节的下降。
在这里插入图片描述

3.3、loss函数

为了得到人脸的全局拓扑信息和局部纹理信息,最终loss函数定义如下:
在这里插入图片描述

4、pytorch实现

在这里插入图片描述

训练阶段,先将图片resize得到高分辨率的图像HR,然后再下采样scale倍得到 LR Input。

注意:只将 LR Input输入到网络中,上图有误导性

# level为小波包分解级数
scale = int(math.pow(2, level))
img = img.resize((output_width, output_height),Image.BICUBIC)
img_lr = img.resize((int(output_width/scale),int(output_height/scale)),Image.BICUBIC)
小波包分解 + 小波重建实现

将HR进行小波包分解,得到低频系数和高频系数。

小波包分解的实现如下,其中 f i l t e r : r × r , s t r i d e = r filter:r×r,stride=r filterr×rstride=r r r r是低分辨图像到高分辨图像的放大倍数,由小波包分解级数 n n n 决定, r = 2 n r=2^{n} r=2n

# 通过分组卷积来实现小波包分解,将groups的值设为3即可。
self.conv = nn.Conv2d(in_channels=3, out_channels=nc, kernel_size=ks, stride=ks, padding=0, groups=3, bias=False)

将LR Input输入到网络中,经过wavelet prediction net后得到一组小波系数。再根据这组小波系数重建得到高分辨的图像。

重建网络的实现如下,其中 f i l t e r : r × r , s t r i d e = r filter:r×r,stride=r filterr×rstride=r r r r是低分辨图像到高分辨图像的放大倍数,由小波包分解级数 n n n 决定, r = 2 n r=2^{n} r=2n

self.conv = nn.ConvTranspose2d(in_channels=nc, out_channels=3, kernel_size=ks, stride=ks, padding=0, groups=3, bias=False)
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值