示例 #1 — 老站:以 24 位高清查看比较,原始照片 CC-BY-SA @siv-athens。
就像电视上看到的那样!如果您可以使用 CSI 实验室的技术提高照片的分辨率会怎么样?得益于深度学习和#NeuralEnhance
,现在可以训练神经网络将图像放大 2 倍甚至 4 倍。通过增加神经元数量或使用类似于低分辨率图像的数据集进行训练,您将获得更好的结果。
收获是什么?神经网络根据示例图像的训练产生幻觉细节。它不会像高清照片那样完全重建您的照片。这只有在好莱坞才有可能——但使用深度学习作为“创意人工智能”是可行的,而且也同样酷!您可以通过以下方式开始...
主脚本称为enhance.py
,一旦设置如下,您就可以使用Python 3.4+运行它。 --device
参数可让您指定要使用的 GPU 或 CPU。对于上面的示例,以下是性能结果:
默认是使用--device=cpu
,如果您已经使用 CUDA 设置了 NVIDIA 卡,请尝试--device=gpu0
。在 CPU 上,您还可以将环境变量设置为OMP_NUM_THREADS=4
,这在并行运行脚本多次时最有用。
可与 GitHub 版本中提供的预训练模型一起使用的示例命令行列表:
# Run the super-resolution script to repair JPEG artefacts, zoom factor 1:1.
python3 enhance.py --type=photo --model=repair --zoom=1 broken.jpg
# Process multiple good quality images with a single run, zoom factor 2:1.
python3 enhance.py --type=photo --zoom=2 file1.jpg file2.jpg
# Display output images that were given `_ne?x.png` suffix.
open * _ne ? x.png
以下是当前支持的模型、图像类型和缩放级别的列表。
特征 | --model=default | --model=repair | --model=denoise | --model=deblur |
---|---|---|---|---|
--type=photo | 2x | 1x | …… | …… |
GitHub 版本中提供了预训练模型。训练您自己的过程是一个微妙的过程,可能需要您根据图像数据集选择参数。
# Remove the model file as don't want to reload the data to fine-tune it.
rm -f ne ? x * .pkl.bz2
# Pre-train the model using perceptual loss from paper [1] below.
python3.4 enhance.py --train " data/*.jpg " --model custom --scales=2 --epochs=50
--perceptual-layer=conv2_2 --smoothness-weight=1e7 --adversary-weight=0.0
--generator-blocks=4 --generator-filters=64
# Train the model using an adversarial setup based on [4] below.
python3.4 enhance.py --train " data/*.jpg " --model custom --scales=2 --epochs=250
--perceptual-layer=conv5_2 --smoothness-weight=2e4 --adversary-weight=1e3
--generator-start=5 --discriminator-start=0 --adversarial-start=5
--discriminator-size=64
# The newly trained model is output into this file...
ls ne ? x-custom- * .pkl.bz2
示例 #2 — 银行大堂:以 24 位高清查看比较,原始照片 CC-BY-SA @benarent。
最简单的启动和运行方法是安装 Docker。然后,您应该能够使用docker
命令行工具下载并运行预构建的映像。在其 Docker Hub 页面上了解有关alexjc/neural-enhance
映像的更多信息。
这是使用docker
调用脚本的最简单方法,假设您熟悉使用-v
参数来挂载文件夹,则可以直接使用它来指定要增强的文件:
# Download the Docker image and show the help text to make sure it works.
docker run --rm -v ` pwd ` :/ne/input -it alexjc/neural-enhance --help
单个图像- 实际上,我们建议您设置一个名为enhance
的别名,以自动公开包含指定图像的文件夹,以便脚本可以读取它并将结果存储在您可以访问的位置。您可以在 OSX 或 Linux 上的终端控制台中执行此操作:
# Setup the alias. Put this in your .bashrc or .zshrc file so it's available at startup.
alias enhance= ' function ne() { docker run --rm -v "$(pwd)/`dirname ${@:$#}`":/ne/input -it alexjc/neural-enhance ${@:1:$#-1} "input/`basename ${@:$#}`"; }; ne '
# Now run any of the examples above using this alias, without the `.py` extension.
enhance --zoom=1 --model=repair images/broken.jpg
多个图像- 要从文件夹或通配符规范增强一行中的多个图像(更快),请确保引用别名命令的参数:
# Process multiple images, make sure to quote the argument!
enhance --zoom=2 " images/*.jpg "
如果您想在 NVIDIA GPU 上运行,您可以更改别名以使用预装 CUDA 和 CUDNN 的图像alexjc/neural-enhance:gpu
。然后在 nvidia-docker 中运行它,它应该使用您的物理硬件!
该项目需要 Python 3.4+,您还需要numpy
和scipy
(数值计算库)以及系统范围内安装的python3-dev
。如果您需要更详细的说明,请按照以下步骤操作:
获取存储库后,您可以从终端运行以下命令来设置本地环境:
# Create a local environment for Python 3.x to install dependencies here.
python3 -m venv pyvenv --system-site-packages
# If you're using bash, make this the active version of Python.
source pyvenv/bin/activate
# Setup the required dependencies simply using the PIP module.
python3 -m pip install --ignore-installed -r requirements.txt
之后,你应该在你的虚拟环境中安装pillow
、 theano
和lasagne
。您还需要下载这个预先训练的神经网络(VGG19,80Mb)并将其放在与要运行的脚本相同的文件夹中。要卸载所有内容,您只需删除#/pyvenv/
文件夹即可。
示例 #3 - 专门针对面部的超分辨率,仅针对名人面部的高清示例进行训练。一般来说,当缩小“照片”范围时,质量会显着提高。
该代码结合了以下论文中的技术,以及一些尚未记录的细微改进(请观看此存储库以获取更新):
特别感谢他们以各种方式提供的帮助和支持:
有一个名为 Cython 的 Python 扩展编译器,但它丢失或安装不正确。尝试直接从系统包管理器而不是 PIP 获取它。
修复: sudo apt-get install cython3
当您在没有 GPU 的情况下运行并且找不到 CPU 库(例如libblas
)时,就会发生这种情况。 Theano 无法评估神经网络表达式,并且引发异常。
修复: sudo apt-get install libblas-dev libopenblas-dev
您需要直接从requirements.txt
中指定的版本安装Lasagne和Theano,而不是从PIP版本安装。这些替代方案较旧并且不具备所需的功能。
修复: python3 -m pip install -r requirements.txt
您的终端似乎配置错误并且与 Python 处理语言环境的方式不兼容。您可能需要在.bashrc
或其他启动脚本中更改此设置。或者,此命令将为此 shell 实例修复一次。
修复: export LC_ALL=en_US.UTF-8
示例 #4 — 街景视图:以 24 位高清查看比较,原始照片 CC-BY-SA @cyalex。