private LearningModelSession CreateLearningModelSession(LearningModel model, Nullable <LearningModelDeviceKind> kind = null) { var device = new LearningModelDevice(kind ?? SelectedDeviceKind); var options = new LearningModelSessionOptions() { CloseModelOnSessionCreation = true // Close the model to prevent extra memory usage }; var session = new LearningModelSession(model, device, options); return(session); }
private void DecryptAndEvauluate() { // Load the encrypted model. // The encrypted model (encrypted.onnx) is embedded as a resource in // the native binary: WinMLSamplesGalleryNative.dll. var inferenceModel = WinMLSamplesGalleryNative.EncryptedModels.LoadEncryptedResource(DecryptionKey.Password); var postProcessingModel = TensorizationModels.SoftMaxThenTopK(10); // Update the status var isModelDecrypted = inferenceModel != null; UpdateStatus(isModelDecrypted); // If loading the decrypted model failed (ie: due to an invalid key/password), // then skip performing evaluate. if (!isModelDecrypted) { return; } // Draw the image to classify in the Image control var decoder = ImageHelper.CreateBitmapDecoderFromPath("ms-appx:///InputData/hummingbird.jpg"); // Create sessions var device = new LearningModelDevice(LearningModelDeviceKind.Cpu); var options = new LearningModelSessionOptions() { CloseModelOnSessionCreation = true // Close the model to prevent extra memory usage }; var inferenceSession = new LearningModelSession(inferenceModel, device, options); var postProcessingSession = new LearningModelSession(postProcessingModel, device, options); // Classify the current image var softwareBitmap = decoder.GetSoftwareBitmapAsync().GetAwaiter().GetResult(); var input = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap); // Inference var inferenceResults = Evaluate(inferenceSession, input); var inferenceOutput = inferenceResults.Outputs.First().Value; // PostProcess var postProcessedOutputs = Evaluate(postProcessingSession, inferenceOutput); var topKValues = (TensorFloat)postProcessedOutputs.Outputs["TopKValues"]; var topKIndices = (TensorInt64Bit)postProcessedOutputs.Outputs["TopKIndices"]; // Return results var probabilities = topKValues.GetAsVectorView(); var indices = topKIndices.GetAsVectorView(); var labels = indices.Select((index) => ClassificationLabels.ImageNet[index]); // Render the classification and probabilities RenderInferenceResults(labels, probabilities); }
private LearningModelSession CreateLearningModelSession(LearningModel model, bool closeModel = true) { var device = IsCpu ? cpuDevice : dmlDevice; var options = new LearningModelSessionOptions() { CloseModelOnSessionCreation = closeModel, // Close the model to prevent extra memory usage BatchSizeOverride = 0 }; var session = new LearningModelSession(model, device, options); return(session); }
private async Task <LearningModelSession> CreateLearningModelSession(LearningModel model, int batchSizeOverride = -1) { var deviceKind = DeviceComboBox.GetDeviceKind(); var device = new LearningModelDevice(deviceKind); var options = new LearningModelSessionOptions(); if (batchSizeOverride > 0) { options.BatchSizeOverride = (uint)batchSizeOverride; } var session = new LearningModelSession(model, device, options); return(session); }
private LearningModelSession CreateLearningModelSession(LearningModel model) { var kind = (DeviceComboBox.SelectedIndex == 0) ? LearningModelDeviceKind.Cpu : LearningModelDeviceKind.DirectXHighPerformance; var device = new LearningModelDevice(kind); var options = new LearningModelSessionOptions() { CloseModelOnSessionCreation = true // Close the model to prevent extra memory usage }; var session = new LearningModelSession(model, device, options); return(session); }