Как передавать изображения через предварительно обученную сеть TensorFlow-Slim VGG в пакетном режиме?

Я хочу передать изображения по сети для задачи обучения переносу. В следующем коде я строю график, а затем получаю выходные данные полностью связанного слоя. Я хотел получить выходные данные партиями, потому что у меня есть массив с более чем 20k изображений.

vgg.vgg_16(images) требуется images быть массивом изображений. Я пытался подать заполнитель ввода (после просмотра документов), но при загрузке контрольной точки я получил ошибку There are no variables to save,

Я могу кормить vgg.vgg_16(images) несколько изображений одновременно, но мне нужно будет загрузить контрольную точку для каждой партии. Я уверен, что есть лучший способ сделать это. Есть ли примеры или ссылки, на которые я могу посмотреть?

from tensorflow.contrib import slim
from tensorflow.contrib.slim.nets import vgg

images = np.array(read_images(val_filenames[:4], 224, 224), dtype=np.float32) # load images and resize to 224 x 224


vgg_graph = tf.Graph()

with vgg_graph.as_default():
    with slim.arg_scope(vgg.vgg_arg_scope()):
        outputs, end_points = vgg.vgg_16(images, is_training=False)

    fc6 = end_points['vgg_16/fc6']


with tf.Session(graph=vgg_graph) as sess:
    saver = tf.train.Saver()
    saver.restore(sess, 'checkpoints/vgg_16.ckpt')

    # pass images through the network
    fc6_output = sess.run(fc6)

Я также попробовал это и это ссылки, но я не нашел ответы.

1 ответ

Решение

Вы можете создать placeholder что вы можете передать его vgg сеть. Измените свой код на:

images = tf.placeholder(tf.float32, shape=[batch_size, height, width, channels])

with slim.arg_scope(vgg.vgg_arg_scope()):
    outputs, end_points = vgg.vgg_16(images, is_training=False)

и во время обучения передайте вход в сеть:

fc6_output = sess.run(fc6, feed_dict={images:batch_images})
Другие вопросы по тегам