Этот репозиторий содержит реализацию PyTorch алгоритма Deep Dream (: ссылка: блог Мордвинцева и др.).
Он имеет полную поддержку использования командной строки и блокнот Jupyter !
И это даст вам возможность создавать эти странные, психоделические изображения:
Неплохо, да?
Я настоятельно рекомендую вам начать с созданного мной блокнота Jupyter!
Примечание. Он довольно большой, ~10 МБ, поэтому может потребоваться несколько попыток, чтобы загрузить его в браузер здесь, на GitHub.
Короче говоря, алгоритм максимизирует активацию выбранных сетевых слоев, выполняя градиентный подъем .
Итак, из входного изображения, подобного изображенному слева после «сновидения», мы получаем изображение справа:
Кто бы сказал, что нейронные сети скрывают внутри себя эту креативность? ?
Большинство исходных репозиториев Deep Dream были написаны в Caffe , а те, что написаны в PyTorch, обычно очень сложны для чтения и понимания. Этот репозиторий представляет собой попытку создать самый чистый репозиторий DeepDream, о котором я знаю + он написан на PyTorch! ❤️
Вот несколько примеров, которые вы можете создать, используя этот код!
Используя более мелкие слои нейронных сетей, вы получите на выходе шаблоны более низкого уровня (края, круги, цвета и т. д.):
Здесь первые два изображения были получены из ResNet50, а последнее — из GoogLeNet (оба предварительно обучены в ImageNet).
Используя более глубокие слои сети, вы получите узоры более высокого уровня (глаза, морды, головы животных):
Первый и третий были созданы с использованием VGG 16 (ImageNet), а средний — с использованием ResNet50, предварительно обученного на Places 365.
Если мы сохраним все остальные параметры такими же, но поменяем предварительно обученные веса, мы получим следующее:
Слева: ResNet50-ImageNet (мы видим больше функций животных). Справа: ResNet50-Places365 (вещи, созданные человеком и т. д.).
Сновидения выполняются на нескольких разрешениях изображений, расположенных «вертикально» (мы называем это пирамидой изображений ).
При движении слева направо единственным параметром, который изменился, был размер пирамиды (слева направо: 3, 7, 9 уровней).
Игра с соотношением пирамид имеет аналогичный/связанный эффект — основная идея заключается в том, что относительная площадь изображения, которую более глубокие нейроны могут изменять и «видеть» (так называемое рецептивное поле сети), увеличивается, и мы становимся все больше и больше. такие особенности, как выскакивание глаз (слева направо: 1.1, 1.5, 1.8):
Примечание. Вы можете увидеть точные параметры, использованные для создания этих изображений, закодированные в имени файла!
Обязательно ознакомьтесь с блокнотом Jupyter! Я подробно это объяснил.
Вот еще несколько примеров, которые вы можете создать с помощью этого кода!
Идея здесь в том, что все, о чем мечтает сеть, просто возвращает это на вход и применяет геометрическое преобразование.
Если мы применим только центральный масштаб, мы получим следующее:
Применение центрального масштабирования и в то же время поворот на 3 градуса для каждого кадра дает следующее:
Наконец, если мы сделаем простой перевод (5 пикселей на кадр сверху слева направо вниз):
Надеюсь, это не сломало вам мозг — похоже на Web 1.0 начала 2000-х. Потерпите меня.
Вместо того, чтобы подавать выходные данные обратно на вход, мы просто применяем алгоритм для каждого кадра и применяем линейное смешивание:
Линейное смешивание просто объединяет текущий кадр с последним, чтобы уменьшить мерцание (здесь я использовал 0,85).
Примечание: все изображения/GIF-файлы DeepDream были созданы мной, авторы оригинальных изображений указаны ниже.
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
conda env create
из каталога проекта (это создаст совершенно новую среду conda).activate pytorch-deepdream
(для запуска сценариев с консоли или настройки интерпретатора в вашей IDE).Вот и все! Он должен работать «из коробки», выполняя файл Environment.yml, который занимается зависимостями.
Примечание. Если вы хотите использовать имеющиеся у меня видеофункции, вам понадобится ffmpeg в вашем системном пути.
Пакет PyTorch pip будет поставляться в комплекте с некоторой версией CUDA/cuDNN, но настоятельно рекомендуется заранее установить общесистемную версию CUDA, в основном из-за драйверов графического процессора. Я также рекомендую использовать установщик Miniconda как способ установить conda в вашу систему. Выполните пункты 1 и 2 этой настройки и используйте самые последние версии Miniconda и CUDA/cuDNN для своей системы.
Просто запустите jupyter notebook
из консоли Anaconda, и он откроет сеанс в браузере по умолчанию.
Откройте The Annotated DeepDream.ipynb
, и вы готовы к игре!
Примечание. Если DLL load failed while importing win32api: The specified module could not be found
Просто выполните pip uninstall pywin32
, а затем либо pip install pywin32
, либо conda install pywin32
должно это исправить!
Вам просто нужно связать созданную вами среду Python в разделе настройки.
Перейдите к своей среде окружения и активируйте ее, если вы используете Anaconda (и я надеюсь, что вы это сделаете), и вы можете использовать команды, которые я привел ниже.
Совет: Поместите изображения/видео в каталог data/input/
и тогда вы сможете просто ссылаться на свои файлы (изображения/видео) по их имени вместо использования абсолютных/относительных путей.
Чтобы создать несколько статических изображений Deep Dream, выполните следующую команду:
python deepdream.py --input <img_name> --img_width 600
Будут использованы настройки по умолчанию, но вы сразу же получите значимый результат, сохраненный в:
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
Примечание. Выходной каталог будет меняться в зависимости от модели и используемых вами предварительно обученных весов.
Чтобы получить готовое 30-кадровое видео Ouroboros , сделайте следующее:
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
Он сохранит промежуточные кадры в data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
и сохранит окончательное видео в data/out-videos
.
Чтобы создать видео Deep Dream, выполните следующую команду:
python deepdream.py --input <mp4 video name>
Он выгрузит промежуточные кадры в data/out-videos/tmp_out
и сохранит окончательное видео в data/out-videos
.
Что ж, наслаждайтесь игрой с этим проектом! Вот некоторые дополнительные, красивые результаты:
Графического процессора с 2+ ГБ будет более чем достаточно.
Вы сможете создавать изображения DeepDream, Ouroboros и видео DeepDream.
Если у вас нет графического процессора, код будет автоматически выполняться на процессоре, но несколько медленнее (особенно для видео).
Если у вас возникли трудности с пониманием DeepDream, я сделал обзор алгоритма в этом видео:
Кроме того, созданный мной блокнот Jupyter — лучшее место для начала!
Я нашел эти репозитории полезными (при разработке этого):
Я нашел изображения, которые использовал здесь:
Другие изображения уже стали классикой в мирах NST и DeepDream.
Предварительно обученные модели Places 365 взяты из этого замечательного репозитория.
Если вы найдете этот код полезным для вашего исследования, укажите следующее:
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
Если вы хотели бы, чтобы в вашей жизни было больше контента, связанного с искусственным интеллектом?, подумайте: