Tensorflow Image Translator (Pix2Pix) - PullRequest
       3

Tensorflow Image Translator (Pix2Pix)

0 голосов
/ 27 августа 2018

Мне нужна помощь с этим проектом TensorFlow. Я хотел бы перепрограммировать что-то вроде Pix2Pix. Я столкнулся с некоторыми проблемами, особенно при чтении изображений и определении графика TensorFlow. Но сначала я создал папку («Source /»), в которой есть много картинок разных размеров. Теперь CNN обучают превращать изображение «.jpg» в изображение «.JPG». «Jpg» и «JPG» имеют одинаковую высоту, ширину и глубину (RGB). Тем не менее, «JPG» отличается по своей структуре от «JPG» (как и в Pix2Pix). Я думаю, что мои проблемы возникают во время обучения, и у меня есть «неправильный» график TensorFlow (тот, который должен быть улучшен). Вот мой текущий код:

import os
import tensorflow as tf
import tensorflow.contrib.layers as lays

from random import shuffle

learnrate = 0.1
batch_size = 32

Source = "Source/"
files = []
for file in os.listdir(Source):
    if file.endswith(".jpg"):
        files.append(Source + file)
shuffle(files)

filenames = tf.constant(files)

safe_name = "test"

data = tf.data.Dataset.from_tensor_slices((filenames,filenames))

data = data.map(parse)
data = data.batch(batch_size)

def autoencoder(inputs):
    # encoder
    net = lays.conv2d(inputs, 3, [5, 5], stride=1, padding='SAME')
    net = lays.conv2d(net, 6, [5, 5], stride=2, padding='SAME')
    net = lays.conv2d(net, 12, [5, 5], stride=4, padding='SAME')
    # decoder
    net = lays.conv2d_transpose(net, 12, [5, 5], stride=4, padding='SAME')
    net = lays.conv2d_transpose(net, 6, [5, 5], stride=2, padding='SAME')
    net = lays.conv2d_transpose(net, 3, [5, 5], stride=1, padding='SAME', activation_fn=tf.nn.tanh)
    return net

print(files)

ae_inputs = tf.placeholder(tf.float32, (None, 480, 270, 3))
ae_outputs = autoencoder(ae_inputs)

loss = tf.reduce_mean(tf.square(ae_outputs - ae_inputs))
train_op = tf.train.AdamOptimizer(learning_rate=learnrate).minimize(loss)

init = tf.global_variables_initializer()

with tf.Session() as sess:

    saver = tf.train.Saver()

    for x in range(0, 1000):
        iterator = data.make_one_shot_iterator()
        images, labels = iterator.get_next()
        sess.run(init)
        sess.run([images, labels])

    file_path = os.path.dirname(os.path.abspath(__file__)) + "/data/" + str(safe_name) + ".ckpt"
    saver.save(sess, file_path)
    print("Safe File! - Training done!")

def parse(filename,filenames):
    image_string = tf.read_file(filename)
    image_decoded = tf.image.decode_jpeg(image_string, channels=3)
    image = tf.cast(image_decoded, tf.float32)
    label_string = tf.read_file(filename.replace(".jpg", ".JPG"))
    label_decoded = tf.image.decode_jpeg(label_string, channels=3)
    label = tf.cast(label_decoded, tf.float32)
    return image, label

Что я могу сделать, чтобы улучшить свои результаты? И что я на самом деле сделал неправильно при определении графика / остальной части кода? Возможно, есть хорошо понятный пример, когда кто-то запрограммировал Pix2Pix в TensorFlow и в котором вы также можете использовать свои собственные изображения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...