将UIImage转换为Keras模型的MLMultiArray
在Python中,我使用keras训练了一个图像分类模型,以接收[224,224,3]数组的input并输出一个预测(1或0)。 当我加载保存模型并将其加载到xcode中时,它指出input必须是MLMultiArray格式。
有没有办法让我把UIImage转换成MLMultiArray格式? 或者有没有办法让我改变我的keras模型接受CVPixelBuffertypes的对象作为input。
在您的核心ML转换脚本中,您可以提供参数image_input_names='data'
,其中data
是input的名称。
现在Core ML将把这个input视为一个图像( CVPixelBuffer
)而不是一个CVPixelBuffer
组。
没有尝试过,但是这里是如何完成FOOD101样品的
func preprocess(image: UIImage) -> MLMultiArray? { let size = CGSize(width: 299, height: 299) guard let pixels = image.resize(to: size).pixelData()?.map({ (Double($0) / 255.0 - 0.5) * 2 }) else { return nil } guard let array = try? MLMultiArray(shape: [3, 299, 299], dataType: .double) else { return nil } let r = pixels.enumerated().filter { $0.offset % 4 == 0 }.map { $0.element } let g = pixels.enumerated().filter { $0.offset % 4 == 1 }.map { $0.element } let b = pixels.enumerated().filter { $0.offset % 4 == 2 }.map { $0.element } let combination = r + g + b for (index, element) in combination.enumerated() { array[index] = NSNumber(value: element) } return array }
将caffe模型转换为MLModel
,需要添加以下代码:
image_input_names = 'data'
以我自己的转移脚本为例,脚本应该是这样的:
import coremltools coreml_model = coremltools.converters.caffe.convert(('gender_net.caffemodel', 'deploy_gender.prototxt'), image_input_names = 'data', class_labels = 'genderLabel.txt') coreml_model.save('GenderMLModel.mlmodel')
然后你的MLModel
的input数据将是CVPixelBufferRef
而不是MLMultiArray
。 将UIImage
传输到CVPixelBufferRef
将是一件容易的事情。