图像超分辨率项目帮你「拍」出高清照片

相机不够算法凑,拥有超级拍照能力的手机也离不开算法的加持。本文介绍的图像超分辨率项目可以帮你补齐相机镜头的短板。

华为 P30 发布会上展示的埃菲尔铁塔高清远距离照片

今天,一位 Reddit 网友贴出了自己基于 Keras 的图像超分辨率项目,可以让照片放大后依然清晰。先来看一下效果。

放大数倍后,照片中的蝴蝶(蛾子?)依然没有失真,背上的绒毛清晰可见

作者表示,该项目旨在改善低分辨率图像的质量,使其焕然一新。使用该工具可以对图像进行超级放缩,还能很容易地在 RDN 和 GAN上进行实验。

该项目包含不同残差密集网络的 Keras 实现,它们可用于高效的单图像超分辨率(ISR)。同时作者还提供了各种文档资料以帮助训练模型,包括如何使用对抗损失组件训练这些网络。

项目示例

这些示例使用的放大因子(upscaling factor)为 2,即像素数扩大两倍。大家可在 sample_weights 中查看生成示例图像的权重,它们存储在 git lfs 上。如要下载这些权重,你需要先复制该 repo,然后运行 git lfs pull。

左图为原始的低分辨率图像,中间图为该网络的输出结果,右图为使用 GIMP bicubic scaling 得到的基线模型放大结果。

下面是不同方法作用于噪声图像的效果对比,这些方法分别是:使用 bicubic scaling 的基线模型、使用像素级内容损失函数训练的 RDN 网络,以及使用 VGG19 内容压缩数据集和损失函数进行重训练的 RDN 网络。该 repo 包含这些模型的权重。

Bicubic up-scaling(基线模型)的输出结果示例使用像素级内容损失函数训练的 RDN 网络的输出结果示例使用 VGG 内容和对抗损失组件训练的 RDN 网络的输出结果示例

超分辨率项目有什么

前面展示的超分辨率效果都是根据该项目实现的不同模型做出来的。超分辨率希望根据已有的图像信息重构出缺失的图像细节,它通常借助卷积神经网络抽取图像信息,再通过转置卷积将这些信息扩展到希望获得的图像分辨率。

在这个项目中,作者新增了很多模块与特征,例如使用 VGG 与 GAN 实现真实的放大图像。该项目主要实现的是 RDN 与 RRDN 网络,且同时还提供了预训练权重和 Colab 教程。不论是训练还是推断,根据这些资料我们都可以快速上手。

此外,该项目目前已经可以发布到 PyPI 上了,因此安装也只需键入 pip 命令即可。

总而言之,整个项目实现了三个超分辨率网络,且采用了 Keras 版的 VGG-19 作为特征抽取模块。如下所示为三个超分辨率网络的相关研究:

  • Residual Dense Network for Image Super-Resolution(Zhang et al. 2018, arXiv:1802.08797)
  • ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks(Wang et al. 2018, arXiv:1809.00219)
  • Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network(SRGANS, Ledig et al. 2017, arXiv:1609.04802)

如果我们想要生成上面那样的高清图,该项目还提供了一系列的资源:

超分辨率项目怎么用

你可以选择两种方式安装图像超分辨率(ISR)包。

从 PyPI 中安装 ISR(推荐):

pip install ISR

从 GitHub 源安装 ISR:

git clone https://github.com/idealo/image-super-resolution

cd image-super-resolution

python setup.py install

预测

如果我们需要扩展低像素图像,简单两步就能借助 ISR 执行超分辨率。首先加载图像并做一定的预处理:

import numpy as npfrom PIL import Image

img = Image.open(‘data/input/test_images/sample_image.jpg‘)
lr_img = np.array(img)/255.
lr_img = np.expand_dims(lr_img, axis=0)

加载模型并执行预测:

from ISR.models import RDN

rdn = RDN(arch_params={‘C‘:6, ‘D‘:20, ‘G‘:64, ‘G0‘:64, ‘x‘:2})
rdn.model.load_weights(‘weights/rdn-C6-D20-G64-G064-x2_enhanced-e219.hdf5‘)

sr_img = rdn.model.predict(lr_img)[0]
sr_img = sr_img.clip(0, 1) * 255
sr_img = np.uint8(sr_img)
Image.fromarray(sr_img)

训练

如果需要使用你的数据集重新训练超分辨率模型,那我们也只需要改一改参数。如下首先创建模型:

from ISR.models import RRDN
from ISR.models import Discriminator
from ISR.models import Cut_VGG19

lr_train_patch_size = 40
layers_to_extract = [5, 9]
scale = 2
hr_train_patch_size = lr_train_patch_size * scale

rrdn  = RRDN(arch_params={‘C‘:4, ‘D‘:3, ‘G‘:64, ‘G0‘:64, ‘T‘:10, ‘x‘:scale}, patch_size=lr_train_patch_size)
f_ext = Cut_VGG19(patch_size=hr_train_patch_size, layers_to_extract=layers_to_extract)
discr = Discriminator(patch_size=hr_train_patch_size, kernel_size=3)

创建 Trainer 对象,并将训练的各种配置传递到该对象中:

from ISR.train import Trainer

loss_weights = {
  ‘generator‘: 0.0,
  ‘feat_extr‘: 0.0833,
  ‘discriminator‘: 0.01,
}

trainer = Trainer(
    generator=rrdn,
    discriminator=discr,
    feature_extractor=f_ext,
    lr_train_dir=‘low_res/training/images‘,
    hr_train_dir=‘high_res/training/images‘,
    lr_valid_dir=‘low_res/validation/images‘,
    hr_valid_dir=‘high_res/validation/images‘,
    loss_weights=loss_weights,
    dataname=‘image_dataset‘,
    logs_dir=‘./logs‘,
    weights_dir=‘./weights‘,
    weights_generator=None,
    weights_discriminator=None,
    n_validation=40,
    lr_decay_frequency=30,
    lr_decay_factor=0.5,
    T=0.01,
)

开始训练:

trainer.train(
    epochs=80,
    steps_per_epoch=500,
    batch_size=16,
)

网络架构与超参数

实际上,如果我们需要重新训练,那么还需要了解具体的参数都表示什么。这一部分介绍了各超分辨率网络的架构与对应超参数。

RDN 网络架构

RDN 网络架构的主要参数如下:

  • D:残差密集块(RDB)数量
  • C:RDB 内部堆叠的卷积层数量
  • G:RDB 内部每一卷积层的特征图数量

图源:https://arxiv.org/abs/1802.08797

RRDN 网络架构

RRDN 架构的主要参数如下:

  • T:残差密集块内的残差数量(RRDB)
  • D:每一 RRDB 内部的残差密集块(RDB)的数量
  • C:RDB 内部堆叠的卷积层数量
  • G:RDB 内部每一卷积层的特征图数量

图源:https://arxiv.org/abs/1809.00219

原文地址:https://www.cnblogs.com/alan-blog-TsingHua/p/10611547.html

时间: 2024-07-30 14:34:18

图像超分辨率项目帮你「拍」出高清照片的相关文章

JPEG压缩图像超分辨率重建算法

压缩图像超分辨率重建算法学习 超分辨率重建是由一幅或多幅的低分辨率图像重构高分辨率图像,如由4幅1m分辨率的遥感图像重构分辨率0.25m分辨率图像.在军用/民用上都有非常大应用. 眼下的超分辨率重建方法主要分为3类:基于插值.基于学习.基于重建的方法.现在已经研究得比較多.可是大多数算法都是对普通图像进行研究,针对压缩图像/视频超分辨率重建的研究比較少.近期查阅部分文献.进行了学习.在此做些总结. 相关的文献: 1.Super-resolution from compressed video 2

[转]图像超分辨率重建简介

图像超分辨率重建技术就是利用一组低质量.低分辨率图像(或运动序列)来产生单幅高质量.高分辨率图像.图像超分辨率重建应用领域及其宽广,在军事,医学,公共安全,计算机视觉等方面都存在着重要的应用前景.在计算机视觉领域,图像超分辨率重建技术有可能使图像实现从检出水平(detection level)向识别水平(recognition level)的转化,或更进一步实现向细辨水平(identification level)的转化.图像超分辨率重建技术可以提高图像的识别能力和识别精度.图像超分辨率重建技术

【超分辨率专题】—基于深度学习的图像超分辨率最新进展与趋势

1.简介 图像超分辨率是计算机视觉和图像处理领域一个非常重要的研究问题,在医疗图像分析.生物特征识别.视频监控与安全等实际场景中有着广泛的应用.随着深度学习技术的发展,基于深度学习的图像超分方法在多个测试任务上,取得了目前最优的性能和效果.本文介绍的一篇综述(Deep Learning for Image Super-resolution:A Survey)给出了一个统一的深度学习视角,来回顾最近的超分技术进展,主要包括三个方面: 给出了综合性的基于深度学习的图像超分技术综述,包括问题设置.数据

基于自相似的单幅图像超分辨率放大

先放上处理效果 小图像: 放大4倍的图像: 参考论文:http://www.cs.huji.ac.il/~raananf/projects/lss_upscale/ 应用: 可用于常用小幅图像的放大处理,也可应用于标清视频向高清/超高清视频的放大显示处理.相比于常用的bilinear.bicubic.window sinc等算法,可得到清晰度更高的效果. 缺点: 由于作者未公开代码,因此按照论文实现的效果,与作者给出的放大同等倍数效果仍存在一些差异,后续还需要研究.

图像超分辨率重建之srcnn,基于tensorflow实现

本篇适用人群对于那些知道srcnn的每个步骤的人但是不是很会打代码的人 首先,附上我的github:https://github.com/zzydashuaibi/srcnn_tensorflow 在写代码之前,我们需要明白一件事就是我们每一次训练实际上是训练图片的某一部分(33*33)最后输出的是卷积后的大小只有22*22,所以srcnn的预处理要比其他的图像重建的模型要复杂一点. 他除了一般的预处理操作,还需要将图片分割,最后的训练完还做实验的时候还需要将图片结合起来,至于其他的,相信你自己

Google 超分辨率技术 RAISR

每天都有数以百万计的图片在网络上被分享.储存,用户借此探索世界,研究感兴趣的话题,或者与朋友家人分享假期照片.问题是,大量的图片要嘛被照相设备的像素所限制,要嘛在手机.平板或网络限制下被人为压缩,降低了画质. 如今高分辨率显示屏幕正在家庭和移动设备上普及,因此,把低分辨率图片转化为高清晰版本,并可在多种设备上查看和分享,正在成为一项巨大的需求.日前,Google 推出了一项新技术 RAISR,其全称是"Rapid and Accurate Image Super-Resolution"

基于学习的超分辨率算法

基于学习的超分辨率技术最早是由卡耐基一梅隆实验室的 Baker S在2000年提出的.他们提出一种基于识别先验 知识的方法,通过算法去学习训练指定类别,将得到的先验 知识用于超分辨率.随后,多伦多大学的 Hertzmann a等提 出了基于多尺度自动回归的图像类比算法.麻省理工学院的 Freeman WT5等提出了一个基于例子的方法,利用马尔可夫 网络来学习训练库中与低分辨率图像不同区域相对应的高分 辨率图像的细节,再用学习得到的关系来预测输入低分辨率 图像的细节信息. Christopher

「wxParser」小程序插件:想在小程序中快速部署富文本?这个插件让你一步搞定

上期,我们在<「微信同声传译」小程序插件:快速实现语音转文字.文本翻译.语音合成等能力>一文中介绍了「微信同声传译」小程序插件的意义.作用以及应用.而在此之前,我们还介绍过「腾讯地图」.「腾讯视频」.「医院 LBS 位置服务」插件,有兴趣了解的读者可以点击「微信极客WeGeek」公众号底部菜单「极客干货 - 小程序插件」了解. 今天我们为大家推荐的是一款富文本渲染插件「wxParser」,目前 wxParser 支持对一般的富文本内容包括标题.字体大小.对齐和列表等进行解析.同时也支持表格.代

用一个玩具例子说明基于视频的超分辨率重建的基本思想

本文是基于知乎上的一个答案 基于视频的超分辨率重建是指从许多帧连续的低分辨率图像中重建出一幅高分辨率的图像,并且这幅高分辨率的图像能够显示出单帧低分辨率图像中丢掉的细节,比如下面是一个2秒视频(176x144)中的一帧: 为了方便和分辨率重建之后的图片对比,用Nearest Neighbor放大到了704x576.而下面是重建后的超分辨率图像: 可以看到,许多丢失的细节被重建了,这就是基于视频序列的超分辨率重建. 接下来用一个玩具例子来说明基本原理,首先打开画图板,写下一个线条分明,软绵无力,面