通过基于小波的特征增强网络实现高效的人脸超分辨率
人脸超分辨率旨在从低分辨率人脸图像重建出高分辨率人脸图像。以往的方法通常采用编码器 - 解码器结构来提取面部结构特征,然而直接下采样不可避免地会引入失真,尤其是对于像边缘这样的高频特征。
为了解决这一问题,我们提出一种基于小波的特征增强网络。该网络通过使用小波变换将输入特征无损地分解为高频和低频分量,并分别对它们进行处理,以此减轻特征失真。为了提高面部特征提取的效率,我们进一步提出了全域变换器,用于增强局部、区域以及全局的面部特征。这样的设计使得我们的方法无需像以往方法那样堆叠众多模块就能有更好的表现。
实验表明,我们的方法有效地平衡了性能、模型大小和速度。代码链接: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)结果。
注意:测试结果与原始论文略有不同,因为模型权重是在整理代码后重新训练得到的。
- 预训练模型
- 测试数据集
- 原始论文中的FSR结果
- Pretrain_Models
- Test_Datasets
- FSR_Results_in_Orginal_Paper
使用预训练模型进行测试
在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。