Пример №1 — Старая станция: сравнение просмотров в 24-битном HD, оригинальное фото CC-BY-SA @siv-athens.
Как видно по телевизору! Что, если бы вы могли увеличить разрешение своих фотографий с помощью технологий лабораторий CSI? Благодаря глубокому обучению и #NeuralEnhance
теперь можно научить нейронную сеть увеличивать ваши изображения в 2 или даже в 4 раза. Вы получите еще лучшие результаты, увеличив количество нейронов или обучив набор данных, аналогичный вашему изображению с низким разрешением.
Подвох? Нейронная сеть галлюцинирует детали на основе обучения на примерах изображений. Он не восстанавливает вашу фотографию точно так, как если бы она была в формате HD. Это возможно только в Голливуде, но использование глубокого обучения в качестве «творческого ИИ» работает, и это так же круто! Вот как вы можете начать...
Основной скрипт называется enhance.py
, который вы можете запустить с помощью Python 3.4+ после его настройки, как показано ниже. Аргумент --device
, позволяющий указать, какой графический процессор или процессор использовать. Для приведенных выше образцов приведены результаты производительности:
По умолчанию используется --device=cpu
, если у вас уже установлена карта NVIDIA с CUDA, попробуйте --device=gpu0
. На ЦП вы также можете установить переменную среды 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-битном HD, оригинальное фото CC-BY-SA @benarent.
Самый простой способ начать работу — установить Docker. Затем вы сможете загрузить и запустить предварительно созданный образ с помощью инструмента командной строки docker
. Узнайте больше об образе alexjc/neural-enhance
на его странице Docker Hub.
Вот самый простой способ вызвать скрипт с помощью 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, вместо этого вы можете изменить псевдоним, чтобы использовать образ alexjc/neural-enhance:gpu
, который поставляется с предустановленными CUDA и CUDNN. Затем запустите его в 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, 80 Мб) и поместить ее в ту же папку, что и скрипт для запуска. Чтобы удалить все, вы можете просто удалить папку #/pyvenv/
.
Пример №3 — Специализированное суперразрешение для лиц, обученное только на HD-примерах лиц знаменитостей. Качество значительно выше при сужении домена от «фото» в целом.
Этот код использует комбинацию методов из следующих статей, а также некоторые незначительные улучшения, которые еще не задокументированы (следите за обновлениями в этом репозитории):
Особая благодарность за помощь и поддержку разными способами:
Существует компилятор расширений Python под названием Cython, но он отсутствует или установлен неправильно. Попробуйте получить его непосредственно из системного менеджера пакетов, а не из PIP.
ИСПРАВЛЕНИЕ: sudo apt-get install cython3
Это происходит, когда вы работаете без графического процессора и не найдены библиотеки ЦП (например, libblas
). Выражения нейронной сети не могут быть оценены Theano и вызывают исключение.
ИСПРАВЛЕНИЕ: sudo apt-get install libblas-dev libopenblas-dev
Вам необходимо установить Lasagne и Theano непосредственно из версий, указанных в файле requirements.txt
, а не из версий PIP. Эти альтернативы устарели и не имеют необходимых функций.
ИСПРАВЛЕНИЕ: python3 -m pip install -r requirements.txt
Кажется, ваш терминал неправильно настроен и несовместим с тем, как Python обрабатывает локали. Возможно, вам придется изменить это в своем .bashrc
или другом сценарии запуска. Альтернативно, эта команда исправит это один раз для этого экземпляра оболочки.
ИСПРАВЛЕНИЕ: export LC_ALL=en_US.UTF-8
Пример № 4. Просмотр улиц: сравнение изображений в 24-битном формате HD, исходное фото CC-BY-SA @cyalex.