对 tensorflow slim 模型使用模型优化器
Using model optimizer for tensorflow slim models
我的目标是使用英特尔 OpenVINO 优化器推断 tensorflow slim 模型。使用 open vino docs and slides for inference and tf slim docs 训练模型。
这是一个多class class化问题。我从头开始训练了 tf slim mobilnet_v2 模型 (使用 sript train_image_classifier.py)。从 (using script eval_image_classifier.py):
开始,在测试集上对训练模型的评估给出了相对较好的结果
eval/Accuracy[0.8017]eval/Recall_5[0.9993]
但是,单个 .ckpt
文件未保存(即使在 train_image_classifier.py 运行 末尾有 "model.ckpt is saved to checkpoint_dir"),有3个文件(.ckpt-180000.data-00000-of-00001
、.ckpt-180000.index
、.ckpt-180000.meta
)代替。
OpenVINO 模型优化器需要单个检查点文件。
根据docs,我使用以下参数调用mo_tf.py:
python mo_tf.py --input_model D:/model/mobilenet_v2_224.pb --input_checkpoint D:/model/model.ckpt-180000 -b 1
它给出错误(如果通过 --input_checkpoint D:/model/model.ckpt 则相同):
[ ERROR ] The value for command line parameter "input_checkpoint" must be existing file/directory, but "D:/model/model.ckpt-180000" does not exist.
错误信息很清楚,磁盘上没有这样的文件。但据我所知,大多数 tf 实用程序都会在后台将 .ckpt-????.meta 转换为 .ckpt。
正在尝试呼叫:
python mo_tf.py --input_model D:/model/mobilenet_v2_224.pb --input_meta_graph D:/model/model.ckpt-180000.meta -b 1
原因:
[ ERROR ] Unknown configuration of input model parameters
我将图形传输到 OpenVINO 中间表示的方式对我来说并不重要,只需要达到那个结果。
非常感谢。
编辑
我设法 运行 在 tf slim 模型的冻结图上使用 OpenVINO 模型优化器。但是我仍然不知道为什么我以前的尝试(基于文档)失败了。
您可以尝试将模型转换为冻结格式 (.pb),然后使用 OpenVINO 转换模型。
.ckpt-meta 有元图。没有变量值的计算图结构。
你可以在 tensorboard 中观察到的那个。
.ckpt-data 有变量值,没有骨架或结构。要恢复模型,我们需要元文件和数据文件。
.pb文件保存整个图(元+数据)
根据 OpenVINO 的文档:
当在 Python* 代码中定义网络时,您必须创建一个推理图文件。通常,图形以允许模型训练的形式构建。这意味着所有可训练参数都表示为图中的变量。要将图形与模型优化器一起使用,它应该被冻结。
https://software.intel.com/en-us/articles/OpenVINO-Using-TensorFlow
OpenVINO 通过转换以冻结形式传递的加权图来优化模型。
我的目标是使用英特尔 OpenVINO 优化器推断 tensorflow slim 模型。使用 open vino docs and slides for inference and tf slim docs 训练模型。
这是一个多class class化问题。我从头开始训练了 tf slim mobilnet_v2 模型 (使用 sript train_image_classifier.py)。从 (using script eval_image_classifier.py):
开始,在测试集上对训练模型的评估给出了相对较好的结果eval/Accuracy[0.8017]eval/Recall_5[0.9993]
但是,单个 .ckpt
文件未保存(即使在 train_image_classifier.py 运行 末尾有 "model.ckpt is saved to checkpoint_dir"),有3个文件(.ckpt-180000.data-00000-of-00001
、.ckpt-180000.index
、.ckpt-180000.meta
)代替。
OpenVINO 模型优化器需要单个检查点文件。
根据docs,我使用以下参数调用mo_tf.py:
python mo_tf.py --input_model D:/model/mobilenet_v2_224.pb --input_checkpoint D:/model/model.ckpt-180000 -b 1
它给出错误(如果通过 --input_checkpoint D:/model/model.ckpt 则相同):
[ ERROR ] The value for command line parameter "input_checkpoint" must be existing file/directory, but "D:/model/model.ckpt-180000" does not exist.
错误信息很清楚,磁盘上没有这样的文件。但据我所知,大多数 tf 实用程序都会在后台将 .ckpt-????.meta 转换为 .ckpt。
正在尝试呼叫:
python mo_tf.py --input_model D:/model/mobilenet_v2_224.pb --input_meta_graph D:/model/model.ckpt-180000.meta -b 1
原因:
[ ERROR ] Unknown configuration of input model parameters
我将图形传输到 OpenVINO 中间表示的方式对我来说并不重要,只需要达到那个结果。
非常感谢。
编辑
我设法 运行 在 tf slim 模型的冻结图上使用 OpenVINO 模型优化器。但是我仍然不知道为什么我以前的尝试(基于文档)失败了。
您可以尝试将模型转换为冻结格式 (.pb),然后使用 OpenVINO 转换模型。
.ckpt-meta 有元图。没有变量值的计算图结构。 你可以在 tensorboard 中观察到的那个。
.ckpt-data 有变量值,没有骨架或结构。要恢复模型,我们需要元文件和数据文件。
.pb文件保存整个图(元+数据)
根据 OpenVINO 的文档:
当在 Python* 代码中定义网络时,您必须创建一个推理图文件。通常,图形以允许模型训练的形式构建。这意味着所有可训练参数都表示为图中的变量。要将图形与模型优化器一起使用,它应该被冻结。 https://software.intel.com/en-us/articles/OpenVINO-Using-TensorFlow
OpenVINO 通过转换以冻结形式传递的加权图来优化模型。