【问题标题】:How to load Yolo object detection network with OpenCV C++如何使用 OpenCV C++ 加载 Yolo 对象检测网络
【发布时间】:2019-07-01 20:39:00
【问题描述】:

我按照本教程来实现 Yolo 对象检测器:https://github.com/thtrieu/darkflow/ 我成功地完成了。

创建的 .pb 文件可用于将图形迁移到移动设备(JAVA / C++ / Objective-C++)。输入张量和输出张量的名称分别为'input'和'output'。

我想用 OpenCV (c++) 加载网络。 readNetFromTensorflow() 方法需要两个文件:.pb 和 .pbtxt。后者不是由上述实现生成的。 同样,要使用 readNetFromDarknet() 方法,需要有两个文件:.cfg 和 .weights。后者不是由上述实现生成的。

那么,如何使用opencv将yolo网络从python迁移到c++呢?

我也试过直接从 .pb 文件生成 .pbtxt 文件,但是 readNetFromTensorflow() 方法不成功(在没有有用信息的情况下生成了一个通用异常)

引用异常抛出:

[在 Object_detection_inference_cpp.exe 中的 0x00007FFFB80C9129 处引发异常:Microsoft C++ 异常:内存位置 0x000000CBC18FDC90 处的 cv::Exception。]

提前致谢。

【问题讨论】:

  • 当您从.pb 生成.pbtxt 时,您使用了什么脚本?根据this 教程,您应该使用特殊脚本生成 .pbtxt 文件并将其提供给 readNetFromTensorflow()。 Reference
  • @danyfang 我在新评论中发布了我用来从 .pb 转换为 .pbtxt 的代码。

标签: c++ opencv object detection yolo


【解决方案1】:

这是我用来将 .pb 文件转换为 .pbtxt 文件的代码:

import tensorflow as tf
from google.protobuf import text_format
from tensorflow.python.platform import gfile

def graphdef_to_pbtxt(filename): 
    with gfile.FastGFile(filename,'rb') as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    tf.import_graph_def(graph_def, name='')
    tf.train.write_graph(graph_def, 'pbtxt/', 'tiny-yolov2-trial3-test.pbtxt', as_text=True)
  return

graphdef_to_pbtxt('tiny-yolov2-trial3-test.pb')

使用 tf_text_xxx.py 需要有 .config 文件。我只有上面教程中的 .cfg 文件。因此,我无法使用您报告的这三个功能。我是不是做错了什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-16
    • 2020-10-01
    • 2020-02-11
    • 2019-02-24
    • 1970-01-01
    • 2018-07-26
    • 2021-01-18
    • 2012-07-12
    相关资源
    最近更新 更多