Condividi tramite


EvalDLL C# API

È disponibile un'interfaccia gestita per la valutazione dei modelli senza richiedere un lettore di dati o file di dati. Questa interfaccia viene implementata nel codice gestito dell'interfaccia della riga di comando all'interno della EvalWrapper libreria. Questa libreria usa Evaldll a sua volta la libreria per eseguire le valutazioni di rete effettive (in C++nativo).

Il nome dell'interfaccia gestita (in C#) è il seguente:

public interface IEvaluateModelManaged<T> : IDisposable

Dove T è il tipo di elemento (float o double)

Questa interfaccia fornisce i metodi seguenti:


void Init(string config)

Questo metodo inizializza il motore di valutazione con il file di configurazione specificato. Le voci del file di configurazione vengono analizzate e assegnate al motore di valutazione, ma la rete non viene creata all'interno di questa chiamata. Inoltre, questo metodo predefinitorà la numCPUThreads proprietà su 1, a meno che il file di configurazione contenga un valore diverso per questa proprietà.


void CreateNetwork(string networkDescription)

Questo metodo compila la rete dalla descrizione di rete nel file di configurazione o, se l'attributo è specificato, carica il modelPath modello dal disco.

  • networkDescription : contiene la descrizione della rete, tramite una voce NetworkBuilder di un attributo modelPath.

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

Questo metodo compila la rete dalla descrizione di rete nel file di configurazione o, se l'attributo è specificato, carica il modelPath modello dal disco. Sostituisce inoltre l'elenco di nodi di output dal file di configurazione, con l'elenco passato come argomento. Ciò consente al chiamante di recuperare i valori di output di altri nodi, ad esempio quelli nei livelli nascosti.

  • networkDescription : contiene la descrizione della rete, tramite una voce NetworkBuilder di un attributo modelPath.
  • outputNodeNames : elenco di nodi da contrassegnare come output, in modo che possano essere valutati.

void CreateNetwork(string networkDescription, int deviceId)

Questo metodo compila la rete dalla descrizione di rete nel file di configurazione. È semplicemente un metodo pratico che prepende deviceId=<deviceId> al networkDescription testo.

  • networkDescription : contiene la descrizione della rete, tramite una proprietà o un NetworkBuildermodelPath attributo.
  • deviceId : specifica il valore ID dispositivo da prependare alla proprietà della descrizione di deviceId rete.

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

Questo metodo compila la rete dalla descrizione di rete nel file di configurazione. È semplicemente un metodo pratico che prepende deviceId=<deviceId> al networkDescription testo.

  • networkDescription : contiene la descrizione della rete, tramite una voce NetworkBuilder di un attributo modelPath.
  • deviceId : specifica il valore ID dispositivo da prependare alla proprietà della descrizione di deviceId rete.
  • outputNodeNames : elenco di nodi da contrassegnare come output, in modo che possano essere valutati.

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

Questo metodo valuta la rete con un singolo passaggio avanti (nessun input) e restituisce i valori associati al livello outputKeyspecificato.

  • outputKey : nome del livello da cui restituire i valori.
  • outputSize : numero di valori nel livello di output.
    Questo metodo è deprecato. Usare invece il List<T> Evaluate(string outputKey) metodo .

List<T> Evaluate(string outputKey)

Questo metodo valuta la rete con un singolo passaggio avanti (nessun input) e restituisce i valori associati al livello outputKeyspecificato.

  • outputKey : nome del livello da cui restituire i valori. Internamente il metodo determina le dimensioni del buffer di dati necessarie per l'output e alloca il buffer necessario.

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

Questo metodo valuta la rete usando l'input fornito e recupera più livelli di output.

  • inputs : il mapping dei nomi dei livelli di input ai valori da usare come input alla rete.
  • outputs : il mapping dei nomi dei livelli di output del dizionario ai valori da recuperare dalla rete.

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

Questo metodo valuta una rete con l'input fornito e recupera un singolo livello di output

  • inputs : il mapping dei nomi dei livelli di input ai valori da usare come input alla rete.
  • outputKey : nome del livello di output desiderato.
  • outputSize : numero di valori nel livello di output.
    Questo metodo è deprecato. Usare invece il List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey) metodo .

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

Questo metodo valuta una rete con l'input fornito e recupera un singolo livello di output

  • inputs : il mapping dei nomi dei livelli di input ai valori da usare come input alla rete.
  • outputKey : nome del livello di output desiderato.
    Internamente il metodo determina le dimensioni del buffer di dati necessarie per l'output e alloca il buffer necessario.

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

Questo metodo valuta un'immagine bitmap e recupera un singolo livello di output

  • image : input dell'immagine bitmap in formato RGB. Deve essere già ridimensionato per corrispondere alle dimensioni previste dalla rete.
  • outputKey : nome del livello di output desiderato.
    Internamente il metodo estrae prima il vettore di funzionalità che contiene 3 canali e quindi lo inserisce come input nella rete. Alloca anche il buffer necessario per l'output.

Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)

Questo metodo restituisce un dizionario di elementi, con ogni elemento che esegue il mapping del nome del livello (chiave) alle dimensioni della dimensione. Il gruppo di nodi viene definito tramite l'enumerazione NodeGroup :

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

Esistono due implementazioni di questa interfaccia disponibili per il client gestito:

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

e

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

Esempio

Il programma CSEvalClient che si trova qui illustra l'utilizzo di questa interfaccia di valutazione.