Поделиться через


API C# EvalDLL

Существует управляемый интерфейс, доступный для оценки моделей без необходимости чтения данных или файлов данных. Этот интерфейс реализуется в управляемом коде CLI в библиотеке EvalWrapper . Эта библиотека, в свою очередь, использует Evaldll библиотеку для выполнения фактических вычислений сети (в машинном коде C++).

Имя управляемого интерфейса (в C#) — это следующее:

public interface IEvaluateModelManaged<T> : IDisposable

Где T находится тип элемента (float или double)

Этот интерфейс предоставляет следующие методы:


void Init(string config)

Этот метод инициализирует модуль оценки с указанным файлом конфигурации. Записи из файла конфигурации анализируются и назначаются подсистеме вычислений, однако сеть не создается внутри этого вызова. Кроме того, этот метод будет по умолчанию numCPUThreads использовать свойство 1, если файл конфигурации не содержит другое значение для этого свойства.


void CreateNetwork(string networkDescription)

Этот метод создает сеть из описания сети в файле конфигурации или, если modelPath атрибут указан, он загружает модель с диска.

  • networkDescription : содержит описание сети с помощью записи NetworkBuilder атрибута modelPath.

void CreateNetwork(string networkDescription, List<string> outputNodeNames)

Этот метод создает сеть из описания сети в файле конфигурации или, если modelPath атрибут указан, он загружает модель с диска. Кроме того, он заменяет список выходных узлов из файла конфигурации списком, переданным в качестве аргумента. Это позволяет вызывающей объекту получать выходные значения других узлов, например тех, которые есть в скрытых слоях.

  • networkDescription : содержит описание сети с помощью записи NetworkBuilder атрибута modelPath.
  • outputNodeNames : список узлов, которые должны быть помечены как выходные данные, чтобы их можно было оценить.

void CreateNetwork(string networkDescription, int deviceId)

Этот метод создает сеть из описания сети в файле конфигурации. Это просто удобный метод, который добавляется deviceId=<deviceId> к тексту networkDescription .

  • networkDescription : содержит описание сети с помощью NetworkBuilder свойства или атрибута modelPath .
  • deviceId : указывает значение идентификатора устройства, которое добавляется к свойству описания deviceId сети.

void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)

Этот метод создает сеть из описания сети в файле конфигурации. Это просто удобный метод, который добавляется deviceId=<deviceId> к тексту networkDescription .

  • networkDescription : содержит описание сети с помощью записи NetworkBuilder атрибута modelPath.
  • deviceId : указывает значение идентификатора устройства, которое добавляется к свойству описания deviceId сети.
  • outputNodeNames : список узлов, которые должны быть помечены как выходные данные, чтобы их можно было оценить.

List<T> Evaluate(string outputKey, int outputSize)

Этот метод оценивает сеть с одним переадресным проходом (без входных данных) и возвращает значения, связанные с указанным слоем outputKey.

  • outputKey : имя слоя для возврата значений.
  • outputSize : число значений в выходном слое.
    Этот метод является устаревшим. Вместо этого используйте List<T> Evaluate(string outputKey) метод.

List<T> Evaluate(string outputKey)

Этот метод оценивает сеть с одним переадресным проходом (без входных данных) и возвращает значения, связанные с указанным слоем outputKey.

  • outputKey : имя слоя для возврата значений. Внутри метода определяется требуемый размер буфера данных для выходных данных и выделяется необходимый буфер.

void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)

Этот метод оценивает сеть с использованием предоставленных входных данных и извлекает несколько уровней вывода.

  • inputs : сопоставление имен входных слоев словаря со значениями, используемыми в качестве входных данных в сети.
  • outputs : сопоставление имен выходного слоя словаря со значениями для получения из сети.

List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)

Этот метод оценивает сеть с предоставленными входными данными и извлекает один выходной слой.

  • inputs : сопоставление имен входных слоев словаря со значениями, используемыми в качестве входных данных в сети.
  • outputKey : имя требуемого выходного слоя.
  • outputSize : число значений в выходном слое.
    Этот метод является устаревшим. Вместо этого используйте List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey) метод.

List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)

Этот метод оценивает сеть с предоставленными входными данными и извлекает один выходной слой.

  • inputs : сопоставление имен входных слоев словаря со значениями, используемыми в качестве входных данных в сети.
  • outputKey : имя требуемого выходного слоя.
    Внутри метода определяется требуемый размер буфера данных для выходных данных и выделяется необходимый буфер.

List<T> EvaluateRgbImage(Bitmap image, string outputKey)

Этот метод оценивает растровое изображение и извлекает один выходной слой.

  • image : входные данные растрового изображения в формате RGB. Он уже должен быть повторно размером, чтобы соответствовать размеру, ожидаемому сетью.
  • outputKey : имя требуемого выходного слоя.
    Сначала метод извлекает вектор признаков, содержащий 3 канала, а затем передает его в качестве входных данных в сеть. Он также выделяет необходимый буфер для выходных данных.

Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)

Этот метод возвращает словарь элементов, каждый из которых сопоставляет имя слоя (ключ) с размером измерения. Группа узлов определяется с помощью NodeGroup перечисления:

    public enum class NodeGroup     
    {      
        nodeInput,  // an input node     
        nodeOutput, // an output node     
        nodeSpecified     
    };

Существует две реализации этого интерфейса, доступные управляемому клиенту:

class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float

и

class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double

Пример

Программа CSEvalClient, расположенная здесь , демонстрирует использование этого интерфейса оценки.