我正在制作在 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)
我不知道下一步该做什么。
这取决于您的模型给出的输出。
如果您的模型给出边界框作为输出,
假设有一个模型提供边界框作为输出,并且我们正在检测一个物体,比如说这里的电视
运行模型并获取输出
输出将是一维数组
获取您正在检测的类的数量,这里我们只有 1 个类
在边界框中,总共有 5 个与框相关的值和附加标签,具体取决于您有多少类(此处为 1),如下所示 -> xmin、ymin、xmax、ymax 和置信度或 xcenter、ycenter、宽度、高度和置信度,其余将是类标签置信度,有助于确定它属于哪个类 -> 例如。假设有 2 个标签 label0 和 label1,如果一个框属于 label0,则其值将接近 1,而同一框的标签 1 值将接近 0
您的输出存储在数组中,并且您正在检测一个类,因此您需要将该输出数组除以 5+类数 -> 5+1 -> 6,这将为您提供盒子的数量
在我们的例子中仅获取置信度高于特定值的框,假设为 0.25,并忽略其余框
如果您有多个同一类的对象,则应用 NMS,您将获得图像中对象的边界框
有关 Barracuda Unity 的更多信息 -> https://docs.unity3d.com/Packages/[电子邮件受保护]/manual/index.html