Tensorflow 对象检测在 Python 和 C++(OpenCV) 之间有不同的结果

Posted

技术标签:

【中文标题】Tensorflow 对象检测在 Python 和 C++(OpenCV) 之间有不同的结果【英文标题】:Tensorflow object detection has different results between Python and C++(OpenCV) 【发布时间】:2020-02-10 12:01:54 【问题描述】:

我使用 TF OF API 训练了一个模型。然后,当我使用下面链接的 Python 和 C++(OpenCV) 代码测试模型时,我得到了不同的结果。从 Python 获得的结果优于 C++(OpenCV) 结果。造成这种差异的原因是什么?

Python 测试代码:https://github.com/vijaydwivedi75/Custom-Mask-RCNN_TF/blob/master/mask_rcnn_eval.ipynb

C++(OpenCV) 测试代码:https://github.com/spmallick/learnopencv/blob/master/Mask-RCNN/mask_rcnn.cpp

训练模型和样本图像:https://drive.google.com/open?id=18RaJfk6-DXfZJWEL61YdOAztoJxdUbua

我使用以下代码从检查点获取 .pb 模型:https://github.com/tensorflow/models/blob/master/research/object_detection/export_inference_graph.py

我正在使用以下代码获取 .pbtxt 文件:https://github.com/opencv/opencv/blob/master/samples/dnn/tf_text_graph_mask_rcnn.py

OpenCV 版本:4.2.0,用于训练的 Tensorflow 版本:1.12.0

感谢您的帮助。

【问题讨论】:

不同的语言。不同的浮点实现。不同的结果 - 大惊喜(不是)。 【参考方案1】:

这完全是关于火车图像尺寸和保持纵横比调整器最小/最大尺寸之间的不匹配。在 Python 中,模型会调整输入图像的大小。但是,在 OpenCV 中,没有任何调整大小的操作。因为这些,我得到了不同的结果。

【讨论】:

以上是关于Tensorflow 对象检测在 Python 和 C++(OpenCV) 之间有不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

动态编辑用于 TensorFlow 对象检测的管道配置

使用 Tensorflow Api 和 Opencv 在视频上裁剪检测到的对象

有人开源了Mask R-CNN对象检测和分割的Keras和TensorFlow代码

Tensorflow 对象检测 Api M1 Macbook 冲突错误

TensorFlow - 对象检测模块,尝试使用 protoc 时出现错误

Tensorflow 2 对象检测 API:Numpy 版本错误