Coremltools 无法成功将输出更改为图像

Posted

技术标签:

【中文标题】Coremltools 无法成功将输出更改为图像【英文标题】:Coremltools cannot successfully change the output to an image 【发布时间】:2020-11-12 20:16:16 【问题描述】:

我已使用 coremltools 4.0 将 Keras 模型转换为 MLModel,但成功有限。它有效,但前提是我使用 MLMultiArray 作为输出并转换为图像。转换为图像比推理需要更长的时间;使其无法使用它适用于 TensorFlow 1 和 coremltools 3.4,但现在不适用于 TensorFlow 2 和 coremltools 4.0b1。添加一个新层来转换 [0,1] -> [0, 255] 的输出并不能解决问题。我们还意识到,一些额外的层是由 cormel 自动添加的,这可能是问题所在。这里有image

我尝试使用 np.transpose 转置输入,但它没有解决问题,而是创建了一个新问题。如果输入遵循格式 (3, 256, 256) 我收到以下错误:

运行时错误: NSLocalizedDescription = "输入图像特征 input_1 与模型描述不匹配"; NSUnderlyingError = "错误域=com.apple.CoreML 代码=0 "图像高度 (256) 不在允许范围内 (200..400)" UserInfo=NSLocalizedDescription=图像高度 (256) 不在允许范围内 (200. .400)";

但是如果大小是 (256, 256, 3) 我得到以下错误:

NSLocalizedDescription = "将输出 output_1 转换为图像失败"; NSUnderlyingError = "Error Domain=com.apple.CoreML Code=0 "无效的数组形状 (\n 256,\n 256,\n 1\n) 用于转换为灰度图像" UserInfo=NSLocalizedDescription=无效的数组形状 (\n 256,\n 256,\n 1\n) 用于转换为灰度图像";

你有什么想法吗?

【问题讨论】:

见这里:***.com/questions/63006397/… 是的,我知道。我尝试添加评论以添加此信息,但我的评论被删除了,因为“这并不能真正回答问题。如果您有其他问题,可以通过单击来提问。” 看起来是同一个问题?无论如何,这可能是一个 coremltools v4 问题,因为它仍处于测试阶段。 Core ML 中图像的正确形状是 (3, 256, 256) 和 (1, 256, 256),而不是 (256, 256, 3) 或 (256, 256, 1)。 【参考方案1】:

我们发现了错误!问题是转置层会自动添加错误的索引。为了解决它,我们使用以下解决方法:

transpose_layer = mlmodel_spec.neuralNetwork.layers[-4].transpose
del transpose_layer.axes[:]
transpose_layer.axes.extend([0, 1, 2, 3])

【讨论】:

以上是关于Coremltools 无法成功将输出更改为图像的主要内容,如果未能解决你的问题,请参考以下文章

如何将ProfilePictureView更改为圆形图像。 Drawable无法正常工作

当方向从横向更改为纵向时,UInavigationbar 背景图像无法正确调整大小

C# 类库 - 将图像构建操作更改为资源会将其从项目中删除

我可以在删除所述类别时将图像的 category_id 更改为 null 吗?

将 URL 更改为文件(Parse.com 使用 Javascript CloudCode)

输入类型数字使用逗号 - 将点更改为逗号