【问题标题】:Style Transfer in TensorFlowTensorFlow 中的样式迁移
【发布时间】:2017-04-12 12:32:21
【问题描述】:

我无法理解使用 TensorFlow 在风格转移算法中训练内容和风格过滤器的方式(例如 in this paper )。 我已经检查了链接论文中算法的一些实现,但我不能完全理解他们对这一步的处理。为此,我认为在不使用预训练模型的情况下实现一个简单的版本会很有帮助。我对所涉及的步骤的理解是:

  1. 在单个图像上训练 CNN(在论文中他们使用预训练的 VGG 网络)
  2. 使用经过训练的网络,输入白噪声图像。定义一个新的损失函数,通过更新输入图像(这是图像被“绘制”的方式)最小化,例如“内容”是通过最小化训练模型中的卷积层与输入(白噪声)图像产生的卷积层之间的距离得出的

因此,实现应该是这样的:

import TensorFlow as tf

x_in = tf.placeholder(tf.float32, shape=[None, num_pixels], name='x')
y_ = tf.placeholder(tf.float32, shape=[None, num_pixels], name='y')

...

diff = y_-y_out
loss = tf.reduce_sum(tf.abs(diff))  # minimizing 'pixel difference'
train_step = tf.train.AdamOptimizer(1e-4).minimize(loss)
# training model
for i in range(NUM_TRAINING_STEPS):
    _, loss_val = sess.run([train_step, loss], 
                           feed_dict={x_in: input_image, y_: input_image})

训练完模型后,我可以生成一张白噪声图像,但是如何使用训练后的模型来更新我的输入图像?我怀疑我需要创建第二个网络,其中x_in 的类型为tf.Variable,并从训练好的模型中加载权重和偏差,但我无法了解这方面的细节。

【问题讨论】:

    标签: tensorflow conv-neural-network


    【解决方案1】:

    您可以只使用样式转移作为服务站点来训练样式,例如http://somatic.io

    【讨论】:

      【解决方案2】:

      是的,您可以将输入图像存储在 tf.Variable 中,从经过训练的模型中加载权重,然后使用样式转移损失函数对输入变量运行优化循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        • 2020-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多