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 Api 和 Opencv 在视频上裁剪检测到的对象
有人开源了Mask R-CNN对象检测和分割的Keras和TensorFlow代码
Tensorflow 对象检测 Api M1 Macbook 冲突错误