固化pb模型(faster rcnn 等一系列都适用)
很多时候在固化模型时会遇到找不到node_names的情况,尤其是使用现成的网络。
训练生成ckpt
使用网络训练后会生成4个ckpt加一个checkpoint文件
使用tensorboard
使用tensorboard可以查看到完整的网络结构,我们需要从ckpt生成tensorboard
graph = tf.get_default_graph()
graphdef = graph.as_graph_def()
tfmodel = os.path.join('default', DATASETS[dataset][0], 'default', NETS[demonet][0]) #ckpt 目录
meta = tfmodel+“meta”
这里需要获取meta的目录
_= tf.train.import_meta_graph(meta)
summary_write = tf.summary.FileWriter("logs", graph)
ok可以在logs中看到生成 events.out.tfevents.1564024320.XXXX 文件,下面就可以启动tensorflow了
在命令行通过:
tensorboard --logdir logs --host localhost --port 6006
启动浏览器,地址栏输入 localhost:6006就可以了,类似这个样子。这里盗张图
这样就可以找到想要的节点了。
很多时候还是懵逼
我们直接在图中打印出来节点信息
同样拿到ckpt目录
tfmodel = os.path.join('default', DATASETS[dataset][0], 'default', NETS[demonet][0]) #ckpt 目录
把网络还原出来
sess = tf.Session(config=tfconfig)
# load network
net = resnetv1(batch_size=1, num_layers=50)
net.create_architecture(sess, "TEST", 3,
tag='default', anchor_scales=[8, 16,
32]) # sess, mode, num_classes, tag=None, anchor_scales, anchor_ratios
saver = tf.train.Saver()
saver.restore(sess, tfmodel)
直接打印
# 获得几乎所有的operations相关的tensor
ops = [o for o in sess.graph.get_operations()]
for o in ops:
print(o.name)
打印出来是这样的
save/Assign_268
save/Assign_269
save/Assign_270
save/Assign_271
save/Assign_272
save/Assign_273
save/Assign_274
save/restore_all
直接在固化函数里使用即可