第一次写博客,主要想赚点积分(开篇点题,不好意思哈,不过你们不会亏的,有问题可以联系我,非常热心)
先说个大概,opencv是intel的所以不支持竞争对手的功能(nvidia的gpu),那个OPENCL选项其实是intel的核显,比cpu调用还慢,加速功能要自己写,没有gpu的可以用一下,速度在2s左右一张图片(1920x1200)。因为速度慢后期使用了tensorflow-gpu c++版,gtx1070 速度在0.18s左右一张图片(1920x1200)。
一、先说opencv调用的问题吧
网上看了很多资料,很多最后都是调用官方模型(成功),为什么呢,因为调用自己的模型不成功,我开始也遇到这样的问题,一直以为是自己没按步骤或者疏漏了什么,最后发现是opencv自带的tf_text_graph_mask_rcnn.py不行,网上重新找了一个,在这之前还要对生成的pb模型转一下格式(ssd,faster,maskrcnn都需要),opencv 自带的tf_graph_**.py对ssd和faster有用,但对maskrcnn没用。
转格式的代码如下:
import tensorflow as tf
from tensorflow.tools.graph_transforms import TransformGraph
with tf.gfile.FastGFile(r'D:\train\train_cell_json\1028\pb\frozen_inference_graph.pb', 'rb') as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
#print(graph_def)
graph_def = TransformGraph(graph_def, ['image_tensor'], ['detection_boxes', 'detection_classes', 'detection_scores', 'num_detections'], ['sort_by_execution_order'])
with tf.gfile.FastGFile(r'D:\train\train_cell_json\1028\pb\data\frozen_inference_graph.pb', 'wb') as f:
f.write(graph_def.SerializeToString())
print('finished')
前面的pb是训练后的模型,后一个pb是转格式后的模型
转换后就要生成pbtxt文件,opencv必备这里提供下载,使用方式与opencv自带转格式方式一致(出问题可以联系我,一般晚上有时间)下载地址:tf_text_graph_rcnn.py
总之第一步:对训练生成的pb模型又上面已贴出的代码,转形式。
第二步:对转换形式后的pb调用 tf_text_graph_rcnn.py生成pbtxt,就可以使用opencv调用了
tensorflow-gpu c++调用在另一篇文章中https://blog.csdn.net/qq_39731633/article/details/104634507,后面都提供免费下载