从特征映射重构输入图像进行神经风格转换

2024-10-03 11:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用VGG19模型进行神经风格转换。我试图跟随论文:一种艺术风格的神经算法(https://arxiv.org/pdf/1508.06576.pdf),并尝试使用每个卷积层的特征图重建图像,如下图所示

enter image description here

我已经提取了卷积层的特征图,如下面的代码所示

    vgg = VGG16(include_top = True, weights = "imagenet")
    model_layer_names = ["block1_conv1","block1_conv2","block2_conv1","block2_conv2","block3_conv1","block3_conv2","block3_conv3","block4_conv1",
                 "block4_conv2","block4_conv3","block5_conv1","block5_conv2","block5_conv3"]
    layer_ouputs = [vgg.get_layer(layer).output for layer in model_layer_names]
    viz_model = Model(inputs = vgg.input, outputs = layer_ouputs)
    feature_map_preds = viz_model.predict(style_img)

我能够将特征图绘制为图像。但我想使用功能贴图打印输入图像(如上面的内容和样式表示图像),我无法将通道(64128256512)转换为3个通道。有人能帮我一下吗

非常感谢您的评论和帮助


Tags: 图像layermodelpdfnames特征神经卷积
1条回答
网友
1楼 · 发布于 2024-10-03 11:20:10

我也有同样的问题!我最终找到了答案: 将内容权重设置为零,将样式权重设置为某个较大的正数-我使用了1000,但看看什么适合您。然后使用缩放到0到255之间的白噪声阵列对其进行初始化:

input = np.random.randn(1, 256, 256, 3) * 255

然后,根据要重建的样式级别,设置样式图层的权重。要从conv1重建(第一个样式重建),请使用:

style_layer_weights = [1, 0, 0, 0, 0]

或者要从conv1和conv2(第二种样式重建)重建,请使用:

style_layer_weights = [0.5, 0.5, 0, 0, 0]

然后

for style_feature, target_feature, weight in zip(features, target_features, weights):
    style_score += style_loss(style_feature, target_feature) * weight

然后运行梯度下降,它应该收敛到样式重建

相关问题 更多 >