Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Convert checkpoints to frozen graph, "ValueError: graph_def is invalid at node u'global_step/Assign': Input tensor 'global_step:0' Cannot convert a tensor of type int32 to an input of type int32_ref." #190

Open
yukaryote opened this issue Jul 28, 2021 · 0 comments

Comments

@yukaryote
Copy link

yukaryote commented Jul 28, 2021

I am using python 3.6 and TF 1.5.0. I downloaded an AVOD checkpoint from the pseudo_lidar repo https://github.com/mileyan/pseudo_lidar, and I am trying to convert the checkpoint to a frozen_graph.pb using this script:

`import tensorflow as tf
import os

meta_path = './checkpoints/pyramid_cars_with_aug_example_scratch_300_val-00120000.meta' # Your .meta file
ckpt_path = './checkpoints/pyramid_cars_with_aug_example_scratch_300_val-00120000'

os.environ["CUDA_VISIBLE_DEVICES"] = '0'

config = tf.ConfigProto()
config.gpu_options.allow_growth = True
config.log_device_placement=True

with tf.Session(config=config) as sess:
# Restore the graph
dir(tf.contrib)
saver = tf.train.import_meta_graph(meta_path)

# Load weights
saver.restore(sess, ckpt_path) #tf.train.latest_checkpoint(ckpt_path))

output_node_names = ['avod_nms/Gather_1', 'avod_nms/Gather_2', 'avod_nms/Gather_3', 'avod_nms/Gather_4', 'avod_nms/Gather_5']

# Freeze the graph
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
    sess,
    sess.graph_def,
    output_node_names)

# Save the frozen graph
with open('frozen_graph.pb', 'wb') as f:
    f.write(frozen_graph_def.SerializeToString())`

However, when I load the frozen_graph.pb using this script:
`import os
import sys
import tensorflow as tf

from tensorflow.python.client import device_lib

dir(tf.contrib)
detection_graph = tf.Graph()
with detection_graph.as_default():
od_graph_def = tf.GraphDef()

with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
    serialized_graph = fid.read()
    od_graph_def.ParseFromString(serialized_graph)
    global_step_tensor = tf.Variable(0, trainable=False, name='global_step')

    # import graph
    tf.import_graph_def(od_graph_def, name='')`

I get this error:
Traceback (most recent call last): File "/home/iyu/racecar/catkin_ws/src/knightrider-racecar/avod_obj_detection/src/model_import_test.py", line 52, in <module> tf.import_graph_def(od_graph_def, name='') File "/home/iyu/.local/lib/python2.7/site-packages/tensorflow/python/util/deprecation.py", line 316, in new_func return func(*args, **kwargs) File "/home/iyu/.local/lib/python2.7/site-packages/tensorflow/python/framework/importer.py", line 648, in import_graph_def node, 'Input tensor %r %s' % (input_name, te))) ValueError: graph_def is invalid at node u'global_step/Assign': Input tensor 'global_step:0' Cannot convert a tensor of type int32 to an input of type int32_ref.

I think the script for freezing the graph is not properly storing global_step as a constant... how would I do this? Or is there a frozen AVOD graph somewhere I could download?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant