我按照本教程实现了 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()方法不成功(生成一个没有有用信息的通用异常)
抛出引用异常:
[Exception thrown at 0x00007FFFB80C9129 in Object_detection_inference_cpp.exe: Microsoft C++ exception: cv::Exception at memory location 0x000000CBC18FDC90.]
提前致谢。
最佳答案
这是我用来将 .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 文件。因此,我无法使用您报告的那三个功能。我做错了什么吗?
关于c++ - 如何用OpenCV C++加载Yolo目标检测网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56842174/