从 Tensorflow 对象检测 API 动物园模型导出错误的冻结图

Posted

技术标签:

【中文标题】从 Tensorflow 对象检测 API 动物园模型导出错误的冻结图【英文标题】:Wrong frozen graph export from Tensorflow Object Detection API zoo model 【发布时间】:2019-08-05 19:30:17 【问题描述】:

我正在使用 Tensorflow 对象检测 API 项目 (https://github.com/tensorflow/models/tree/r1.12.0/research/object_detection) 处理 Mask R CNN 模型。我坚持使用 r1.12.0 版本(但这不是必须的,但我认为它不会影响我的问题。)我的计划是修改模型的一些“静态”部分并再次将其导出为冻结图格式。

作为第一步,我打算使用 export_inference_graph.py 脚本 (https://github.com/tensorflow/models/blob/r1.12.0/research/object_detection/export_inference_graph.py) 从检查点文件和 pipeline.config 重新生成冻结图。我下载了 inception V2 模型 (http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz) 并使用 Tensorflow 1.12.0 执行了脚本。它完成了这项工作并创建了一个冻结图。

问题是,如果我将原始冻结图与生成的图进行比较,它们是不同的。如果我使用 Tensorboard 将它们可视化,它们之间就会有明显的差异。一些节点丢失,一些节点不同等等。

我也尝试过其他模型(普通 Fast R CNN),我总是遇到同样的问题。

这怎么可能?我应该如何使用检查点文件和pipeline.config 文件重新生成与最初附加的完全相同的冻结图?

【问题讨论】:

【参考方案1】:

据我了解,您生成冻结图的步骤很好。

关于冻结图的一件事是可以对其进行优化,例如将一些层融合在一起。优化可能会导致您的冻结图看起来不同,因为可以执行或根本不执行不同的优化。但是不同的冻结图并不一定意味着该图是错误生成的。

Here 是关于优化冻结图以制作更快的服务模型的教程。只是在这里列出来表明有几个优化选项。

这里What does freezing a graph in TensorFlow mean? 是另一个与此问题有关的问题。

【讨论】:

以上是关于从 Tensorflow 对象检测 API 动物园模型导出错误的冻结图的主要内容,如果未能解决你的问题,请参考以下文章

Tensorflow Object Detection API 中的 mAP(平均精度)

如何从代码运行 tensorflow 对象检测 api (model_main_tf2)?

TensorFlow对象检测API教程中获取边界框坐标

Tensorflow的对象分离api不工作。

如何修改 ssd mobilenet 配置以使用 tensorflow 对象检测 API 检测小对象?

使用 Tensorflow 2 对象检测 API 冻结了哪些层?