Neural Style 中使用其他的神经网络模型
-
Taylor Guo, 2017年5月31日
图像风格转移中VGG-19和NIN模型都可以用,还有其他的模型也可以使用。这里就把它们列出来,说明它们能做什么,什么时候使用它们,怎么样使用,它们的性能怎么样,去哪下载。
神经网络模型
神经网络模型比较复杂,有人认为这是人工智能的开始,有人认为这些只是一些小技巧。但对神经网络风格转移,它们可以将图像转移为人画的。
训练好的模型 与 未训练的模型
在神经网络风格转移中,神经网络需要用图像进行训练才能使用。这类似于计算机没有软件或有软件的差别,也就是一个神经网络结构和完全训练好的模型的区别。
比如,VGG 19,是指一个用prototxt文件定义好的神经网络结构。谈到神经网络风格转移时,VGG 19模型就指的是一个在ILSVRC图像数据集上用以对图像进行分类任务上训练好的网络。应该可以注意到,如果VGG 19网络训练任务不同,会使得它们在神经风格转移中表现也有所不同。一个用不同数据训练好的模型对图像中特征的响应也会不同。这里将会讲解VGG 16和VGG 19上几个不同的训练模型。它们有相同的结构(VGG 16 或 VGG 19, 所以有相同的prototxt文件),但.caffemodel文件中包含的权重是不同的,导致模型以不同的方式工作。权重指的是影响人工神经元运行的权重,而不是神经网络风格转移中的权重参数。
安装新模型
神经网络风格转移可以以.caffemodel格式的模型方式工作,除非它们包含的特征是torch不支持的,(比如AlexNet需要GROUP)。
一个模型有两个文件:一个.caffemodel 和一个 .prototxt ,.caffemodel 文件就是模型本身, .prototxt描述的是神经网络的结构。这些模型可以拷贝到任何神经网络风格转移项目的目录中,推荐把它们拷贝到主项目的/model目录下,使得文件更有组织一些。如果要拷贝到别处,需要修改命令。
注意:如果要用更多的模型做实验,在/models目录下创建子目录会更好一些,因为没有约定俗成的方式来命名模型,所以可能会找到几个不同的文件称为model.caffemodel和train.prototxt。
基本使用
为了使用刚安装的模型,需要用参数-model_file models/[modelname]和-proto_file models/[protoname]来调用它们,其中 [modelname] 和[protoname]是完整的文件名带扩展名。
然后,用 -content_layers 和-style_layers 参数,调用不同的层,每个模型要调用哪个层可能会有差别。也可以在.prototxt文件中查看哪个层被调用了。比如:
layers {
bottom: "conv1_1"
top: "conv1_1"
name: "relu1_1" // 这里的名字是: -content_layers 或 -style_layers
type: RELU // 需要做 RELU 的类型
}
写下所有的类型:ReLU层,用逗号分开,应该像这个样子:
-content_layers relu2,relu5,relu8,relu11 -style_layers relu2,relu5,relu8,relu11
注意:必须对内容和风格调用相同的层。
可以根据需要或想要做的实验,随意使用或忽略内容和风格。但是必须明确给风格和内容指定层。注意:越高的层可能损失值越小,所以当需要增加内容权重时,需要忽略比较低的层。
NIN 例子
th neural_style.lua -style_image [image1] -content_image [image2] -output_image [outimage] -model_file models/nin_imagenet_conv.caffemodel -proto_file models/train_val.prototxt -content_layers relu0,relu3,relu7,relu12 -style_layers relu0,relu3,relu7,relu12
模型列表
模型描述:
模型文件: fullmodelname.caffemodel
prototxt文件: fullprotoname.prototxt
使用的Layers: relulayer#, relulayer#, relulayer#, relulayer#, relulayer#
命令:
th neural_style.lua -style_image [image1] -content_image [image2] -output_image [outimage] -model_file models/fullmodelname.caffemodel -proto_file models/fullprotoname.prototxt -content_layers relulayer#,relulayer#,relulayer#,relulayer#,relulayer# -style_layers relulayer#,relulayer#,relulayer#,relulayer#,relulayer#
牛津视觉几何组VGG-19
神经网络风格转移中的标准caffemodel。无需调整就能做出好的结果,但需要使用大量小图片。
标准化版本如下:
Model file: VGG_ILSVRC_19_layers.caffemodel 或 vgg_normalised.caffemodel
Proto file: VGG_ILSVRC_19_layers_deploy.prototxt
Layers used: relu1_1,relu2_1,relu3_1,relu4_1,relu5_1
DeepLab的DeepLab Pre-Trained Model
图像使用量与VGG-16相当。如果只使用3层网络,结果与PASCAL VOC FCN-32s类似,但可以生成更高分辨率的图像。
Model file: model.caffemodel
Proto file: deploy_x30.prototxt
Layers used: relu5_3,relu7,relu5_2,relu5_1,relu4_1,relu3_3,relu3_1,relu2_2,relu1_2,relu1_1