SuperAPI AI 工具集

Image Super-Resolution

Image Super-Resolution (ISR) 是一个开源项目,目标是对低分辨率图像进行放大并提升质量。项目包含基于 Keras 实现的多种残差密集网络,用于单图像超分辨率,并提供使用内容损失和对抗损失组件训练这些网络的脚本。

访问官网

工具介绍

Image Super-Resolution (ISR) 是一个开源项目,目标是对低分辨率图像进行放大并提升质量。项目包含 Keras 实现的多种残差密集网络(Residual Dense Networks),用于单图像超分辨率(Single Image Super-Resolution, ISR),以及使用内容损失和对抗损失组件训练这些网络的脚本。

主要能力方面,ISR 实现了以下网络:基于 Zhang 等人 2018 年论文《Residual Dense Network for Image Super-Resolution》的超缩放残差密集网络(RDN);基于 Wang 等人 2018 年论文《ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks》的超缩放残差中的残差密集网络(RRDN);用于感知损失中深度特征提取的 Keras VGG19 网络的多输出版本;以及基于 Ledig 等人 2017 年论文《Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network》(SRGANS)的自定义判别器网络。

使用方式上,项目提供 Docker 脚本和 Google Colab 笔记本用于训练和预测。还提供脚本,通过少量命令即可在 AWS 和 nvidia-docker 上进行云端训练。ISR 兼容 Python 3.6,采用 Apache 2.0 许可证分发。安装方式有两种:从 PyPI 安装(推荐)或从 GitHub 源码安装。加载图像并准备后,可加载预训练模型并运行预测。对于大图像预测,为避免内存分配错误,可使用 predict 方法的 by_patch_of_size 选项。训练时,可创建模型并使用所需设置创建 Trainer 对象,传入模型(f_ext 和 discr 为可选)。

预训练网络方面,目前有 4 个模型可用:RDN 的 psnr-large、psnr-small、noise-cancel,以及 RRDN 的 gans。网络参数会自动选择。RDN 模型由 PSNR 驱动,创建 RDN 模型时选择 weights='psnr-large' 或 weights='psnr-small'。RRDN 模型使用对抗和 VGG 特征损失训练,创建 RRDN 模型时选择 weights='gans'。RDN 模型使用对抗和 VGG 特征损失训练,创建 RDN 模型时选择 weights='noise-cancel'。

RDN 预训练权重:在 DIV2K 数据集上训练的 RDN 网络权重位于 weights/sample_weights/rdn-C6-D20-G64-G064-x2/PSNR-driven/rdn-C6-D20-G64-G064-x2_PSNR_epoch086.hdf5。模型使用 C=6, D=20, G=64, G0=64 作为参数,训练了 86 个 epoch,每个 epoch 包含 1000 个批次,每批 8 个从低分辨率图像中提取的 32x32 增强补丁。使用不同数据集和 VGG19 与 GAN 感知损失组合训练得到的 artefact cancelling 权重位于 weights/sample_weights/rdn-C6-D20-G64-G064-x2/ArtefactCancelling/rdn-C6-D20-G64-G064-x2_ArtefactCancelling_epoch219.hdf5。建议仅在需要消除压缩伪影时使用这些权重。

网络架构方面,RDN 网络架构主要参数包括:D 为残差密集块(RDB)的数量;C 为 RDB 内堆叠的卷积层数量;G 为 RDB 内每个卷积层的特征图数量;G0 为 RDB 外部卷积和每个 RDB 输出的特征图数量。RRDN 网络架构主要参数包括:T 为残差中的残差密集块(RRDB)的数量;D 为每个 RRDB 内残差密集块(RDB)的数量;C 为 RDB 内堆叠的卷积层数量;G 为 RDB 内每个卷积层的特征图数量;G0 为 RDB 外部卷积和每个 RDB 输出的特征图数量。

训练建议方面,当训练自己的模型时,先从仅使用 PSNR 损失开始(50 个以上 epoch,取决于数据集),然后再引入 GANS 和特征损失,这可以通过损失权重参数控制。如果加载自己的权重或预训练权重时遇到问题(AttributeError: 'str' object has no attribute 'decode'),可尝试相应解决方案。

项目欢迎各种贡献,包括在不同数据集上训练的模型、新的模型架构和/或超参数组合,以提高当前发布模型的性能。新模型的性能将在此仓库中发布。详细信息参见贡献指南。如需提升版本,可使用相应命令。如果该工作有助于研究,请在出版物中引用。作者为 Francesco Cardinale (github: cfrancesco) 和 Dat Tran (github: datitran)。详见 LICENSE。