Lyserg25
Lyserg25

Reputation: 21

Read and preprocess image for tensorflow pretrained model

I don't have much experience in Tensorflow. I am trying to use a pretrained ResNet152 model to get the activations of the last layer as output. The images I use for input are stored on my harddrive. So I need to load the images, preprocess them and then get the output from the pretrained model. I found examples for that using URLs of images but when I try it with image paths I can't get it to work. This is what I have so far (only one image for now):

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])

I am doing this in a Jupyter Notebook. When I execute the code I don't get an error message, it just keeps running and running until I restart the kernel.

Any ideas what I did wrong? And how would I do it for multiple images?

Upvotes: 1

Views: 426

Answers (1)

Lyserg25
Lyserg25

Reputation: 21

I found the solution by replacing the tf.WholeFileReader() with 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)

Upvotes: 1

Related Questions