Ask Your Question
0

I trained a cnn model and save as .pb file. got wrong answer using opencv3.41 dnn module

asked 2018-05-24 22:22:20 -0600

abcrunner gravatar image

updated 2018-05-26 02:30:10 -0600

here is my pb file and some test images.

using tensorflow, got correct prediction

# inference using tensorflow
import tensorflow as tf
import numpy as np
import cv2

x_image = cv2.imread('characters/test_A.jpg', cv2.IMREAD_GRAYSCALE)
x_image = cv2.resize(x_image, dsize=(40, 16))
x_image = x_image / 255.
x_image = x_image.astype(np.float32)


inputBlob = np.reshape(x_image, [-1, 40, 16, 1])

with open('Model/frozen_modelx.pb', 'rb') as f:
    out_graph_def = tf.GraphDef()
    out_graph_def.ParseFromString(f.read())
    tf.import_graph_def(out_graph_def, name="")

    with tf.Session() as sess:
        data = sess.graph.get_tensor_by_name("input/x_input:0")
        prediction = sess.graph.get_tensor_by_name("softmax/prediction:0")

        sess.run(tf.global_variables_initializer())
        x_image_out = sess.run(prediction, feed_dict={data: inputBlob})

        print(x_image_out)
        print(np.argmax(x_image_out, 1))


[[1.6884116e-13 3.1422300e-07 7.3862933e-28 6.9958590e-16 6.0640429e-07
  7.8472853e-12 2.0985551e-07 4.8857016e-17 3.7977627e-19 3.5136532e-21
  9.9999881e-01 1.1159207e-21 9.9667357e-32 1.7269920e-31 7.0009942e-21
  5.0873650e-25 1.1708389e-13 2.7525333e-24 1.1056422e-19 2.8127509e-08
  2.8245915e-14 2.0870798e-23 1.0649909e-11 0.0000000e+00 3.8043613e-11
  1.7576119e-15 7.1381208e-14 7.3414647e-08 2.4327422e-20 9.1099174e-17
  3.2708306e-19 1.3278245e-14 3.0282866e-22 6.0491925e-24]]
[10]

but, using dnn module got wrong prediction

# inference using opencv:  
import numpy as np
import cv2

x_image = cv2.imread('characters/test_A.jpg', cv2.IMREAD_GRAYSCALE)
x_image = cv2.resize(x_image, dsize=(16, 40))
x_image = x_image.astype(np.float32)
x_image = x_image / 255.

# read model and inference
inputBlob=cv2.dnn.blobFromImage(x_image)
net = cv2.dnn.readNetFromTensorflow('model/frozen_modelx.pb')
net.setInput(inputBlob)
result = net.forward()

print(result)
print(np.argmax(result, 1))


[[1.3639329e-02 3.8205376e-01 4.1754208e-10 1.0312299e-08 4.3897840e-01
  2.1898718e-06 1.0198972e-06 1.3872443e-04 1.2519218e-08 3.5530825e-06
  4.7783997e-02 2.8187374e-08 5.5049820e-20 3.5439733e-09 1.4154615e-12
  2.4284447e-15 2.9786484e-06 2.5385313e-07 1.6377919e-08 1.9443828e-06
  5.2226778e-10 3.8744084e-04 1.8799990e-04 1.3955707e-15 1.1665202e-01
  4.2024007e-07 1.0303499e-10 3.1994839e-06 6.9113579e-05 4.2022770e-05
  2.7376987e-05 2.3721248e-05 5.4692578e-07 1.5755222e-10]]
[4]

Can someone help me to indicate where should be modified! Thank you

edit retag flag offensive close merge delete

Comments

1

dsize=(16, 40) in the 2nd example looks wrong to me

berak gravatar imageberak ( 2018-05-25 03:14:04 -0600 )edit

1 answer

Sort by ยป oldest newest most voted
0

answered 2018-05-30 22:05:40 -0600

abcrunner gravatar image

It is my mistake in resizing images during convert my training images to TFRecod file. Thanks for all to notice this issue.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2018-05-24 22:22:20 -0600

Seen: 282 times

Last updated: May 30 '18