此存储库包含 Deep Dream 算法的 PyTorch 实现(:链接:Mordvintstev 等人的博客)。
它完全支持命令行使用和Jupyter Notebook !
它将使您能够创建这些奇怪的、迷幻的图像:
不错吧?
我强烈建议您从我创建的 Jupyter 笔记本开始!
注意:它非常大,大约 10 MB,因此可能需要多次尝试才能将其加载到 GitHub 上的浏览器中。
简而言之,该算法通过梯度上升来最大化所选网络层的激活。
因此,从“做梦”后的左侧图像这样的输入图像中,我们得到右侧的图像:
谁会说神经网络隐藏着这种创造力? ?
大多数原始 Deep Dream 存储库都是用Caffe编写的,而用 PyTorch 编写的存储库通常很难阅读和理解。这个仓库是我所知道的最干净的DeepDream 仓库的尝试 + 它是用PyTorch 编写的! ❤️
以下是您可以使用此代码创建的一些示例!
通过使用较浅层的神经网络,您将获得较低级别的图案(边缘、圆形、颜色等)作为输出:
这里,前两张图像来自 ResNet50,最后一张来自 GoogLeNet(均在 ImageNet 上进行了预训练)。
通过使用更深的网络层,您将获得更高级别的模式(眼睛、鼻子、动物头):
第一个和第三个是使用 VGG 16 (ImageNet) 创建的,中间一个使用在 Places 365 上预训练的 ResNet50 创建。
如果我们保持所有其他参数相同但交换预训练权重,我们会得到以下结果:
左: ResNet50-ImageNet (我们可以看到更多动物特征)右: ResNet50-Places365 (人类建造的东西等)。
做梦是在“垂直”堆叠的多个图像分辨率上进行的(我们称之为图像金字塔)。
从左到右,唯一改变的参数是金字塔大小(从左到右:3、7、9 层)。
玩弄金字塔比率具有类似/相关的效果 - 基本思想是更深层次的神经元可以修改和“看到”的图像的相对区域(所谓的网络的感受野)正在增加,并且我们变得越来越大眼睛突出等特征(从左到右:1.1、1.5、1.8):
注意:您可以看到用于创建编码到文件名中的这些图像的确切参数!
请务必查看 Jupyter Notebook!,我已经对此进行了彻底的解释。
以下是您可以使用此代码创建的一些进一步示例!
这里的想法是,无论网络梦想什么,都只需将其反馈到其输入并应用几何变换。
如果我们仅应用中央缩放,我们会得到:
应用中心缩放并同时每帧应用 3 度旋转会产生以下效果:
最后,如果我们做一个简单的平移(从左上角到右下方向每帧 5 px):
希望这些不会让您伤透脑筋——感觉就像 2000 年代初的 Web 1.0。耐心听我说。
我们不将输出反馈回输入,而是每帧应用算法并应用一些线性混合:
线性混合只是将当前帧与上一帧结合起来,以减少闪烁(这里我使用0.85)
注意:所有 Deepdream 图像/GIF 均由我制作,原始图像艺术家的学分如下。
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,主要是因为 GPU 驱动程序。我还建议使用 Miniconda 安装程序作为在系统上安装 conda 的方法。按照此设置的第 1 点和第 2 点进行操作,并为您的系统使用最新版本的 Miniconda 和 CUDA/cuDNN。
只需从 Anaconda 控制台运行jupyter notebook
,它将在您的默认浏览器中打开一个会话。
打开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/
注意:输出目录将根据您使用的模型和预训练权重而变化。
要获取开箱即用的Ouroboros 30 帧视频,请执行以下操作:
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 GB 以上的 GPU 就足够了。
您将能够创建 DeepDream 图像、Ouroboros 和 DeepDream 视频。
如果您没有 GPU,代码将自动在 CPU 上运行,但速度会稍慢(尤其是视频)。
如果您在理解 DeepDream 时遇到困难,我在此视频中概述了该算法:
我创建的 Jupyter Notebook 也是最好的起点!
我发现这些存储库很有用(在开发这个存储库时):
我在这里找到了我使用的图像:
其他图像现在已经成为 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}},
}
如果您希望生活中拥有更多与人工智能相关的内容?请考虑: