现有版本的faster-rcnn 模型训练,生成的模型文件保存在out目录下,生成下面四个文件:

                            

android TensorFlow 读取pb tensorflow读取模型_文件名

当我们需要将训练完成的模型用于测试或者运行demo时,我们只需要将某一个snapshot生成的3个*.ckpt.*文件和checkpoint文件全部复制到我们需要使用模型的所在目录即可。使用如下指令即可将模型重新加载,完成模型的继续训练或者后续的验证操作。

_TF/model”文件夹下,我们需要使用的是VGGnet_fast_rcnn_iter_70000这个模型,则在model_path参数应该设置为:"/home/Faster-RCNN_TF/model/VGGnet_fast_rcnn_iter_70000.ckpt",(虽然这个路径下没有这个文件)这样设置完成之后,我们的模型就可以正常加载了。

 需要注意的是,从GitHub上下载训练好的模型,只有一个文件VGGnet_fast_rcnn_iter_70000.ckpt,跟我们通过自己训练后的模型不一样,千万不要试图将上述自己生成的模型文件去掉后缀,改成ckpt文件,这样的结果是导致识别出错。网上开源的模型只是一个ckpt文件的原因是TensorFlow版本升级后,保存机制改变。

TensorFlow提供了一个非常简单的API,即tf.train.Saver类来保存和还原一个神经网络型。                                                              但是,Saver方法已经发生了更改,现在是V2版本,tf.train.Saver(write_version=tf.train.SaverDef.V1)括号里加入该参数可继续使用V1,但会报warning,可忽略,这样的结果是会生成cpkt文件(但是,我没有通从这种方法生成ckpt文件进行识别,以后有时间的时候测试一下。)。若使用saver = tf.train.Saver()则默认使用当前的版本(V2),保存后在save这个文件夹中会出现4个文件,就是上述四个文件。

   下面是我知道的几个文件的信息,仅供参考:


checkpoint

  • 文件保存了一个目录下所有的模型文件列表,这个文件是

tf.train.Saver

  • 类自动生成且自动维护的。在 

checkpoint

  • 文件中维护了由一个

tf.train.Saver

  • 类持久化的所有TensorFlow模型文件的文件名。当某个保存的TensorFlow模型文件被删除时,这个模型所对应的文件名也会从

checkpoint

  • 文件中删除。

checkpoint

  • 中内容的格式为CheckpointState Protocol Buffer.

model.ckpt.meta

  • 文件保存了TensorFlow计算图的结构,可以理解为神经网络的网络结构 
    TensorFlow通过元图(MetaGraph)来记录计算图中节点的信息以及运行计算图中节点所需要的元数据。TensorFlow中元图是由MetaGraphDef Protocol Buffer定义的。MetaGraphDef 中的内容构成了TensorFlow持久化时的第一个文件。保存MetaGraphDef 信息的文件默认以.meta为后缀名,文件

model.ckpt.meta

  • 中存储的就是元图数据。

model.ckpt

  • 文件保存了TensorFlow程序中每一个变量的取值,这个文件是通过SSTable格式存储的,可以大致理解为就是一个(key,value)列表。

model.ckpt

  • 文件中列表的第一行描述了文件的元信息,比如在这个文件中存储的变量列表。列表剩下的每一行保存了一个变量的片段,变量片段的信息是通过SavedSlice Protocol Buffer定义的。SavedSlice类型中保存了变量的名称、当前片段的信息以及变量取值。TensorFlow提供了

tf.train.NewCheckpointReader

  • 类来查看

model.ckpt

  • 文件中保存的变量信息。如何使用

tf.train.NewCheckpointReader

  • 类这里不做说明,自查。


   如果想生成ckpt文件,做以下修改,将lib/fast_rcnn/train.py  文件的 line 42:  self.saver = saver ⇒ self.saver = tf.train.Saver(max_to_keep=100,write_version=tf.train.SaverDef.V1)