我们已使用https://pytorch.org/tutorials/advanced/ONNXLive.html将pytorch模型转换为CoreML。在将图像输入CoreML模型之前,我们已经将图像调整为必要的规格。尽管如此,CoreML模型的输出仍会与pytorch模型产生不同(且不正确)的结果。
我们的机器学习模型用于识别图像中的特定对象。 在将图像发送到我们的模型之前,我们将其切成一个UIImage数组。使用for循环,我们在将每个图像发送到模型之前调整数组中每个图像的大小。该模型接受UIImage作为输入,并返回结果的整数0(未检测到对象)或1(检测到对象)。如果返回结果为1,则在数组中突出显示该特定图像。在for循环结束之后,我们合并数组元素以形成一个新的UIImage,其部分区域突出显示(指示包含该对象的位置)。
该模型在pytorch中可以正常工作,但是在将其转换为CoreML并与Swift结合使用后,我们遇到了一个问题,该问题使得该模型从输出为“ 1”的数组中识别出大多数图像(例如,如果我们将图像切成400个较小的部分,并将每个部分传递给模型,400个结果中的356个为“ 1”。)
我们怀疑此失败的原因是,在将输入图像发送到模型之前,我们没有对输入图像的每个像素值进行归一化。 使用CoreML时是否有必要对UIImage进行规范化,如果是这样,我们应该如何解决?