【发布时间】:2021-01-18 03:39:04
【问题描述】:
我已经使用 Tensorflow 2 对象检测 API 训练了 SSD ResNet V1 模型。然后我想在 C++ 代码中将此模型与 OpenCV 一起使用。
首先,经过培训,我有三个文件:
- 检查点
- ckpt-101.data-00000-of-00001
- ckpt-101.index
请注意,我没有 .meta 文件,因为它不是生成的。
然后我使用对象检测 API 中的 exporter_main_v2.py 脚本从这些文件中创建了 SavedModel:
python3 exporter_main_v2.py input_type=image_tensor --pipeline_config_path /path/to/pipeline.config --trained_checkpoint_dir=/path/to/checkouts --output_directory=/path/to/output/directory
运行此脚本后,我得到了 saved_model.pb
我尝试以这种方式在 OpenCV 中使用此文件:
cv::dnn::Net net = cv::dnn::readNetFromTensorflow("/path/to/saved_model.pb");
但我收到以下错误:
OpenCV(4.2.0) /home/andrew/opencv/modules/dnn/src/tensorflow/tf_io.cpp:42: error: (-2:Unspecified error) FAILED: ReadProtoFromBinaryFile(param_file, param). Failed to parse GraphDef file: /home/andrew/Documents/tensorflow_detection/workspace/pb_model/saved_model/saved_model.pb in function 'ReadTFNetParamsFromBinaryFileOrDie'
然后我尝试冻结 saved_model.pb。但是,据我了解,在 TF2.x 中这是不可能的,因为 TF2.x 不支持 Sessions 和 Graphs。我也没有 .pbtxt 文件。
我的问题:是否可以在 OpenCV C++ 中使用使用 TF2 对象检测 API 训练的模型?
如果您能帮我解决这个问题或提供任何有用的建议,我将不胜感激。
【问题讨论】:
标签: c++ opencv tensorflow2.0 object-detection-api resnet