如何在旧版本的tensorflow-v1.3.0中使用对象检测API?

时间:2018-12-26 05:18:05

标签: tensorflow object-detection object-detection-api

我需要使用tensorflow对象检测API(ssd_mobilenet_v1_coco),但是我必须使用tensorflow 1.3.0(由于环境而强制)。

我在1.9.0上有一个重新训练的模型,但它与1.3.0不兼容:

  

回溯(最近一次通话最后一次):文件“ run_test.py”,第29行,在          tf.import_graph_def(od_graph_def,name ='')文件“ /opt/carndcapstone/venv/local/lib/python2.7/site-packages/tensorflow/python/framework/importer.py”,   第285行,在import_graph_def中       引发ValueError('在定义的操作中没有操作名为%s。'%node.op)ValueError:在定义的操作中没有名为NonMaxSuppressionV3的操作   操作。

只是想知道是否可以在tensorflow 1.3.0中使用对象检测API。在GitHub上没有看到1.3.0版本的API。有办法解决吗?

2 个答案:

答案 0 :(得分:1)

这就是我所做的

步骤1:使用最新可用的Object Detection API

训练模型

现在您已经训练了ckpt和其他文件

└── training
   ├── checkpoint
   ├── model.ckpt.data-XXXX-of-XXXX
   ├── model.ckpt.index
   └── model.ckpt.meta

步骤2:现在,克隆与tensorflow 1.3.0 1f34fcafc1454e0d31ab4a6cc022102a54ac0f5b

兼容的对象检测API的先前提交。

步骤3:使用tf 1.4.0创建新的conda虚拟环境,并在新克隆的“对象检测文件夹”中安装依赖项以使用对象检测API

步骤4::激活新的conda环境,并在第一步训练的ckpt模型上运行export_inference_graph.py

生成的冻结图与Tensorflow 1.3.01.4.0兼容

有关更多详细信息,请关注this

答案 1 :(得分:0)

我有同样的问题。这就是我所做的。

在实际的培训过程中,我遵循了this tutorial

根据releases,Tensorflow 1.3.0。于2017年8月16日发布。 因此,您将需要使用Object Detection API的相应版本。当时Protocol Buffers v3.4.0是最新版本,因此您也需要使用它们。

您可能会得到ValueError: axis = 0 not in [0, 0)(我没有确认,但是我怀疑当您使用较新的Object Detection API创建TFRecords时出现此错误。)以防万一该链接不起作用,解决方案是修改您的管道*.config,如下所示:

loss {
  classification_loss {
    weighted_sigmoid {
    anchorwise_output: true  #add this
    }
  }
  localization_loss {
    weighted_smooth_l1 {
    anchorwise_output: true  #add this
    }
  }
  hard_example_miner {
    num_hard_examples: 3000
    iou_threshold: 0.99
    loss_type: CLASSIFICATION
    max_negatives_per_positive: 3
    min_negatives_per_image: 0
  }
  classification_weight: 1.0
  localization_weight: 1.0
}