如何解释对象检测 ONNX 模型的输出值

问题描述 投票:0回答:1

我正在制作在 Hololens 2 上进行对象检测的 Unity 项目。 我使用 Azure Custom Vision 训练了一个探测器模型,并将其导出为 ONNX 文件并导入到我的 Unity 项目中。 我将纹理(相机捕获)转换为 Barracuda 张量。

        Tensor input = new Tensor(inputTexture, channels: inputChannels);

        worker.Execute(input);

        var output = worker.PeekOutput();
        float[] outputData = output.ToReadOnlyArray();

我不知道如何处理 var 输出以及如何解释输出数据。

我如何知道 inputTexture 是否包含我的自定义视觉模型中的标记对象?

我的模型的输出是 (n:1, h:13,w:13,c:30)

我不知道下一步该做什么。

unity-game-engine object-detection hololens onnx barracuda
1个回答
0
投票

这取决于您的模型给出的输出。

如果您的模型给出边界框作为输出,

假设有一个模型提供边界框作为输出,并且我们正在检测一个物体,比如说这里的电视

  1. 运行模型并获取输出

  2. 输出将是一维数组

  3. 获取您正在检测的类的数量,这里我们只有 1 个类

  4. 在边界框中,总共有 5 个与框相关的值和附加标签,具体取决于您有多少类(此处为 1),如下所示 -> xmin、ymin、xmax、ymax 和置信度或 xcenter、ycenter、宽度、高度和置信度,其余将是类标签置信度,有助于确定它属于哪个类 -> 例如。假设有 2 个标签 label0 和 label1,如果一个框属于 label0,则其值将接近 1,而同一框的标签 1 值将接近 0

  5. 您的输出存储在数组中,并且您正在检测一个类,因此您需要将该输出数组除以 5+类数 -> 5+1 -> 6,这将为您提供盒子的数量

  6. 在我们的例子中仅获取置信度高于特定值的框,假设为 0.25,并忽略其余框

  7. 如果您有多个同一类的对象,则应用 NMS,您将获得图像中对象的边界框

有关 Barracuda Unity 的更多信息 -> https://docs.unity3d.com/Packages/[电子邮件受保护]/manual/index.html

© www.soinside.com 2019 - 2024. All rights reserved.