EvalDLL C# API
Il existe une interface managée disponible pour évaluer les modèles sans nécessiter de lecteur de données ou de fichiers de données. Cette interface est implémentée dans le code managé CLI à l’intérieur de la EvalWrapper
bibliothèque. Cette bibliothèque utilise Evaldll
à son tour la bibliothèque pour effectuer les évaluations réseau réelles (en C++natif).
Le nom de l’interface managée (en C#) est le suivant :
public interface IEvaluateModelManaged<T> : IDisposable
Où T
est le type d’élément (float
ou double
)
Cette interface fournit les méthodes suivantes :
void Init(string config)
Cette méthode initialise le moteur d’évaluation avec le fichier de configuration spécifié. Les entrées du fichier de configuration sont analysées et affectées au moteur d’évaluation, mais le réseau n’est pas créé à l’intérieur de cet appel. En outre, cette méthode a pour valeur par défaut la numCPUThreads
propriété 1
, sauf si le fichier de configuration contient une valeur différente pour cette propriété.
void CreateNetwork(string networkDescription)
Cette méthode génère le réseau à partir de la description réseau dans le fichier de configuration ou si l’attribut modelPath
est spécifié, il charge le modèle à partir du disque.
networkDescription
: contient la description du réseau, soit par le biais d’une entrée NetworkBuilder d’un attribut modelPath.
void CreateNetwork(string networkDescription, List<string> outputNodeNames)
Cette méthode génère le réseau à partir de la description réseau dans le fichier de configuration ou si l’attribut modelPath
est spécifié, il charge le modèle à partir du disque. En outre, il remplace la liste des nœuds de sortie du fichier de configuration, par la liste passée en tant qu’argument. Cela permet à l’appelant de récupérer les valeurs de sortie d’autres nœuds, tels que ceux de la ou des couches masquées.
networkDescription
: contient la description du réseau, soit par le biais d’une entrée NetworkBuilder d’un attribut modelPath.outputNodeNames
: liste des nœuds à marquer comme sortie, afin qu’ils puissent être évalués.
void CreateNetwork(string networkDescription, int deviceId)
Cette méthode génère le réseau à partir de la description réseau dans le fichier de configuration. Il s’agit simplement d’une méthode pratique qui deviceId=<deviceId>
précède le networkDescription
texte.
networkDescription
: contient la description du réseau, via uneNetworkBuilder
propriété ou unmodelPath
attribut.deviceId
: spécifie la valeur d’ID de l’appareil à prépender à la propriété de la description dudeviceId
réseau.
void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)
Cette méthode génère le réseau à partir de la description réseau dans le fichier de configuration. Il s’agit simplement d’une méthode pratique qui deviceId=<deviceId>
précède le networkDescription
texte.
networkDescription
: contient la description du réseau, soit par le biais d’une entrée NetworkBuilder d’un attribut modelPath.deviceId
: spécifie la valeur d’ID de l’appareil à prépender à la propriété de la description dudeviceId
réseau.outputNodeNames
: liste des nœuds à marquer comme sortie, afin qu’ils puissent être évalués.
List<T> Evaluate(string outputKey, int outputSize)
Cette méthode évalue le réseau avec une seule passe de transfert (aucune entrée) et retourne les valeurs associées à la couche outputKey
spécifiée.
outputKey
: nom de couche à partir duquel retourner les valeurs.outputSize
: nombre de valeurs dans la couche de sortie.
Cette méthode est déconseillée. Utilisez plutôt laList<T> Evaluate(string outputKey)
méthode.
List<T> Evaluate(string outputKey)
Cette méthode évalue le réseau avec une seule passe de transfert (aucune entrée) et retourne les valeurs associées à la couche outputKey
spécifiée.
outputKey
: nom de couche à partir duquel retourner les valeurs. En interne, la méthode détermine la taille de mémoire tampon de données requise pour la sortie et alloue la mémoire tampon nécessaire.
void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)
Cette méthode évalue le réseau à l’aide de l’entrée fournie et récupère plusieurs couches de sortie.
inputs
: le dictionnaire mapper les noms de couche d’entrée aux valeurs à utiliser comme entrée sur le réseau.outputs
: le dictionnaire mapper les noms de couche de sortie aux valeurs à récupérer à partir du réseau.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)
Cette méthode évalue un réseau avec l’entrée fournie et récupère une couche de sortie unique
inputs
: le dictionnaire mapper les noms de couche d’entrée aux valeurs à utiliser comme entrée sur le réseau.outputKey
: nom de la couche de sortie souhaitée.outputSize
: nombre de valeurs dans la couche de sortie.
Cette méthode est déconseillée. Utilisez plutôt laList<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
méthode.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
Cette méthode évalue un réseau avec l’entrée fournie et récupère une couche de sortie unique
inputs
: le dictionnaire mapper les noms de couche d’entrée aux valeurs à utiliser comme entrée sur le réseau.outputKey
: nom de la couche de sortie souhaitée.
En interne, la méthode détermine la taille de mémoire tampon de données requise pour la sortie et alloue la mémoire tampon nécessaire.
List<T> EvaluateRgbImage(Bitmap image, string outputKey)
Cette méthode évalue une image bitmap et récupère une couche de sortie unique
image
: entrée d’image bitmap au format RVB. Il doit déjà être redimensionné pour correspondre à la taille attendue par le réseau.outputKey
: nom de la couche de sortie souhaitée.
En interne, la méthode extrait d’abord le vecteur de fonctionnalité qui contient 3 canaux, puis le alimente en tant qu’entrée sur le réseau. Il alloue également la mémoire tampon nécessaire pour la sortie.
Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)
Cette méthode retourne un dictionnaire d’éléments, chaque élément mappant le nom de couche (clé) à la taille de dimension. Le groupe de nœuds est défini via l’énumération NodeGroup
:
public enum class NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
Il existe deux implémentations de cette interface disponibles pour le client managé :
class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float
et
class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double
Exemple
Le programme CSEvalClient situé ici illustre l’utilisation de cette interface d’évaluation.