Чтение и предварительная обработка изображения для предварительно обученной модели с тензорным потоком - PullRequest
0 голосов
/ 27 октября 2018

У меня нет большого опыта в Tensorflow.Я пытаюсь использовать предварительно обученную модель ResNet152 для получения активаций последнего слоя в качестве вывода.Изображения, которые я использую для ввода, хранятся на моем жестком диске.Поэтому мне нужно загрузить изображения, предварительно обработать их, а затем получить выходные данные из предварительно обученной модели.Я нашел примеры для этого, используя URL-адреса изображений, но когда я пробую это с путями к изображениям, я не могу заставить это работать.Это то, что у меня есть (пока только одно изображение):

with tf.Graph().as_default():

    filename_queue = tf.train.string_input_producer(['./testimg/A_008.jpg'])
    reader = tf.WholeFileReader()
    key, value = reader.read(filename_queue)
    image = tf.image.decode_jpeg(value, channels=3)
    preprocessing = preprocessing_factory.get_preprocessing('resnet_v2_152', is_training=False)
    processed_image = preprocessing(image, 299,299)
    processed_images  = tf.expand_dims(processed_image, 0)

    with slim.arg_scope(resnet_v2.resnet_arg_scope()):
        logits, end_points = resnet_v2.resnet_v2_152(processed_images, is_training=False)

    checkpoints_dir='./models/resnet_v2_152' 
    init_fn = slim.assign_from_checkpoint_fn(
        os.path.join(checkpoints_dir, 'resnet_v2_152.ckpt'),
        slim.get_variables_to_restore())

    with tf.Session() as sess:
        init_fn(sess)        
        np_image, fv = sess.run([image, logits])

Я делаю это в блокноте Jupyter.Когда я выполняю код, я не получаю сообщение об ошибке, оно просто продолжает работать и работает, пока я не перезапущу ядро.

Есть идеи, что я сделал не так?И как бы я сделал это для нескольких изображений?

1 Ответ

0 голосов
/ 27 октября 2018

Я нашел решение, заменив tf.WholeFileReader() на tf.read_file():

graph = tf.Graph()

with graph.as_default():
    image_path = image = tf.placeholder(tf.string)
    image = tf.image.decode_jpeg(tf.read_file(image_path), channels=3)
    preprocessing = preprocessing_factory.get_preprocessing('resnet_v2_152', is_training=False)
    processed_image = preprocessing(image, image_size, image_size)
    processed_images  = tf.expand_dims(processed_image, 0)

    with slim.arg_scope(resnet_v2.resnet_arg_scope()):
        logits, end_points = resnet_v2.resnet_v2_152(processed_images, is_training=False)

    checkpoints_dir='./models/resnet_v2_152' 
    init_fn = slim.assign_from_checkpoint_fn(
        os.path.join(checkpoints_dir, 'resnet_v2_152.ckpt'),
        slim.get_variables_to_restore())


images = ['./testimg/A_008.jpg', './testimg/logo.jpg']

with tf.Session(graph=graph) as sess:
    init_fn(sess)  

    for img in images:
        fv = sess.run(logits, feed_dict={image_path: img})
        print(fv)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...