Импортируйте файл .pb, используя EmguCV C # - PullRequest
0 голосов
/ 04 ноября 2019

Я хочу импортировать .pb файл в C #, используя EmguCV. Я тренировал модель, используя 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 (Нет, 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 (Нет, 30, 12, 128) 0


conv2d_5 (Conv2D) (Нет, 30, 12, 128) 147584


conv2d_6 (Conv2D) (Нет, 30, 12, 128) 147584


batch_normalization_3 (Пакет (Нет, 30, 12, 128) 512


reshape_1 (Reshape) (Нет, 30, 1536) 0


dropout_1 (Выпадение) (Нет, 30, 1536) 0


плотность_1 (плотный) (нет, 30, 256) 393472


двунаправленный_1 (двунаправленный (нет, 30, 256) 1050624


двунаправленный_2 (двунаправленный (нет, 30, 256) 394240


dropout_2 (выбывший) (нет, 30, 256) 0


density_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

в чем проблема?

1 Ответ

0 голосов
/ 05 ноября 2019

У меня нет полного решения для вас, но вы можете посмотреть исходный код OpenCV, чтобы узнать его. Вначале полученная вами ошибка обнаружена в функции getTensorContent в tf_graph_simplifier.cpp , вы можете отследить ее до tf_importer.cpp , где она найдена в 21 месте в populateNet function, основная функция для readNetFromTensorflow, в этом файле строки с 705 по 2044. Вы можете отслеживать каждую из них, чтобы выяснить, какая из них связана с вашей проблемой.

...