将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 } 

https://github.com/ph1ps/Food101-CoreML

将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将是一件容易的事情。