通过以下代码得到固化后的pb文件
from tensorflow.python.framework import graph_util
···
inputs = tf.placeholder(tf.float32, shape=[None, ···], name='inputs')
···
prediction = tf.nn.softmax(logits, name='prediction')
···
with tf.Session() as sess:
··· <-- 训练过程
graph_def = tf.get_default_graph().as_graph_def()
output_graph_def = graph_util.convert_variables_to_constants(
sess,
graph_def,
['prediction'] <-- 参数:output_node_names,输出节点名
)
with tf.gfile.GFile('./xxx/xxx.pb', 'wb') as fid:
serialized_graph = output_graph_def.SerializeToString()
fid.write(serialized_graph)
然后安装bazel编译tensorflow,使用tensorflow自带工具对模型进行转换
bazel build tensorflow/tools/graph_transforms:summarize_graph #bazel编译tensorflow
bazel-bin/tensorflow/tools/graph_transforms/summarize_graph --in_graph=tensorflow_inception_graph.pb
这种方法能够适用与darknet框架种生成的weight和cfg,然后将weight和cfg转换为ckpt和pb文件,然后固化ckpt和pb得到有图和数据的pb文件,最后用pb2tflite脚本转换为可以使用的tflite文件。可以参考和其中的评论https://www.jianshu.com/p/c9fd5c01715e