我需要使用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。有办法解决吗?
答案 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.0
和1.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
}