WARNING:root:Variable [resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/BatchNorm/beta] is not availab

在使用object detection api 进行ssd相关训练时发生错误,显示加载模型里检查点找不到。
遇到这个问题有点懵,官方的也会有错。。。
依照网上的方法将检查点输出检查

import tensorflow as tf
from tensorflow.python.tools.inspect_checkpoint import print_tensors_in_checkpoint_file

# latest_ckp = tf.train.latest_checkpoint('/faster_rcnn_inception_v2_coco_2018_01_28')
latest_ckp = tf.train.latest_checkpoint('/ssd_resnet50_v1_fpn_shared_box_predictor_640x640_coco14_sync_2018_07_03')
print_tensors_in_checkpoint_file(latest_ckp, all_tensors=True, tensor_name='')

在这里插入图片描述
确实时名称对不上的问题,依据https://www.cnblogs.com/YouXiangLiThon/p/9506181.html的方法查看源码,人家官方已经修正完成了。

    variables_to_restore = {}
    for variable in tf.global_variables():
      var_name = variable.op.name
      if var_name.startswith(feature_extractor_scope + '/'):
        var_name = var_name.replace(feature_extractor_scope + '/', '')
variables_to_restore[var_name] = variable

这就更奇怪了,为什么修正了还有问题呢。。。
后来在这里找到了答案:https://github.com/tensorflow/models/issues/4940
还是很严谨的,需要在检查点检查时选择true,也就是加入 from_detection_checkpoint: true 这样就会去调用上面写好的函数了。
如果该项写false,那么意味着重新开始训练。也就是说按道理不管有没有检查点文件,都应该有这项,这样不容易报错。
有几篇ssd的参数设置都存在这个问题,都这样解决就可以了。
话说这个文件应该也都是经过tensorflow审核的,为什么还会出现这个问题呢。。。

你可能感兴趣的:(tensorflow,目标检测,深度学习)