C# Pix2pixHD的推理

C# Pix2pixHD的推理,c#,machine-learning,artificial-intelligence,inference,onnx,C#,Machine Learning,Artificial Intelligence,Inference,Onnx,我用UWP训练了一个模型,然后将它导出到onnx,我想用C#使用UWP进行推理 Pix2PixHD所需的输入为: 1个语义标签图像(512x1024灰度) 1个图像实例(512x1024灰度) 培训期间用作热顶点的标签数量(例如--label_nc 16) 我可以用python测试我的模型,但我不知道如何用C#绑定它,所以我非常感谢任何帮助 以下是我的模型在WinML仪表板中的工作方式: 这是WinMLRunner中的外观: 这是从Visual Studio生成的代码: using Sy

我用UWP训练了一个模型,然后将它导出到onnx,我想用C#使用UWP进行推理

Pix2PixHD所需的输入为:

  • 1个语义标签图像(512x1024灰度)

  • 1个图像实例(512x1024灰度)

  • 培训期间用作热顶点的标签数量(例如--label_nc 16)

我可以用python测试我的模型,但我不知道如何用C#绑定它,所以我非常感谢任何帮助

以下是我的模型在WinML仪表板中的工作方式:

这是WinMLRunner中的外观:

这是从Visual Studio生成的代码:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Windows.Media;
using Windows.Storage;
using Windows.Storage.Streams;
using Windows.AI.MachineLearning;
namespace Onnx_test_02
{

    public sealed class Input
    {
        public TensorFloat label; // shape(1,1,512,1024)
        public TensorInt8Bit inst; // shape(1,1,512,1024)
    }

    public sealed class Output
    {
        public TensorFloat synthesized_image; // shape(1,3,512,1024)
    }

    public sealed class Model
    {
        private LearningModel model;
        private LearningModelSession session;
        private LearningModelBinding binding;
        public static async Task<Model> CreateFromStreamAsync(IRandomAccessStreamReference stream)
        {
            Model learningModel = new Model();
            learningModel.model = await LearningModel.LoadFromStreamAsync(stream);
            learningModel.session = new LearningModelSession(learningModel.model);
            learningModel.binding = new LearningModelBinding(learningModel.session);
            return learningModel;
        }
        public async Task<Output> EvaluateAsync(Input input)
        {
            binding.Bind("label", input.label);
            binding.Bind("inst", input.inst);
            var result = await session.EvaluateAsync(binding, "0");
            var output = new Output();
            output.synthesized_image = result.Outputs["synthesized_image"] as TensorFloat;
            return output;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Threading.Tasks;
使用Windows.Media;
使用Windows.Storage;
使用Windows.Storage.Streams;
使用Windows.AI.MachineLearning;
名称空间Onnx\u测试\u 02
{
公共密封类输入
{
公共TensorFloat标签;//形状(1,15121024)
公共张力仪8bit inst;//形状(1,15121024)
}
公共密封类输出
{
公共TensorFloat合成_image;//形状(1,35121024)
}
公共密封类模型
{
私人学习模式;
私人学习模式课程;
私人学习模式绑定;
公共静态异步任务CreateFromStreamAsync(IRandomAccessStreamReference流)
{
模型学习模型=新模型();
learningModel.model=等待learningModel.LoadFromStreamAsync(流);
learningModel.session=新建LearningModelSession(learningModel.model);
learningModel.binding=新的LearningModelBinding(learningModel.session);
回归学习模型;
}
公共异步任务EvaluateAsync(输入)
{
binding.Bind(“label”,输入.label);
binding.Bind(“inst”,input.inst);
var result=wait session.EvaluateAsync(绑定,“0”);
变量输出=新输出();
output.synthesisted_image=result.Outputs[“synthesisted_image”]为TensorFloat;
返回输出;
}
}
}