我想使用EmguCV
在C#中导入。pb文件。我使用Keras in Python
训练了模型。我冻结了以下总结的模型:
层(类型)输出形状参数#
input_1(InputLayer)(无,120,50,1)0
conv2d_1(Conv2D)(无,120,50,64)640
conv2d_2(Conv2D)(无,120,50,64)36928
batch_normalization_1(批处理(无,120、50、64)256]
max_pooling2d_1(MaxPooling2(None,60,25,64)0
conv2d_3(Conv2D)(无,60,25,64)36928
conv2d_4(Conv2D)(无,60,25,128)73856
batch_normalization_2(批次(无,60、25、128)512
max_pooling2d_2(MaxPooling2(None,30,12,128)0] >>
conv2d_5(Conv2D)(无,30,12,128)147584
conv2d_6(Conv2D)(无,30,12,128)147584
batch_normalization_3(批处理(None,30,12,128)512
reshape_1(Reshape)(None,30,1536)0
dropout_1(Dropout)(None,30,1536)0
密集_1(密集)(无,30,256)393472
bidirectional_1(Bidirectional(None,30,256)1050624
bidirectional_2(Bidirectional(None,30,256)394240
dropout_2(Dropout)(None,30,256)0
密集_2(密集)(无,30,43)11051
我使用下面显示的C#类来导入。pb
文件并在其中使用UMat
图片:public class ClassifierDnn { private readonly Emgu.CV.Dnn.Net _net; private readonly string _inputName; private readonly string _outputName; public ClassifierDnn( string tensorflowModelFilePath, string inputName, string outputName) { var b = File.Exists(tensorflowModelFilePath); _net = Emgu.CV.Dnn.DnnInvoke.ReadNetFromTensorflow(tensorflowModelFilePath); _inputName = inputName; _outputName = outputName; } public int Classify(UMat umat) { using (var mat = umat.GetMat(Emgu.CV.CvEnum.AccessType.Fast)) { return Classify(mat); } } }
并且我使用此代码调用
Classify
方法:
var dnn = new ClassifierDnn( "crnn.pb", "input_1", "dense_2"); using (var u = new UMat(dlg.FileName, ImreadModes.Grayscale)) { var m = dnn.Classify(u); }
但是我得到如下所示的错误:
什么问题?
我想使用EmguCV在C#中导入.pb文件。我在Python中使用Keras训练了一个模型。我冻结了以下总结的模型:图层(类型)输出形状参数#input_1(...
我没有为您提供完整的解决方案,但是您可以查看OpenCV源代码以找到答案。首先,在getTensorContent
的tf_graph_simplifier.cpp函数中发现错误,您可以将其追溯到tf_importer.cpp,在populateNet
函数(readNetFromTensorflow
的主要函数)的21个位置中都可以找到它。此文件,行705至2044。您可以跟踪其中的每一个,以找出与您的问题有关的哪一个。