【干货】神经增强:用 Python 实现深度学习超分辨率处理

【新智元导读】神经网络基于样本图像的训练为模糊图像补充细节,从而把模糊图像变高清。它不能把你的照片重建成一模一样的高清版。这只有好莱坞大片才有可能做到——但使用深度学习和神经增强(Neural Enhance)实现的“创造性 AI”作品同样很酷!

想得到如《犯罪现场调查》中CSI实验室那种提高照片清晰度的技术吗?感谢深度学习和神经增强(#NeuralEnhance)技术,现在已经能够训练一个神经网络把照片放大 2 倍,甚至 4 倍。通过增加神经元数目或使用与你的低分辨率图像相似的数据集进行训练,甚至能得到更好的结果。

神经网络基于样本图像的训练为模糊图像补充细节。它不能把你的照片重建成一模一样的高清版。这只有好莱坞大片才有可能做到——但使用深度学习生成的“创造性 AI”作品同样很酷!以下是教程。

示例 & 用法

例1:老旧的车站

主要的脚本是 enhance.py ,按照以下方式设置后,你可以用 Python3.4+ 来运行。参数 --device 可以让你指定要使用的 GPU 或 CPU。如在上面的例子中,性能结果如下:

  • GPU 渲染 HQ —— 假定你已经设置好 CUDA,并且有足够的在板存储器(on-board RAM)适配图像和神经网络,生成 1080p 输出应该在5秒内完成,或者同时处理多张图像时,每张图像2秒。
  • CPU 渲染 HQ —— 生成 1080p 输出大约需要20~60秒,但在大多数机器上,只要有足够的系统RAM,你可以同时运行4-8进程。运行时间取决于神经网络的规模。

默认情况下使用 --device=cpu ,如果你有已经设计好 CUDA 的 NVIDIA 卡,可以试试 --device=gpu0 。在CPU上,你还可以将环境变量设置为 OMP_NUM_THREADS=4 ,这在多次并行运行脚本时很有用。

1. 增强图像

2. 训练超分辨率

GitHub上提供了预训练模型。自己训练的过程要求精细,可能需要根据你的图像数据集选择参数。

安装 & 设置

例2:银行大厅

1. 使用 Docker Image [推荐]

启动并运行的最简单方式是安装 Docker 。然后,使用 docker 命令行工具应该能够下载并运行预构建的图像。可以在 Docker Hub (https://hub.docker.com/r/alexjc/neural-enhance/) 页面了解有关 alexjc/neural-enhance 图像的更多信息。

  • 单一图像 ——建议你设置一个叫 enhance 的 alias 来自动显示包含指定的图像的文件夹,这样脚本能够读取并把结果存储到可访问的地方。你可以在 OSX 或 Linux 的终端控制台中这样做:
  • 多图像 —— 要从文件夹或通配符规范的行中更快地实现多图像增强,请确保对 alias 命令引用如下参数:

如果你想在 NVIDIA GPU 上运行,你可以改变 alias ,使用兼容 CUDA 和预安装的 CUDNN 的 alexjc/neural-enhance:gpu ,然后在 nvidia-docker 内运行,它应该就使用你自己的物理硬件了。

2. 手动安装 [开发者]

这个项目需要 Python 3.4+,你还需要在全系统安装 numpy 和 scipy (数值计算库)以及 python3-dev 。更详细的说明可以参考以下链接:

  1. Linux Installation of Lasagne (intermediate)
  2. Mac OSX Installation of Lasagne (advanced)
  3. Windows Installation of Lasagne (expert)

然后获取存储库,你可以从终端运行以下命令来设置本地环境:

然后,你应该在虚拟环境中安装 pillow,theano 和 lasagne。你还需要下载这个预训练神经网络(VGG19,80Mb,下载地址:https://github.com/alexjc/neural-doodle/releases/download/v0.0/vgg19_conv.pkl.bz2),并把它放在要运行的脚本的文件夹中。如果要卸载,只需删除 #/pyvenv/ 文件夹即可。

背景 & 研究

例3:脸部的超高清实现,只用高清的名人的脸部照片来训练。缩小“照片”的范围可显著提升质量。

本项目中的代码结合使用了以下论文的技术,以及还有一些小的改进尚未记录进来。

  1. Perceptual Losses for Real-Time Style Transfer and Super-Resolution
  2. Real-Time Super-Resolution Using Efficient Sub-Pixel Convolution
  3. Deeply-Recursive Convolutional Network for Image Super-Resolution
  4. Photo-Realistic Super-Resolution Using a Generative Adversarial Network

特别感谢:Eder Santana,Andrew Brock & Casper Kaae Sønderby

疑难解答

例4:街景

  • 无法安装或找不到 pgen,无法编译形式语法。

有一个 Python 扩展叫 Cython,它缺失了或没有得到正确安装。试试直接从系统包管理器而非 PIP 中找到它。

FIX: sudo apt-get install cython3

  • NotImplementedError: AbstractConv2d theano optimization failed.

这种情况发生在没有 GPU,而且找不到 CPU 库(如 libblas )的情况下。神经网络表达式无法由 Theano 评估,于是引起了异常。

FIX: sudo apt-get install libblas-dev libopenblas-dev

  • TypeError: max_pool_2d() got an unexpected keyword argument 'mode'

你需要安装 requirements.txt 中指定版本的 Lasagne 和 Theano,而不是 PIP 的版本。这些替代方案比较旧,而且缺少所需的功能。

FIX: python3 -m pip install -r requirements.txt

  • ValueError: unknown locale: UTF-8

这是因为你的终端配置出错,与 Python 处理区域设置的方式不兼容。你需要在 .bashrc 或其他启动脚本中更改这个设置,或者,下面的命令能为这个 shell 修复一次。

FIX: export LC_ALL=en_US.UTF-8

编译来源:https://github.com/alexjc/neural-enhance

原文发布于微信公众号 - 新智元(AI_era)

原文发表时间:2016-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

问答 | tensorflow 怎么配置非数据并行分布式?

假设模型有两个conv层和1个fc层,有3台服务器每台各一块显卡,请问要怎么实现把计算图拆成3部分,每块显卡分别计算一个层,而不是把计算图完整复制3份放到3块卡...

26230
来自专栏机器学习算法原理与实践

tensorflow机器学习模型的跨平台上线

    在用PMML实现机器学习模型的跨平台上线中,我们讨论了使用PMML文件来实现跨平台模型上线的方法,这个方法当然也适用于tensorflow生成的模型,但...

23520
来自专栏目标检测和深度学习

Kaggle放大招:简单几步实现海量数据分析及可视化

Kaggle Kerneler bot是一个自动生成的kernel,其中包含了演示如何读取数据以及分析工作的starter代码。用户可以进入任意一个已经发布的项...

7800
来自专栏机器之心

开源 | 浏览器上最快的DNN执行框架WebDNN:从基本特性到性能测评

选自Github 机器之心编译 参与:蒋思源、晏奇 WebDNN 是网页浏览器中最快的 DNN 执行框架,而本文首先简单介绍了 WebDNN 特征与其框架结构...

32960
来自专栏SIGAI学习与实践平台

【免费线上实践】动手训练模型系列:条件GAN

从无序的输出到按照类别输出,Conditional Generative Neural Networks到底借助了什么样的魔(xin)法(xi)?点击下方小程序...

14850
来自专栏人工智能头条

技术 | 机器学习中Python库的3个简单实践——你的图片将由你来创造

【导读】今天为大家介绍机器学习、深度学习中一些优秀、有意思的 Python 库,以及这些库的 Code 实践教程。涉及到的理论与学术内容会附上相应的论文与博客,...

20240
来自专栏落花落雨不落叶

写了个学习正则的小工具

34460
来自专栏企鹅号快讯

重合散点图绘制:neat

hello诸君,暖阳高照,午间一杯清茶,又到了爬虫俱乐部向大家种草新命令新方法的时候啦! 许多同学学到的第一个Stata绘图命令想必就是scatter命令,该命...

29990
来自专栏人工智能

作为TensorFlow的底层语言,你会用C+构建深度神经网络吗?

选自Matrices.io 作者:Florian Courtial 机器之心编译 参与:李泽南、蒋思源 很多人都知道 TensorFlow 的核心是构建在 C+...

29480
来自专栏ATYUN订阅号

将Keras权值保存为动画视频,更好地了解模型是如何学习的

将Keras权值矩阵保存为简短的动画视频,从而更好地理解你的神经网络模型是如何学习的。下面是第一个LSTM层的例子,以及一个经过一个学习周期训练的6级RNN模型...

38140

扫码关注云+社区

领取腾讯云代金券