- 一般2D模型在IOS上部署都可以接收输入为image,也可以接收MLMultiArray,但一般采用前者,因为时间上快捷好几百ms(如果不介意这点时间无视)。
- IOS设备指定的MLMultiArray极为Python中的numpy,而图片读取的方式为PIL,所以如果是OpenCV进行的图片处理,记得通道的准确。而numpy和PIL image是可以互相转换的,因此部署阶段也可以选择图片或者数组。
- 下面给出转换代码:
import coremltools
import coremltools.proto.FeatureTypes_pb2 as ft
spec = coremltools.utils.load_spec("YourModel.mlmodel")
input = spec.description.input[0]
input.type.imageType.colorSpace = ft.ImageFeatureType.RGB
input.type.imageType.height = 224
input.type.imageType.width = 224
coremltools.utils.save_spec(spec, "YourNewModel.mlmodel")
这里完成输入从数组到图片转换,如果是灰度图或者OpenCV处理的图片,记得 colorSpace 设置为GRAYSCALE or BGR.。目前不支持四通道图片。如果自己做了图片预处理:归一化什么,记得加入相同操作。这些操作需要在转换时候加入。如mlmodel = ct.convert(model, inputs=[ct.ImageType(bias=[-1,-1,-1], scale=1/127)])
不是在这里,所以别搞错了。
结果从数组转换为图片操作相似:
output = spec.description.output[0]
import coremltools.proto.FeatureTypes_pb2 as ft
output.type.imageType.colorSpace = ft.ImageFeatureType.RGB
output.type.imageType.height = 300
output.type.imageType.width = 150
coremltools.utils.save_spec(spec, "YourNewModel.mlmodel")
同样如果是灰度图或者OpenCV处理的图片,记得 colorSpace 设置为GRAYSCALE or BGR.。目前不支持四通道图片。
如果你发现数组输入与图片输出结果不一样,除了预处理操作一样之外还是存在这问题或者报错WARNING:root:Output var XXX of type i32 in function main is cast to type fp32
,咨询我解决,方式见个人相似资料。
我叫谢琛,深度学习探索者一枚!(有意咨询xiec177)
tensorflow/pytorch交流群请加QQ:548368797
更多咨询咨询请关注!