Xcode coreml推理结果因cpu和gpu而异

Xcode coreml推理结果因cpu和gpu而异,xcode,macos,coreml,mlmodel,Xcode,Macos,Coreml,Mlmodel,操作系统:macos Catalina 10.15.2 xcode:11.3 coreml3.0 我将相同的模型输入到相同的mlmodel。但是使用cpu设备和gpu设备的推理结果是不同的 结果如下:左边的文件是使用cpu的推断结果第二列,右边的文件是使用cpu和GPU的推断结果第二列。我使用beyond compare来比较这两个文件,用红色标记的数据就是差异 有人知道这个问题以及如何解决吗 这本身不是问题。在GPU上使用16位浮点,而在CPU上使用32位浮点。16位浮点的精度较低,这解释了您

操作系统:macos Catalina 10.15.2 xcode:11.3 coreml3.0

我将相同的模型输入到相同的mlmodel。但是使用cpu设备和gpu设备的推理结果是不同的

结果如下:左边的文件是使用cpu的推断结果第二列,右边的文件是使用cpu和GPU的推断结果第二列。我使用beyond compare来比较这两个文件,用红色标记的数据就是差异

有人知道这个问题以及如何解决吗


这本身不是问题。在GPU上使用16位浮点,而在CPU上使用32位浮点。16位浮点的精度较低,这解释了您得到的不同结果

有些数字会稍大一些,有些会稍小一些,但通常这些影响会抵消,你不会注意到差异


但是,如果您的模型生成图像,您可能会注意到16位浮点所提供的较低精度的像素瑕疵。

我还有两个问题。首先,我使用coremltools对模型进行了16位量化,但在设备上的推理速度并没有提高。只有模型尺寸减小了。其次,使用coremltools的16位量化,某些检测模型可能会丢失很多精度,但在设备GPU-16位上运行的模型不会丢失精度。那么,为什么设备上的gpuor npu-16位优于使用coremltools的量化-16位呢?他们用来量化MLM模型的方法是否不同?感谢@Matthijs HollemansQuantization只影响权重在模型中的存储方式,而不影响运行时发生的情况。在GPU/ANE上,无论权重是否量化,网络始终以16位浮点运行。