[使用EmguCV C#导入.pb文件

问题描述 投票:0回答:1

我想使用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);
}

但是我得到如下所示的错误:

enter image description here

什么问题?

我想使用EmguCV在C#中导入.pb文件。我在Python中使用Keras训练了一个模型。我冻结了以下总结的模型:图层(类型)输出形状参数#input_1(...

c# opencv tensorflow keras emgucv
1个回答
0
投票

我没有为您提供完整的解决方案,但是您可以查看OpenCV源代码以找到答案。首先,在getTensorContenttf_graph_simplifier.cpp函数中发现错误,您可以将其追溯到tf_importer.cpp,在populateNet函数(readNetFromTensorflow的主要函数)的21个位置中都可以找到它。此文件,行705至2044。您可以跟踪其中的每一个,以找出与您的问题有关的哪一个。

© www.soinside.com 2019 - 2024. All rights reserved.