问题:pb模型文件与.pbtxt配置不匹配导致OpenCV调用dnn模块出错(Mask R-CNN为例)
OpenCV调用tensorflow的pb模型,需要.pb和.pbtxt文件。
在前期采用Tensorflow Object Detection API训练出自己的pb模型后,还需要准备该模型对应的.pbtxt文件。然而,所谓的对应并不是选择了一个框架的.pbtxt文件拷贝过来就能解决的,需要根据pb模型导出对应的.pbtxt文件,才能供OpenCV调用。
”frozen_inference_graph.pb"是利用自己的数据集训练出来的模型,“mask_rcnn_inception_v2_coco_2018_01_28.pbtxt"是网络的配置文件,从”models“或者其他地方拷贝过来的。
VS中调用执行一个识别程序,会发生"net.forward(outs, outNames);"处报错,说明模型与配置文件不匹配。
解决办法:由.pb文件导出对应的.pbtxt文件
OpenCV(Python版本)中已经提供了对应的程序,可将其源码下载下来找到以下两个文件,所在目录:opencv/samples/dnn/。网络不便的话,只下载这两个文件即可。
1.下载”tf_text_graph_mask_rcnn.py“
2.下载tf_text_graph_common.py
3.准备mask_rcnn_inception_v2_coco.config
该文件的源文件可在”\models-master\research\object_detection\samples\configs“目录下找到,此处用到的是训练时根据项目要求修改后的.config文件。models可到此处下载。
4.按照tf_text_graph_mask_rcnn.py中提示运行程序
即终端输入:
python tf_text_graph_ssd.py \
--input /path/to/xxx.pb \
--config /path/to/xxx.config \
--output /path/to/xxx.pbtxt
其他识别框架导出方法类似,注意查看OpenCV源码中提供的程序说明。