[英]Custom CoreML output layer that sums multiArray output
[英]MLModel works with MultiArray output but cannot successfully change the output to an image
我已使用 coremltools 4.0 将 Keras model 转换为 MLModel,但成功有限。
它有效,但前提是我为 output 使用 MLMultiArray 并转换为图像。 转换为图像比推理需要更长的时间; 使其无法使用。
如果我尝试更改 MLModel 规范以使用 output 的图像,我会收到此错误运行预测:
无法将 output 身份转换为图像:
NSUnderlyingError=0x2809bad00 {Error Domain=com.apple.CoreML Code=0 "无效的数组形状 (2048, 2048, 3) 用于转换为灰度图像"
即使我为 output 颜色指定了RGB :
output { 名称:“身份”类型 { imageType { 宽度:2048 高度:2048 颜色空间: RGB } } }
如果我使用 MultiArray (有效) Xcode 报告:
output:Float32 1 x 2048 x 2048 x 3 阵列
我怀疑问题出在第一个维度,即批号,但没有显示任何维度,所以我无法删除批次维度:
output { 名称:“身份”类型 { multiArrayType { dataType: FLOAT32 } } }
我不认为我可以将 output 形状添加到 Keras Conv2D output 层,因为它有多个不同形状的入站节点。 以下是 output 形状:
>>> print(outputLayer.get_output_shape_at(0))
(None, None, None, 3)
>>> print(outputLayer.get_output_shape_at(1))
(1, 512, 512, 3)
>>> print(outputLayer.get_output_shape_at(2))
(1, 2048, 2048, 3)
>>> print(outputLayer.output)
Tensor("SR/Identity:0", shape=(None, None, None, 3), dtype=float32)
我认为 coremltools 混淆了通道的批次,这就是为什么即使我指定 RGB 也尝试创建灰度图像的原因。
知道如何解决吗?
我有原始的 Keras model,但我看不到如何在没有批次尺寸的情况下指定形状。 这里是Keras model层描述的开始和结束
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
LR_input (InputLayer) [(None, None, None, 0
__________________________________________________________________________________________________
Pre_blocks_conv (Conv2D) multiple 896 LR_input[0][0]
__________________________________________________________________________________________________
F_1_1_1 (Conv2D) multiple 9248 Pre_blocks_conv[0][0]
... multiple
... multiple
SR (Conv2D) multiple 84 PixelShuffle[0][0]
==================================================================================================
在 Core ML 中,尺寸的顺序是(通道、高度、宽度),因此它期望看到 3 x 2048 x 2048 output 而不是 2048 x 2048 x 3。
请注意,您还需要确保 output 像素在 [0, 255] 而不是 [0, 1] 范围内,这可能是您的 Keras Z20F35E630DAF44DBFA4C3F68F5399DC8 给您的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.