艺术风格融合的神经网络算法实现
文件列表(压缩包大小 30.05M)
免费
概述
这是 Leon A. Gatys,Alexander S. Ecker和Matthias Bethge撰写的论文“基于神经网络的艺术风格处理”的基于Torch的实现。 此文章提出了一种使用卷积神经网络将一幅图像的内容与另一幅图像的样式相结合的算法。这是一个将《星夜》的艺术风格映射 到斯坦福大学校园夜间照片的示例 : 将不同图像的样式应用于相同的内容图像可获得有趣的结果。
该算法允许用户权衡样式和内容重建术语的相对权重,如本示例所示,在该示例中,将毕加索1907年自画像的样式移植到了布拉德·皮特照片上:
通过在提取样式特征之前调整样式图像的大小,可以控制从样式图像转移来的艺术特征的类型。你可以使用该-style_scale标志控制此操作。下面会看到三个以“星夜”风格渲染金门大桥的示例。从上到下分别-style_scale是2.0、1.0和0.5。
使用多个样式图像时,可以控制它们的融合程度:
如果添加标志,-original_colors 1则输出图像将保留原始图像的颜色
CUDA 6.5+ cunn
cudnn.torch
cltorch clnn 安装依赖项后,需要运行以下脚本来下载VGG模型:
sh models/download_models.sh
此操作将下载原始的VGG-19模型。Leon Gatys提供了他们论文中使用的VGG-19模型的修改版本;这也将被下载。默认情况下,使用原始的VGG-19模型。 如果你的内存GPU较小,则使用NIN Imagenet模型会更好,但效果稍差。你可以从BVLC Caffe ModelZoo获得有关模型的详细信息,并可以从NIN-Imagenet下载文件。 可以在安装指南中找到有关Ubuntu的详细安装说明。
th neural_style.lua -style_image <image.jpg> -content_image <image.jpg>
NCL模型对OpenCL的使用(这需要下载NIN Imagenet模型文件)
th neural_style.lua -style_image examples/inputs/picasso_selfport1907.jpg -content_image examples/inputs/brad_pitt.jpg -output_image profile.png -model_file models/nin_imagenet_conv.caffemodel -proto_file models/train_val.prototxt -gpu 0 -backend clnn -num_iterations 1000 -seed 123 -content_layers relu0,relu3,relu7,relu12 -style_layers relu0,relu3,relu7,relu12 -content_weight 10 -style_weight 1000 -image_size 512 -optimizer adam
要使用多个样式的图像,需要传递以逗号分隔的列表,如下所示:
-style_image starry_night.jpg,the_scream.jpg。
注意,图像路径不应包含~表示主目录的字符;应该改用相对路径或完整的绝对路径。
解决方案:将image包更新为最新版本:luarocks install image
解决方案:-gpu -1在仅CPU模式下运行时 传递标志
解决方案:尝试减小图像尺寸:(-image_size 256或更小)。需要注意的是不同的图像大小可能会需要非默认值-style_weight,并-content_weight以获得最佳效果。如果在GPU上运行,则也可以尝试使用-backend cudnn来减少内存使用。
models/VGG_ILSVRC_19_layers_deploy.prototxt.cpu.lua:7: attempt to call method 'ceil' (a nil value) 解决方案:将nn软件包更新为最新版本:luarocks install nn
解决方案:将torch.paths软件包更新为最新版本:luarocks install paths
解决方案:确保-proto_file选择了正确的。还要确保为-content_layers和-style_layers设置了正确的参数。(请参阅上面的OpenCL使用示例。)
解决方案:添加标志-cudnn_autotune;这将使用内置的cuDNN自动调谐器选择最佳的卷积算法。
默认情况下,neural-style将nn后端用于卷积,将L-BFGS用于优化。这些可以提供良好的结果,但是都可以占用大量内存。可以使用以下方法减少内存使用量:
添加标志-backend cudnn以使用cuDNN后端。这仅适用于GPU模式。
添加标志-optimizer adam以使用ADAM代替L-BFGS。这将显着减少内存使用量,但可能需要调整其他参数才能获得良好结果。特别是,应该考虑学习率,内容权重,样式权重,并考虑使用梯度归一化。这些在CPU和GPU模式下均应工作。
如果以上技巧还不够,可以缩小生成图像的尺寸;传递标志-image_size 256以生成默认大小一半的图像。 在默认设置下,neural-style的系统使用约3.5GB的GPU内存。切换到ADAM和cuDNN可以将GPU内存占用减少到大约1GB。
速度会因后端和优化器而有很大差异。以下是-image_size=512在具有不同设置的Maxwell Titan X上运行500次迭代的一些时间:
以下是在CUDA 8.0 RC上具有cuDNN 5.0的Pascal Titan X上的相同基准:
可以使用多个GPU处理更高分辨率的图像。网络的不同层将在不同的GPU上进行计算。可以控制与该-gpu标志一起使用的GPU ,还可以控制如何使用该-multigpu_strategy标志在GPU之间拆分层。 例如,在具有四个GPU的服务器中,可以赋予该标志-gpu 0,1,2,3以依次处理GPU 0、1、2和3。通过提供标志,-multigpu_strategy 3,6,12指示应该在GPU 0上计算前两层,应该在GPU 1上计算第3至5层,应该在GPU 2上计算第6至11层,其余的应该在GPU上计算3.你需要调整-multigpu_strategy 设置以达到最大分辨率。 如Leon A.Gatys,Alexander S.Ecker,Matthias Bethge,Aaron Hertzmann和Eli Shechtman的论文《控制神经风格转移中的感知因素》所述,可以通过将多GPU处理与多尺度生成相结合来在高分辨率下获得非常高质量的结果。 。 这是在带有四个Pascal Titan X GPU的服务器上生成的3620 x 1905图像:
图像以白噪声初始化并使用L-BFGS优化。 执行使用风格重建的conv1_1,conv2_1,conv3_1,conv4_1,和conv5_1层和使用内容重建conv4_2层。与本文一样,五种风格的重构损失具有相等的权重。
如果你认为此代码对你的研究有用,请引用:
@misc{Johnson2015,
author = {Johnson, Justin},
title = {neural-style},
year = {2015},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/jcjohnson/neural-style}},
}
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)