EvalDLL C#-API
Es gibt eine verwaltete Schnittstelle für die Auswertung von Modellen, ohne dass eine Datenleser- oder Datendatei erforderlich ist. Diese Schnittstelle wird in verwaltetem CLI-Code in der EvalWrapper
Bibliothek implementiert. Diese Bibliothek verwendet Evaldll
wiederum die Bibliothek, um die tatsächlichen Netzwerkauswertungen (in systemeigenem C++) auszuführen.
Der Name der verwalteten Schnittstelle (in C#) lautet wie folgt:
public interface IEvaluateModelManaged<T> : IDisposable
Dabei T
handelt es sich um den Elementtyp (float
oder double
)
Diese Schnittstelle stellt die folgenden Methoden bereit:
void Init(string config)
Diese Methode initialisiert das Auswertungsmodul mit der angegebenen Konfigurationsdatei. Die Einträge aus der Konfigurationsdatei werden analysiert und dem Auswertungsmodul zugewiesen, das Netzwerk wird jedoch nicht innerhalb dieses Aufrufs erstellt. Darüber hinaus wird diese Methode standardmäßig auf die numCPUThreads
Eigenschaft 1
festgelegt, es sei denn, die Konfigurationsdatei enthält einen anderen Wert für diese Eigenschaft.
void CreateNetwork(string networkDescription)
Diese Methode erstellt das Netzwerk entweder aus der Netzwerkbeschreibung in der Konfigurationsdatei oder wenn das modelPath
Attribut angegeben wird, lädt es das Modell vom Datenträger.
networkDescription
: enthält die Beschreibung des Netzwerks, entweder über einen NetworkBuilder-Eintrag eines ModelPath-Attributs.
void CreateNetwork(string networkDescription, List<string> outputNodeNames)
Diese Methode erstellt das Netzwerk entweder aus der Netzwerkbeschreibung in der Konfigurationsdatei oder wenn das modelPath
Attribut angegeben wird, lädt es das Modell vom Datenträger. Darüber hinaus wird die Liste der Ausgabeknoten aus der Konfigurationsdatei durch die als Argument übergebene Liste ersetzt. Dadurch kann der Aufrufer die Ausgabewerte anderer Knoten abrufen, z. B. die in den ausgeblendeten Ebenen(n).
networkDescription
: enthält die Beschreibung des Netzwerks, entweder über einen NetworkBuilder-Eintrag eines ModelPath-Attributs.outputNodeNames
: Liste der Knoten, die als Ausgabe gekennzeichnet werden sollen, damit sie ausgewertet werden können.
void CreateNetwork(string networkDescription, int deviceId)
Diese Methode erstellt das Netzwerk aus der Netzwerkbeschreibung in der Konfigurationsdatei. Es handelt sich lediglich um eine Komfortmethode, die dem networkDescription
Text vorangestellt deviceId=<deviceId>
ist.
networkDescription
: enthält die Beschreibung des Netzwerks, entweder über eineNetworkBuilder
Eigenschaft oder einmodelPath
Attribut.deviceId
: gibt den Geräte-ID-Wert an, der der Eigenschaft derdeviceId
Netzwerkbeschreibung vorangestellt wird.
void CreateNetwork(string networkDescription, int deviceId, List<string> outputNodeNames)
Diese Methode erstellt das Netzwerk aus der Netzwerkbeschreibung in der Konfigurationsdatei. Es handelt sich lediglich um eine Komfortmethode, die dem networkDescription
Text vorangestellt deviceId=<deviceId>
ist.
networkDescription
: enthält die Beschreibung des Netzwerks, entweder über einen NetworkBuilder-Eintrag eines ModelPath-Attributs.deviceId
: gibt den Geräte-ID-Wert an, der der Eigenschaft derdeviceId
Netzwerkbeschreibung vorangestellt wird.outputNodeNames
: Liste der Knoten, die als Ausgabe gekennzeichnet werden sollen, damit sie ausgewertet werden können.
List<T> Evaluate(string outputKey, int outputSize)
Diese Methode wertet das Netzwerk mit einem einzelnen Weiterleitungsdurchlauf (keine Eingabe) aus und gibt die Werte zurück, die der angegebenen Ebene outputKey
zugeordnet sind.
outputKey
: Layername, aus dem die Werte zurückgegeben werden sollen.outputSize
: Anzahl der Werte auf der Ausgabeebene.
Diese Methode ist als veraltet markiert. Verwenden Sie stattdessen dieList<T> Evaluate(string outputKey)
Methode.
List<T> Evaluate(string outputKey)
Diese Methode wertet das Netzwerk mit einem einzelnen Weiterleitungsdurchlauf (keine Eingabe) aus und gibt die Werte zurück, die der angegebenen Ebene outputKey
zugeordnet sind.
outputKey
: Layername, aus dem die Werte zurückgegeben werden sollen. Intern bestimmt die Methode die erforderliche Datenpuffergröße für die Ausgabe und weist den erforderlichen Puffer zu.
void Evaluate(Dictionary<string, List<T>> inputs, Dictionary<string, List<T>> outputs)
Diese Methode wertet das Netzwerk mithilfe der bereitgestellten Eingabe aus und ruft mehrere Ausgabeebenen ab.
inputs
: Die Wörterbuchzuordnung von Eingabeschichtnamen zu Werten, die als Eingabe für das Netzwerk verwendet werden sollen.outputs
: Die Wörterbuchzuordnung von Ausgabeschichtnamen zu Werten, die aus dem Netzwerk abgerufen werden sollen.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey, int outputSize)
Diese Methode wertet ein Netzwerk mit der bereitgestellten Eingabe aus und ruft eine einzelne Ausgabeschicht ab.
inputs
: Die Wörterbuchzuordnung von Eingabeschichtnamen zu Werten, die als Eingabe für das Netzwerk verwendet werden sollen.outputKey
: der Name der gewünschten Ausgabeebene.outputSize
: die Anzahl der Werte auf der Ausgabeebene.
Diese Methode ist als veraltet markiert. Verwenden Sie stattdessen dieList<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
Methode.
List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey)
Diese Methode wertet ein Netzwerk mit der bereitgestellten Eingabe aus und ruft eine einzelne Ausgabeschicht ab.
inputs
: Die Wörterbuchzuordnung von Eingabeschichtnamen zu Werten, die als Eingabe für das Netzwerk verwendet werden sollen.outputKey
: der Name der gewünschten Ausgabeebene.
Intern bestimmt die Methode die erforderliche Datenpuffergröße für die Ausgabe und weist den erforderlichen Puffer zu.
List<T> EvaluateRgbImage(Bitmap image, string outputKey)
Diese Methode wertet ein Bitmapbild aus und ruft eine einzelne Ausgabeebene ab.
image
: die Bitmapbildeingabe im RGB-Format. Es muss bereits neu angepasst werden, um der von dem Netzwerk erwarteten Größe zu entsprechen.outputKey
: der Name der gewünschten Ausgabeebene.
Intern extrahiert die Methode zunächst den Featurevektor, der 3 Kanäle enthält, und feedt ihn dann als Eingabe in das Netzwerk. Außerdem wird der erforderliche Puffer für die Ausgabe zugewiesen.
Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)
Diese Methode gibt ein Wörterbuch von Elementen zurück, wobei jedes Element den Layernamen (Schlüssel) der Dimensionsgröße zugeordnet. Die Knotengruppe wird über die NodeGroup
Enumeration definiert:
public enum class NodeGroup
{
nodeInput, // an input node
nodeOutput, // an output node
nodeSpecified
};
Es gibt zwei Implementierungen dieser Schnittstelle für den verwalteten Client:
class IEvaluateModelManagedF : IEvaluateModelManaged<float> // Assumes data elements of type float
und
class IEvaluateModelManagedD : IEvaluateModelManaged<double> // Assumes data elements of type double
Beispiel
Das CSEvalClient-Programm hier zeigt die Verwendung dieser Auswertungsschnittstelle.