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 1
menos 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 umaNetworkBuilder
propriedade ou de ummodelPath
atributo.deviceId
: especifica o valor da ID do dispositivo a ser anexado à propriedade da descrição dadeviceId
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 dadeviceId
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 outputKey
especificada.
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 oList<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 outputKey
especificada.
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 oList<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.