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, расположенная здесь , демонстрирует использование этого интерфейса оценки.