How to feed Cifar10 trained model with my own image and get label as output?

后端 未结 2 1273
被撕碎了的回忆
被撕碎了的回忆 2021-01-13 21:44

I am trying to use the trained model based on the Cifar10 tutorial and would like to feed it with an external image 32x32 (jpg or png).
My goal is to be able to get

相关标签:
2条回答
  • 2021-01-13 22:31

    Some basics first:

    1. First you define your graph: image queue, image preprocessing, inference of the convnet, top-k accuracy
    2. Then you create a tf.Session() and work inside it: starting the queue runners, and calls to sess.run()

    Here is what your code should look like

    # 1. GRAPH CREATION 
    filename_queue = tf.train.string_input_producer(['/home/tensor/.../inputImage.jpg'])
    ...  # NO CREATION of a tf.Session here
    float_image = ...
    images = tf.expand_dims(float_image, 0)  # create a fake batch of images (batch_size=1)
    logits = faultnet.inference(images)
    _, top_k_pred = tf.nn.top_k(logits, k=5)
    
    # 2. TENSORFLOW SESSION
    with tf.Session() as sess:
        sess.run(init_op)
    
        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(coord=coord)
    
        top_indices = sess.run([top_k_pred])
        print ("Predicted ", top_indices[0], " for your input image.")
    

    EDIT:

    As @mrry suggests, if you only need to work on a single image, you can remove the queue runners:

    # 1. GRAPH CREATION
    input_img = tf.image.decode_jpeg(tf.read_file("/home/.../your_image.jpg"), channels=3)
    reshaped_image = tf.image.resize_image_with_crop_or_pad(tf.cast(input_img, width, height), tf.float32)
    float_image = tf.image.per_image_withening(reshaped_image)
    images = tf.expand_dims(float_image, 0)  # create a fake batch of images (batch_size = 1)
    logits = faultnet.inference(images)
    _, top_k_pred = tf.nn.top_k(logits, k=5)
    
    # 2. TENSORFLOW SESSION
    with tf.Session() as sess:
      sess.run(init_op)
    
      top_indices = sess.run([top_k_pred])
      print ("Predicted ", top_indices[0], " for your input image.")
    
    0 讨论(0)
  • 2021-01-13 22:38

    The original source code in cifar10_eval.py can also be used for testing own individual images as it is shown in the following console output

    nbatfai@robopsy:~/Robopsychology/repos/gpu/tensorflow/tensorflow/models/image/cifar10$ python cifar10_eval.py --run_once True 2>/dev/null
    [ -0.63916457  -3.31066918   2.32452989   1.51062226  15.55279636
    -0.91585422   1.26451302  -4.11891603  -7.62230825  -4.29096413]
    deer
    nbatfai@robopsy:~/Robopsychology/repos/gpu/tensorflow/tensorflow/models/image/cifar10$ python cifar2bin.py matchbox.png input.bin 
    nbatfai@robopsy:~/Robopsychology/repos/gpu/tensorflow/tensorflow/models/image/cifar10$ python cifar10_eval.py --run_once True 2>/dev/null
    [ -1.30562115  12.61497402  -1.34208572  -1.3238833   -6.13368177
    -1.17441642  -1.38651907  -4.3274951    2.05489922   2.54187846]
    automobile
    nbatfai@robopsy:~/Robopsychology/repos/gpu/tensorflow/tensorflow/models/image/cifar10$ 
    

    and code snippet

    #while step < num_iter and not coord.should_stop():
    # predictions = sess.run([top_k_op])
    print(sess.run(logits[0]))
    classification = sess.run(tf.argmalogits[0], 0))
    cifar10classes = ["airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck"]
    print(cifar10classes[classification])
    
    #true_count += np.sum(predictions)
    step += 1
    
    # Compute precision @ 1.
    precision = true_count / total_sample_count
    # print('%s: precision @ 1 = %.3f' % (datetime.now(), precision))
    

    More details can be found in the post How can I test own image to Cifar-10 tutorial on Tensorflow?

    0 讨论(0)
提交回复
热议问题