PFLD icon indicating copy to clipboard operation
PFLD copied to clipboard

关于模型大小的问题

Open quliulangle opened this issue 6 years ago • 18 comments

各位老哥: 我训练完后模型文件很大 .meta文件有140M .data-00000有8M多

就算转换成.pb文件 也要76M 和作者的模型大了很多呀

有知道怎么优化的呢么

quliulangle avatar Jul 10 '19 07:07 quliulangle

分支网络也可以不用保存

guoqiangqi avatar Jul 10 '19 09:07 guoqiangqi

各位老哥: 我训练完后模型文件很大 .meta文件有140M .data-00000有8M多

就算转换成.pb文件 也要76M 和作者的模型大了很多呀

有知道怎么优化的呢么

转为pb文件没有那么大呀,我的只有8.8MB左右,如果不要辅助网络只有6.9MB左右

liguiyuan avatar Jul 11 '19 09:07 liguiyuan

各位老哥: 我训练完后模型文件很大 .meta文件有140M .data-00000有8M多 就算转换成.pb文件 也要76M 和作者的模型大了很多呀 有知道怎么优化的呢么

转为pb文件没有那么大呀,我的只有8.8MB左右,如果不要辅助网络只有6.9MB左右

转pb之前有多大呢。

guoqiangqi avatar Jul 11 '19 09:07 guoqiangqi

转之前 .meta文件有140M,.data-00000有8.7M,应该是正常的

liguiyuan avatar Jul 11 '19 09:07 liguiyuan

转之前 .meta文件有140M,.data-00000有8.7M,应该是正常的

请问 是按照 output_node_names = "pfld_inference/fc/BiasAdd" 这个节点进行freeze的么

quliulangle avatar Jul 11 '19 09:07 quliulangle

转之前 .meta文件有140M,.data-00000有8.7M,应该是正常的

`def freeze_graph(input_checkpoint,output_graph):

# checkpoint = tf.train.get_checkpoint_state(model_folder) 
# input_checkpoint = checkpoint.model_checkpoint_path 
 # 指定输出的节点名称,该节点名称必须是原模型中存在的节点
output_node_names = "pfld_inference/fc/BiasAdd"
saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)
graph = tf.get_default_graph() # 获得默认的图
input_graph_def = graph.as_graph_def()  # 返回一个序列化的图代表当前的图
 with tf.Session() as sess:
    saver.restore(sess, input_checkpoint) 
    output_graph_def = graph_util.convert_variables_to_constants(  
        sess=sess,
        input_graph_def=input_graph_def,# 等于:sess.graph_def
        output_node_names=output_node_names.split(","))
     with tf.gfile.GFile(output_graph, "wb") as f: 
        f.write(output_graph_def.SerializeToString()) #序列化输出
    print("%d ops in the final graph." % len(output_graph_def.node)) 

`

这是我的转换代码,请问这样转换有什么问题吗?.meta文件有140M,转换后的.pb文件有76M,太大太大了,完全不能移动端使用。

quliulangle avatar Jul 11 '19 14:07 quliulangle

转之前 .meta文件有140M,.data-00000有8.7M,应该是正常的

`def freeze_graph(input_checkpoint,output_graph):

# checkpoint = tf.train.get_checkpoint_state(model_folder) 
# input_checkpoint = checkpoint.model_checkpoint_path 
 # 指定输出的节点名称,该节点名称必须是原模型中存在的节点
output_node_names = "pfld_inference/fc/BiasAdd"
saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)
graph = tf.get_default_graph() # 获得默认的图
input_graph_def = graph.as_graph_def()  # 返回一个序列化的图代表当前的图
 with tf.Session() as sess:
    saver.restore(sess, input_checkpoint) 
    output_graph_def = graph_util.convert_variables_to_constants(  
        sess=sess,
        input_graph_def=input_graph_def,# 等于:sess.graph_def
        output_node_names=output_node_names.split(","))
     with tf.gfile.GFile(output_graph, "wb") as f: 
        f.write(output_graph_def.SerializeToString()) #序列化输出
    print("%d ops in the final graph." % len(output_graph_def.node)) 

`

这是我的转换代码,请问这样转换有什么问题吗?.meta文件有140M,转换后的.pb文件有76M,太大太大了,完全不能移动端使用。

应该是你的代码还有些问题,你可以参考tensorflow 的models/research/slim/export_inference_graph.py 来导出graph,然后再去调用tensorflow/python/tools/freeze_graph.py 来进行冻结

liguiyuan avatar Jul 12 '19 01:07 liguiyuan

现在去掉了训练过程中的test代码,.meta文件变为了136M,还是比较大

quliulangle avatar Jul 12 '19 01:07 quliulangle

转换成.pb过大的问题已解决。目前生成的1.0的pb模型文件5.1M,0.25X的pb模型文件825k

quliulangle avatar Jul 12 '19 07:07 quliulangle

转换成.pb过大的问题已解决。目前生成的1.0的pb模型文件5.1M,0.25X的pb模型文件825k

您好请问下您这个模型过大问题怎么解决的,我现在也遇到了相似的问题

yw2278 avatar Jul 16 '19 06:07 yw2278

各位老哥: 我训练完后模型文件很大 .meta文件有140M .data-00000有8M多 就算转换成.pb文件 也要76M 和作者的模型大了很多呀 有知道怎么优化的呢么

转为pb文件没有那么大呀,我的只有8.8MB左右,如果不要辅助网络只有6.9MB左右 您好想请教下您这是怎么保存成pb文件的,我这边保存也有70mb

yw2278 avatar Jul 17 '19 01:07 yw2278

@quliulangle 我遇到和你同样的问题,请问你是怎么解决的?

Augnine avatar Jul 30 '19 06:07 Augnine

转换成.pb过大的问题已解决。目前生成的1.0的pb模型文件5.1M,0.25X的pb模型文件825k

@quliulangle 您好,我也遇到了这个问题,请问最后是怎么解决的

DeepJake avatar Aug 20 '19 12:08 DeepJake

转换成.pb过大的问题已解决。目前生成的1.0的pb模型文件5.1M,0.25X的pb模型文件825k

请问大神,如何解决的,我的也有这个问题,转完70多兆

tiqq111 avatar Aug 27 '19 09:08 tiqq111

只做graph_util.convert_variables_to_constants的话是有70多M,之后再做一下strip_unused_lib.strip_unused(记得指定一下input_node_names和output_node_names)就只有5点几M了。

YuPeize avatar Aug 30 '19 06:08 YuPeize

转之前 .meta文件有140M,.data-00000有8.7M,应该是正常的

`def freeze_graph(input_checkpoint,output_graph):

# checkpoint = tf.train.get_checkpoint_state(model_folder) 
# input_checkpoint = checkpoint.model_checkpoint_path 
 # 指定输出的节点名称,该节点名称必须是原模型中存在的节点
output_node_names = "pfld_inference/fc/BiasAdd"
saver = tf.train.import_meta_graph(input_checkpoint + '.meta', clear_devices=True)
graph = tf.get_default_graph() # 获得默认的图
input_graph_def = graph.as_graph_def()  # 返回一个序列化的图代表当前的图
 with tf.Session() as sess:
    saver.restore(sess, input_checkpoint) 
    output_graph_def = graph_util.convert_variables_to_constants(  
        sess=sess,
        input_graph_def=input_graph_def,# 等于:sess.graph_def
        output_node_names=output_node_names.split(","))
     with tf.gfile.GFile(output_graph, "wb") as f: 
        f.write(output_graph_def.SerializeToString()) #序列化输出
    print("%d ops in the final graph." % len(output_graph_def.node)) 

` 这是我的转换代码,请问这样转换有什么问题吗?.meta文件有140M,转换后的.pb文件有76M,太大太大了,完全不能移动端使用。

应该是你的代码还有些问题,你可以参考tensorflow 的models/research/slim/export_inference_graph.py 来导出graph,然后再去调用tensorflow/python/tools/freeze_graph.py 来进行冻结

slim/export_inference_graph.py 的参数只有model_name 和 output_file 啊。 您当时转的时候命令是啥,能分享一下吗

starhiking avatar Nov 07 '19 02:11 starhiking

只做graph_util.convert_variables_to_constants的话是有70多M,之后再做一下strip_unused_lib.strip_unused(记得指定一下input_node_names和output_node_names)就只有5点几M了。

您好,请问一下应该怎么指定input_node_names和output_node_names,我现在运行一直提示没有对应的节点,请问该怎么处理?

Sihaiyinan avatar Nov 24 '19 10:11 Sihaiyinan

转换成.pb过大的问题已解决。目前生成的1.0的pb模型文件5.1M,0.25X的pb模型文件825k

您好,打扰了,请问您是怎么解决的?我现在也遇到了同样的问题

fensite avatar Apr 01 '20 07:04 fensite