EvalDLL C# API

데이터 판독기 또는 데이터 파일 없이 모델을 평가하는 데 사용할 수 있는 관리되는 인터페이스가 있습니다. 이 인터페이스는 라이브러리 내의 CLI 관리 코드에서 EvalWrapper 구현됩니다. 이 라이브러리는 차례로 라이브러리를 사용하여 Evaldll 실제 네트워크 평가(네이티브 C++)를 수행합니다.

관리되는 인터페이스 이름(C#)은 다음과 같습니다.

public interface IEvaluateModelManaged<T> : IDisposable

요소 형식(또는double)은 어디에 T 있나요?float

이 인터페이스는 다음 메서드를 제공합니다.


void Init(string config)

이 메서드는 지정된 구성 파일을 사용하여 평가 엔진을 초기화합니다. 구성 파일의 항목은 구문 분석되고 평가 엔진에 할당되지만 이 호출 내에 네트워크가 만들어지지 않습니다. 또한 구성 파일에 이 속성1numCPUThreads 대한 다른 값이 포함되지 않는 한 이 메서드는 속성을 기본값으로 설정합니다.


void CreateNetwork(string networkDescription)

이 메서드는 구성 파일의 네트워크 설명에서 네트워크를 빌드하거나 특성이 지정된 경우 modelPath 디스크에서 모델을 로드합니다.

  • networkDescription : modelPath 특성의 NetworkBuilder 항목을 통해 네트워크에 대한 설명을 포함합니다.

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

이 메서드는 구성 파일의 네트워크 설명에서 네트워크를 빌드하거나 특성이 지정된 경우 modelPath 디스크에서 모델을 로드합니다. 또한 구성 파일의 출력 노드 목록을 인수로 전달된 목록으로 바꿉니다. 이렇게 하면 호출자가 숨겨진 계층에 있는 노드와 같은 다른 노드의 출력 값을 검색할 수 있습니다.

  • networkDescription : modelPath 특성의 NetworkBuilder 항목을 통해 네트워크에 대한 설명을 포함합니다.
  • outputNodeNames : 출력으로 표시될 노드 목록이므로 평가할 수 있습니다.

void CreateNetwork(string networkDescription, int deviceId)

이 메서드는 구성 파일의 네트워크 설명에서 네트워크를 빌드합니다. 텍스트 앞에 deviceId=<deviceId>networkDescription 추가되는 편리한 메서드일 뿐입니다.

  • networkDescription: 속성 또는 modelPath 특성을 통해 네트워크에 대한 NetworkBuilder 설명을 포함합니다.
  • deviceId : 네트워크 설명의 deviceId 속성 앞에 추가할 디바이스 ID 값을 지정합니다.

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

이 메서드는 구성 파일의 네트워크 설명에서 네트워크를 빌드합니다. 텍스트 앞에 deviceId=<deviceId>networkDescription 추가되는 편리한 메서드일 뿐입니다.

  • networkDescription : modelPath 특성의 NetworkBuilder 항목을 통해 네트워크에 대한 설명을 포함합니다.
  • deviceId : 네트워크 설명의 deviceId 속성 앞에 추가할 디바이스 ID 값을 지정합니다.
  • outputNodeNames : 출력으로 표시될 노드 목록이므로 평가할 수 있습니다.

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

이 메서드는 단일 전달 패스(입력 없음)로 네트워크를 평가하고 지정된 계층 outputKey과 연결된 값을 반환합니다.

  • outputKey : 값을 반환할 계층 이름입니다.
  • outputSize : 출력 계층의 값 수입니다.
    이 메서드는 더 이상 사용되지 않습니다. 대신 메서드를 List<T> Evaluate(string outputKey) 사용합니다.

List<T> Evaluate(string outputKey)

이 메서드는 단일 전달 패스(입력 없음)로 네트워크를 평가하고 지정된 계층 outputKey과 연결된 값을 반환합니다.

  • outputKey : 값을 반환할 계층 이름입니다. 내부적으로 메서드는 출력에 필요한 데이터 버퍼 크기를 결정하고 필요한 버퍼를 할당합니다.

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

이 메서드는 제공된 입력을 사용하여 네트워크를 평가하고 여러 출력 계층을 검색합니다.

  • inputs : 입력 계층 이름을 네트워크에 대한 입력으로 사용할 값에 매핑하는 사전입니다.
  • outputs : 네트워크에서 검색할 값에 출력 계층 이름을 매핑하는 사전입니다.

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

이 메서드는 제공된 입력을 사용하여 네트워크를 평가하고 단일 출력 계층을 검색합니다.

  • inputs : 입력 계층 이름을 네트워크에 대한 입력으로 사용할 값에 매핑하는 사전입니다.
  • outputKey : 원하는 출력 계층의 이름입니다.
  • outputSize : 출력 계층의 값 수입니다.
    이 메서드는 더 이상 사용되지 않습니다. 대신 메서드를 List<T> Evaluate(Dictionary<string, List<T>> inputs, string outputKey) 사용합니다.

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

이 메서드는 제공된 입력을 사용하여 네트워크를 평가하고 단일 출력 계층을 검색합니다.

  • inputs : 입력 계층 이름을 네트워크에 대한 입력으로 사용할 값에 매핑하는 사전입니다.
  • outputKey : 원하는 출력 계층의 이름입니다.
    내부적으로 메서드는 출력에 필요한 데이터 버퍼 크기를 결정하고 필요한 버퍼를 할당합니다.

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

이 메서드는 비트맵 이미지를 평가하고 단일 출력 계층을 검색합니다.

  • image : RGB 형식의 비트맵 이미지 입력입니다. 네트워크에서 예상하는 크기와 일치하도록 크기가 이미 조정되어 있어야 합니다.
  • outputKey : 원하는 출력 계층의 이름입니다.
    내부적으로 메서드는 먼저 3개의 채널이 포함된 기능 벡터를 추출한 다음 네트워크에 대한 입력으로 공급합니다. 또한 출력에 필요한 버퍼를 할당합니다.

Dictionary<string, int> GetNodeDimensions(NodeGroup nodeGroup)

이 메서드는 각 항목이 계층 이름(키)을 차원 크기에 매핑하는 항목 사전을 반환합니다. 노드 그룹은 열거형을 NodeGroup 통해 정의됩니다.

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

관리되는 클라이언트에서 사용할 수 있는 이 인터페이스의 구현에는 다음 두 가지가 있습니다.

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

그리고

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

예제

여기에 있는 CSEvalClient 프로그램은 이 평가 인터페이스의 사용을 보여 줍니다 .