WFEN-Efficient Face Super-Resolution via Wavelet-based Feature Enhancement Network

通过基于小波的特征增强网络实现高效的人脸超分辨率

人脸超分辨率旨在从低分辨率人脸图像重建出高分辨率人脸图像。以往的方法通常采用编码器 - 解码器结构来提取面部结构特征,然而直接下采样不可避免地会引入失真,尤其是对于像边缘这样的高频特征。

为了解决这一问题,我们提出一种基于小波的特征增强网络。该网络通过使用小波变换将输入特征无损地分解为高频和低频分量,并分别对它们进行处理,以此减轻特征失真。为了提高面部特征提取的效率,我们进一步提出了全域变换器,用于增强局部、区域以及全局的面部特征。这样的设计使得我们的方法无需像以往方法那样堆叠众多模块就能有更好的表现。

实验表明,我们的方法有效地平衡了性能、模型大小和速度。代码链接:https://github.com/PRIS-CV/WFEN

介绍

人脸超分辨率(FSR),也称为人脸幻觉,旨在将低分辨率(LR)人脸图像转换为高分辨率(HR)人脸图像。与图像超分辨率不同,FSR 专注于重建人脸的关键结构信息,包括面部轮廓和面部组件的形状。如图1所示,本文旨在提出一种高保真度的 FSR 方法,同时在模型大小和推理速度方面保持高效。 现有的 FSR 方法[2, 4, 16]通常采用编码器 - 解码器结构,因为这种结构有助于模型在编码器阶段通过较大的感受野掌握整体面部结构,并在解码器阶段增强面部细节。具体来说,编码器首先对低分辨率输入进行下采样,提取不同尺度的特征。随后,解码器逐步对编码器输出的特征进行上采样,细化细节,并最终生成高分辨率输出。然而,以往的方法忽略了所选下采样技术对 FSR 结果的影响。例如,一些方法[2, 4]采用双三次插值或跨步卷积进行下采样,这会减少图像像素数量,可能导致对 FSR 至关重要的面部细节丢失。如图2(b)和(c)所示,双三次插值和跨步卷积导致整体面部结构的纹理显著丢失,从而在面部轮廓重建中产生失真。另一个例子来自[13],其通过平均池化进行下采样。如图2(d)所示,这会导致高频和低频面部特征的混叠伪影。这种现象在眼睛特征中尤为明显,并严重阻碍了面部组件的准确表示。

同时,获取的高频分量仍然可以与低频特征融合以增强特征,例如人脸边缘。如图2(e)所示,采用小波特征分解和融合可产生更清晰的面部轮廓,并且不会出现频域混叠。该结果表明,使用 DWT 分解和融合高频与低频特征可以在确保清晰面部轮廓的同时完成下采样。受此启发,我们引入了小波特征下采样(WFD)和小波特征升级wavelet feature upgrade(WFU)。WFD 旨在在编码器阶段的下采样过程中尽量减少关键面部结构的失真。WFU 旨在在解码器阶段利用通过 DWT 获得的高频特征来增强面部轮廓。 为了更好地增强小波变换分解后获得的低频面部信息,我们引入了全域变换器(FDT)。具体来说,由于低频信息包含图像的大量详细特征,提取全面的低频信息至关重要。尽管变换器在处理低频信息方面已显示出有效性,但现有 FSR 方法中使用的变换器难以有效地聚焦于局部(例如皮肤细节)、区域(例如眼睛、鼻子等组件)和全局特征(例如整体面部轮廓)。为了解决这个问题,提出 FDT 以探索不同的感受野并揭示面部特征内更深层次的相关性,从而提取更全面的信息来增强 FSR。 通过利用 WFD 和 WFU 减轻面部特征失真,并采用 FDT 全面提取面部特征,我们基于小波的特征增强网络(WFEN)无需像以前的方法那样过度堆叠网络模块即可实现强大的性能。如图1所示的结果,与最先进的方法相比,我们的 WFEN 展示出卓越的效率。

总之,本文的贡献如下: - 我们提出了利用小波变换的 WFD 和 WFU 模块,以在编码器 - 解码器结构中尽量减少面部特征的失真并增强面部轮廓。 - 我们提出了一个 FDT 模块,它将交互扩展到局部、区域和全局级别,为我们的模型提供更丰富的面部感受野信息。 - 我们提出了一种 WFEN,它比最先进的方法更高效,并且在性能、模型大小和推理速度方面实现了更好的平衡。

3 提出的方法

3.1 概述

3.2 基于小波的编解码器结构

如图3所示,基于小波的编解码器结构的核心组件包括编码器中的一系列小波特征下采样操作以及解码器中的一系列小波特征升级操作。它们的任务是逐步进行下采样和上采样,构成了我们网络的主体结构。

小波特征下采样(WFD)

在编码过程中,通常会采用下采样来减小特征图的尺寸。然而,正如前文所述,现有的方法忽略了下采样所导致的不可逆失真问题,这使得人脸超分辨率(FSR)的结果中边缘模糊不清。出现这种情况是因为传统的下采样操作通过合并相邻像素来降低分辨率,由于采样点的减少,会导致特征失真,特别是在梯度变化显著的区域。在这种情况下,如图3所示,我们引入了一种利用小波变换的小波特征下采样(WFD)方法来缓解这一现象。关于小波变换的更多信息可在我们代码链接中的补充材料里找到。

小波特征升级(WFU)

为了获取更多细节,一些方法[2, 16]提出使用残差连接,以使解码器能够利用来自编码器的信息。由于不同尺度的特征分辨率不同,在上采样操作被用于在特征融合之前将它们调整到相同的分辨率。然而,直接融合操作并非最优选择,因为它可能会引入一定程度的高频和低频混叠。为了更好地融合来自编码器的特征,我们利用小波变换进行图像尺度变换,开发了一种小波特征升级(WFU)方法,通过分别融合高频和低频特征,在解码器中有效地利用不同尺度的特征,以增强面部细节。

3.3 全域变换器Full-domain Transformer

如上述分析,该框架的主路径主要由低频信息构成。因此,利用对低频信息更为敏感的变换器结构,对于面部特征提取更为有利。为了增强人脸图像的恢复效果,有效利用局部、区域和全局层面的人脸特征至关重要。具体而言,局部区域包含多个像素,使用小的1×1或3×3卷积核进行建模最为有效,能够捕捉诸如局部面部细节等典型特征。区域特征包含数十个像素点,例如眼睛、鼻子和其他面部组件。由于其空间范围较大,使用大卷积核卷积[6? ]或基于窗口的变换器[20]进行建模效果更好。全局特征涉及整个人脸的结构相关性,比如整体面部轮廓,使用全局变换器建模效果最佳。然而,大多数方法[17, 18, 29, 34]仅专注于利用局部和全局特征或局部和区域特征。因此,如图4所示,我们提出一种全域变换器作为特征提取的主要模块,它主要由两部分组成:区域自注意力(RSA)专注于提取局部和区域面部特征,而全局自注意力(GSA)负责提取局部和全局面部特征。随后,我们将详细阐述全域变换器如何有效地捕捉局部、区域和全局面部特征。

区域自注意力(RSA)

全局自注意力(GSA)

5 结论

本文提出了一种用于高效人脸超分辨率(FSR)的基于小波的特征增强网络。为了解决编解码器结构中直接下采样导致的特征失真问题,我们将小波特征下采样(WFD)和小波特征升级(WFU)集成到编解码器结构中。此外,通过进一步使用我们的全域变换器(FDT)全面提取低频面部特征,我们的方法能够更精确地重建面部结构。我们验证了WFD和WFU在最小化重建过程中面部结构失真方面的有效性,以及FDT所提供的全面面部特征感知能力。包括监控场景中的人脸匹配在内的大量实验表明,我们的方法有效地实现了更高保真度的人脸超分辨率,在性能、模型大小和推理速度之间实现了出色的平衡。

Read-me

基于小波特征增强网络的高效人脸超分辨率(ACMMM 2024)

论文(Arxiv)| 补充材料 | 项目页面

Paper (Arxiv) | Supplementary Material | Project Page

安装与要求

我已在以下环境中训练和测试代码:

  • Ubuntu 20.04
  • CUDA 11.1
  • Python 3.8 ,通过 pip install -r requirements.txt 安装所需软件包

快速上手

下载我们的预训练模型和测试数据集。此外,我们在原始论文中提供了人脸超分辨率(FSR)结果。

注意:测试结果与原始论文略有不同,因为模型权重是在整理代码后重新训练得到的。

使用预训练模型进行测试

在CelebA测试集上
python test.py --gpus 1 --model wfen --name wfen \
    --load_size 128 --dataset_name single --dataroot /path/to/datasets/test_datasets/CelebA1000/LR_x8_up/ \
    --pretrain_model_path./pretrain_models/wfen/wfen_best.pth \
    --save_as_dir results_celeba/wfen
在Helen测试集上
python test.py --gpus 1 --model wfen --name wfen \
    --load_size 128 --dataset_name single --dataroot /path/to/datasets/test_datasets/Helen50/LR_x8_up/ \
    --pretrain_model_path./pretrain_models/wfen/wfen_best.pth \
    --save_as_dir results_helen/wfen

评估

我们在 test.sh 脚本中提供了评估代码,用于计算PSNR/SSIM/LPIPS/VIF/Parmas/FLOPs分数。

训练模型

用于训练发布模型的命令在 train.sh 脚本中提供。以下是一些训练提示:

  • 你需要下载CelebA数据集来训练WFEN模型。请将 --dataroot 修改为你存储训练图像的路径。
  • 为了训练WFEN,我们直接从CelebA中裁剪人脸,而不进行预对齐,因为对于超低分辨率的人脸超分辨率任务,很难对低分辨率(LR)图像进行预对齐。
  • 请为不同的实验更改 --name 选项。同名的Tensorboard记录将被移动到 check_points/log_archive,并且权重目录将只存储同名最新实验的权重历史记录。
  • 如果内存不足,你可以降低 --batch_size
  • --gpus 指定用于训练的GPU数量。脚本将首先使用可用内存较多的GPU。要指定GPU索引,请取消注释 export CUDA_VISIBLE_DEVICES=

训练代码

CUDA_VISIBLE_DEVICES=0,1 python train.py --gpus 2 --name wfen --model wfen \
    --Gnorm "bn" --lr 0.0002 --beta1 0.9 --scale_factor 8 --load_size 128 \
    --dataroot /path/to/datasets/CelebA --dataset_name celeba --batch_size 32 --total_epochs 150 \
    --visual_freq 100 --print_freq 10 --save_latest_freq 500

致谢

此代码基于Face-SPARNet构建。我们感谢作者分享他们的代码。

联系方式

如果您有任何问题,请发送电子邮件至lewj2408@gmail.com 或 cswjli@bupt.edu.cn。

### 基于小波多分辨率分析的超分辨技术 基于小波变换的小波多分辨率分析 (Wavelet Multi-Resolution Analysis, WMRA) 是一种强大的工具,在图像处理和计算机视觉领域被广泛应用于特征提取、去噪以及超分辨率重建等问题。WMRA 的核心思想在于通过分解信号到不同尺度的空间来捕捉其局部特性。 #### 小波多分辨率分析基础 小波多分辨率分析是一种分层表示方法,它能够将输入数据逐步细化为低频近似部分和高频细节部分[^3]。这种分解方式使得我们可以针对不同的频率成分应用特定的操作,从而提高计算效率并增强目标效果。 在超分辨率任务中,利用小波变换可以有效地分离出图像中的纹理信息和其他结构化特征。具体来说,通过对原始低分辨率图像进行多次下采样与上采样的交替操作,可以获得一系列具有不同空间分辨率的子带图。这些子带图包含了丰富的边缘和方向性信息,有助于后续模型学习更精细的映射关系。 #### 实现流程概述 以下是基于小波多分辨率分析实现超分辨率的一般框架: 1. **预处理阶段** 输入一幅或多幅低分辨率图像作为初始条件,并对其进行标准化处理以便统一尺寸大小及像素范围。 2. **小波域转换** 使用离散小波变换(DWT),把每张图片投影至多个层次上的系数矩阵集合里。此过程会产生一组逼近子图(approximation sub-images) 和若干组水平/垂直/对角线方向上的差异子图(detail sub-images)[^4]。 3. **放大策略设计** 针对上述得到的各种类型的子区域分别制定相应的扩展方案。对于接近原貌的核心部分可采用简单的复制填充;而对于反映复杂变化趋势的部分则需借助机器学习算法预测缺失的数据点位置及其可能取值。 4. **逆向重构合成** 经过前面几步加工后的各阶次结果重新组合起来形成最终高清晰度版本输出物。这一步骤需要用到对应的IDWT函数完成反演运算恢复完整的RGB色彩通道表达形式。 ```python import pywt import numpy as np from scipy import misc def dwt_upscale(image, scale_factor=2): # Perform DWT decomposition on the input image. coeffs = pywt.wavedec2(image, 'haar') # Upscale each coefficient level by specified factor. upscaled_coeffs = [] for i, coeff_level in enumerate(coeffs[:-1]): if isinstance(coeff_level, tuple): # Detail coefficients at higher levels. cA, (cH, cV, cD) = coeff_level new_cA = np.repeat(np.repeat(cA, scale_factor, axis=0), scale_factor, axis=1) new_cH = np.repeat(np.repeat(cH, scale_factor, axis=0), scale_factor, axis=1) new_cV = np.repeat(np.repeat(cV, scale_factor, axis=0), scale_factor, axis=1) new_cD = np.repeat(np.repeat(cD, scale_factor, axis=0), scale_factor, axis=1) upscaled_coeffs.append((new_cA, (new_cH, new_cV, new_cD))) else: # Approximation coefficients at lowest level. new_coeff = np.repeat(np.repeat(coeff_level, scale_factor, axis=0), scale_factor, axis=1) upscaled_coeffs.append(new_coeff) # Reconstruct the high resolution image from modified coefficients. sr_image = pywt.waverec2(upscaled_coeffs, 'haar') return sr_image.astype('uint8') # Example usage: lena = misc.face(gray=True)[:512,:512] sr_lena = dwt_upscale(lena, scale_factor=2) ``` 以上代码片段展示了如何运用 Python 中 `pywavelets` 库执行二维离散小波变换,并在此基础上构建了一个简易版的单帧图像超分辨率提升程序实例[^5]。 #### 结果评估指标 为了衡量所提方法的有效性和优越性,通常会引入 PSNR(峰值信噪比)、SSIM(结构相似指数测量)等定量评价标准来进行对比测试。此外还可以结合主观视觉质量判断进一步验证实际应用场景下的表现情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值