Udostępnij za pośrednictwem


EvalDLL C# API

Dostępny jest interfejs zarządzany do oceny modeli bez konieczności odczytywania danych ani plików danych. Ten interfejs jest implementowany w kodzie zarządzanym interfejsu EvalWrapper wiersza polecenia wewnątrz biblioteki. Ta biblioteka z kolei używa Evaldll biblioteki do przeprowadzania rzeczywistych ocen sieci (w natywnym języku C++).

Nazwa interfejsu zarządzanego (w języku C#) jest następująca:

public interface IEvaluateModelManaged<T> : IDisposable

Gdzie T jest typem elementu (float lub double)

Ten interfejs udostępnia następujące metody:


void Init(string config)

Ta metoda inicjuje aparat oceny przy użyciu określonego pliku konfiguracji. Wpisy z pliku konfiguracji są analizowane i przypisywane do aparatu oceny, jednak sieć nie jest tworzona wewnątrz tego wywołania. Ponadto ta metoda domyślnie numCPUThreads ustawi właściwość na 1wartość , chyba że plik konfiguracji zawiera inną wartość dla tej właściwości.


void CreateNetwork(string networkDescription)

Ta metoda kompiluje sieć z opisu sieci w pliku konfiguracji lub jeśli modelPath określono atrybut, ładuje model z dysku.

  • networkDescription : zawiera opis sieci za pośrednictwem wpisu NetworkBuilder atrybutu modelPath.

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

Ta metoda kompiluje sieć z opisu sieci w pliku konfiguracji lub jeśli modelPath określono atrybut, ładuje model z dysku. Ponadto zastępuje listę węzłów wyjściowych z pliku konfiguracji, a lista przekazana jako argument. Dzięki temu obiekt wywołujący może pobierać wartości wyjściowe innych węzłów, takich jak te w ukrytych warstwach.

  • networkDescription : zawiera opis sieci za pośrednictwem wpisu NetworkBuilder atrybutu modelPath.
  • outputNodeNames : lista węzłów, które mają być oznaczone jako dane wyjściowe, aby można je było ocenić.

void CreateNetwork(string networkDescription, int deviceId)

Ta metoda tworzy sieć z opisu sieci w pliku konfiguracji. Jest to tylko metoda wygody, która poprzedza deviceId=<deviceId>networkDescription tekst.

  • networkDescription : zawiera opis sieci za pośrednictwem NetworkBuilder właściwości lub atrybutu modelPath .
  • deviceId : określa wartość identyfikatora urządzenia, która ma poprzedzać właściwość opisu deviceId sieci.

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

Ta metoda tworzy sieć z opisu sieci w pliku konfiguracji. Jest to tylko metoda wygody, która poprzedza deviceId=<deviceId>networkDescription tekst.

  • networkDescription : zawiera opis sieci za pośrednictwem wpisu NetworkBuilder atrybutu modelPath.
  • deviceId : określa wartość identyfikatora urządzenia, która ma poprzedzać właściwość opisu deviceId sieci.
  • outputNodeNames : lista węzłów, które mają być oznaczone jako dane wyjściowe, aby można je było ocenić.

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

Ta metoda ocenia sieć za pomocą pojedynczego przekazywania do przodu (bez danych wejściowych) i zwraca wartości skojarzone z określoną warstwą outputKey.

  • outputKey : nazwa warstwy, z których mają być zwracane wartości.
  • outputSize : liczba wartości w warstwie wyjściowej.
    Ta metoda jest przestarzała. Zamiast tego należy użyć List<T> Evaluate(string outputKey) metody .

List<T> Evaluate(string outputKey)

Ta metoda ocenia sieć za pomocą pojedynczego przekazywania do przodu (bez danych wejściowych) i zwraca wartości skojarzone z określoną warstwą outputKey.

  • outputKey : nazwa warstwy, z których mają być zwracane wartości. Wewnętrznie metoda określa wymagany rozmiar buforu danych dla danych wyjściowych i przydziela niezbędny bufor.

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

Ta metoda ocenia sieć przy użyciu podanych danych wejściowych i pobiera wiele warstw wyjściowych.

  • inputs : słownik mapuje nazwy warstw wejściowych na wartości, które mają być używane jako dane wejściowe w sieci.
  • outputs : słownik mapowania nazw warstw wyjściowych na wartości do pobrania z sieci.

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

Ta metoda ocenia sieć z podanymi danymi wejściowymi i pobiera pojedynczą warstwę danych wyjściowych

  • inputs : słownik mapuje nazwy warstw wejściowych na wartości, które mają być używane jako dane wejściowe w sieci.
  • outputKey : nazwa żądanej warstwy wyjściowej.
  • outputSize : liczba wartości w warstwie wyjściowej.
    Ta metoda jest przestarzała. Zamiast tego należy użyć List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey) metody .

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

Ta metoda ocenia sieć z podanymi danymi wejściowymi i pobiera pojedynczą warstwę danych wyjściowych

  • inputs : słownik mapuje nazwy warstw wejściowych na wartości, które mają być używane jako dane wejściowe w sieci.
  • outputKey : nazwa żądanej warstwy wyjściowej.
    Wewnętrznie metoda określa wymagany rozmiar buforu danych dla danych wyjściowych i przydziela niezbędny bufor.

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

Ta metoda ocenia obraz mapy bitowej i pobiera pojedynczą warstwę wyjściową

  • image : dane wejściowe obrazu mapy bitowej w formacie RGB. Rozmiar musi być już zmieniany, aby był zgodny z rozmiarem oczekiwanym przez sieć.
  • outputKey : nazwa żądanej warstwy wyjściowej.
    Metoda najpierw wyodrębnia wektor funkcji zawierający 3 kanały, a następnie przekaże go jako dane wejściowe do sieci. Przydziela również niezbędny bufor dla danych wyjściowych.

Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)

Ta metoda zwraca słownik elementów, a każdy element mapuje nazwę warstwy (klucz) na rozmiar wymiaru. Grupa węzłów jest definiowana NodeGroup za pomocą wyliczenia:

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

Istnieją dwie implementacje tego interfejsu dostępne dla zarządzanego klienta:

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

oraz

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

Przykład

Program CSEvalClient znajdujący się tutaj demonstruje użycie tego interfejsu oceny.