Unity3d 使用Barracuda在Unity中运行NX模型的意外模型输出 上下文
我试图使用ONNX格式的预训练模型对Unity中的图像数据进行推理。该模型作为名为modelAsset的资产链接到Unity中的执行组件。我正在为此使用Barracuda 1.0.0版,并执行以下模型:Unity3d 使用Barracuda在Unity中运行NX模型的意外模型输出 上下文,unity3d,pytorch,onnx,onnxruntime,barracuda,Unity3d,Pytorch,Onnx,Onnxruntime,Barracuda,我试图使用ONNX格式的预训练模型对Unity中的图像数据进行推理。该模型作为名为modelAsset的资产链接到Unity中的执行组件。我正在为此使用Barracuda 1.0.0版,并执行以下模型: // Initialisation this.model = ModelLoader.Load(this.modelAsset); this.worker = WorkerFactory.CreateWorker(WorkerFactory.Type.CSharpBurst, m
// Initialisation
this.model = ModelLoader.Load(this.modelAsset);
this.worker = WorkerFactory.CreateWorker(WorkerFactory.Type.CSharpBurst, model);
// Loop
Tensor tensor = new Tensor(1, IMAGE_H, IMAGE_W, 3, data);
worker.Execute(tensor);
Tensor modelOutput = worker.PeekOutput(OUTPUT_NAME);
进入输入张量(模型只有1个)的数据是h*w的图像数据,RGB值在-0.5和0.5之间有3个通道。模型有多个输出,我在上面显示的最后一行中检索到了这些输出
预期行为
使用相同的输入数据,PyTorch模型和转换后的ONNX模型在Python(ONNXRuntime和PyTorch)中生成与Unity中的Barracuda相同的输出数据
问题
在python中,ONNX和PyTorch模型都产生相同的输出。然而,在梭鱼中运行的相同ONNX模型产生不同的输出。区别主要在于,我们预计会出现热图,但梭鱼在这些模式中始终会产生介于0.001和-0.0004之间的值:
这使得模型权重似乎没有正确加载
我们发现了什么
当按照转换为ONNX时,我们发现如果在转换()之前没有在PyTorch net中将模型设置为推断模式,那么ONNXRuntime会在Python中生成这些相同的、不正确的结果。换句话说,这个推断模式似乎保存在ONNX模型中,由Python中的ONNXRuntime识别,但在Barracuda中不识别
我们的问题
一般而言:
- 我们如何让Unity中的Barracuda中的这个模型产生与Python中的ONNXRuntime/PyTorch相同的结果
- 推理模式是如何嵌入到ONNX文件中的,它是如何在ONNX运行时与Barracuda中使用的