Compartilhar via


EvalDLL C# API

Há uma interface gerenciada disponível para avaliar modelos sem exigir um leitor de dados ou arquivos de dados. Essa interface é implementada no código gerenciado da CLI dentro da EvalWrapper biblioteca. Essa biblioteca, por sua vez, Evaldll usa a biblioteca para executar as avaliações de rede reais (em C++nativo).

O nome da interface gerenciada (em C#) é o seguinte:

public interface IEvaluateModelManaged<T> : IDisposable

Onde T está o tipo de elemento (float ou double)

Essa interface fornece os seguintes métodos:


void Init(string config)

Esse método inicializa o mecanismo de avaliação com o arquivo de configuração especificado. As entradas do arquivo de configuração são analisadas e atribuídas ao mecanismo de avaliação, no entanto, a rede não é criada dentro dessa chamada. Além disso, esse método padrão será a numCPUThreads propriedade, a 1menos que o arquivo de configuração contenha um valor diferente para essa propriedade.


void CreateNetwork(string networkDescription)

Esse método cria a rede a partir da descrição da rede no arquivo de configuração ou, se o modelPath atributo for especificado, ele carregará o modelo do disco.

  • networkDescription : contém a descrição da rede, seja por meio de uma entrada do NetworkBuilder de um atributo modelPath.

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

Esse método cria a rede a partir da descrição da rede no arquivo de configuração ou, se o modelPath atributo for especificado, ele carregará o modelo do disco. Além disso, ele substitui a lista de nós de saída do arquivo de configuração, com a lista passada como um argumento. Isso permite que o chamador recupere os valores de saída de outros nós, como aqueles nas camadas ocultas.

  • networkDescription : contém a descrição da rede, seja por meio de uma entrada do NetworkBuilder de um atributo modelPath.
  • outputNodeNames : lista de nós a serem marcados como Saída, para que possam ser avaliados.

void CreateNetwork(string networkDescription, int deviceId)

Esse método cria a rede a partir da descrição da rede no arquivo de configuração. É apenas um método de conveniência que se prepara deviceId=<deviceId> para o networkDescription texto.

  • networkDescription : contém a descrição da rede, seja por meio de uma NetworkBuilder propriedade ou de um modelPath atributo.
  • deviceId : especifica o valor da ID do dispositivo a ser anexado à propriedade da descrição da deviceId rede.

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

Esse método cria a rede a partir da descrição da rede no arquivo de configuração. É apenas um método de conveniência que se prepara deviceId=<deviceId> para o networkDescription texto.

  • networkDescription : contém a descrição da rede, seja por meio de uma entrada do NetworkBuilder de um atributo modelPath.
  • deviceId : especifica o valor da ID do dispositivo a ser anexado à propriedade da descrição da deviceId rede.
  • outputNodeNames : lista de nós a serem marcados como Saída, para que possam ser avaliados.

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

Esse método avalia a rede com um único passe de avanço (sem entrada) e retorna os valores associados à camada outputKeyespecificada.

  • outputKey : nome da camada para retornar os valores.
  • outputSize : número de valores na camada de saída.
    Esse método é preterido. Em vez disso, use o List<T> Evaluate(string outputKey) método.

List<T> Evaluate(string outputKey)

Esse método avalia a rede com um único passe de avanço (sem entrada) e retorna os valores associados à camada outputKeyespecificada.

  • outputKey : nome da camada para retornar os valores. Internamente, o método determina o tamanho do buffer de dados necessário para a saída e aloca o buffer necessário.

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

Esse método avalia a rede usando a entrada fornecida e recupera várias camadas de saída.

  • inputs : o dicionário mapeando nomes de camada de entrada para valores a serem usados como entrada para a rede.
  • outputs : o dicionário mapeando nomes de camada de saída para valores a serem recuperados da rede.

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

Esse método avalia uma rede com a entrada fornecida e recupera uma única camada de saída

  • inputs : o dicionário mapeando nomes de camada de entrada para valores a serem usados como entrada para a rede.
  • outputKey : o nome da camada de saída desejada.
  • outputSize : o número de valores na camada de saída.
    Esse método é preterido. Em vez disso, use o List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey) método.

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

Esse método avalia uma rede com a entrada fornecida e recupera uma única camada de saída

  • inputs : o dicionário mapeando nomes de camada de entrada para valores a serem usados como entrada para a rede.
  • outputKey : o nome da camada de saída desejada.
    Internamente, o método determina o tamanho do buffer de dados necessário para a saída e aloca o buffer necessário.

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

Esse método avalia uma imagem bitmap e recupera uma única camada de saída

  • image : a entrada de imagem bitmap no formato RGB. Ele já deve ser redimensionado para corresponder ao tamanho esperado pela rede.
  • outputKey : o nome da camada de saída desejada.
    Internamente, o método primeiro extrai o vetor de recurso que contém três canais e, em seguida, o alimenta como a entrada para a rede. Ele também aloca o buffer necessário para a saída.

Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)

Esse método retorna um dicionário de itens, com cada item mapeando o nome da camada (chave) para o tamanho da dimensão. O grupo de nós é definido por meio da NodeGroup enumeração:

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

Há duas implementações dessa interface disponíveis para o cliente gerenciado:

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

e

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

Exemplo

O programa CSEvalClient localizado aqui demonstra o uso dessa interface de avaliação.