如何在iOS(或Android)应用程序中使用keras h5型号
我用keras retinanet 50训练了一个模型,现在我有了一个h5文件,在用静态图像测试它时效果非常好 我很想在iOS(和/或Android)应用程序中使用它,但我无法将其转换为coreml:如何在iOS(或Android)应用程序中使用keras h5型号,keras,coreml,Keras,Coreml,我用keras retinanet 50训练了一个模型,现在我有了一个h5文件,在用静态图像测试它时效果非常好 我很想在iOS(和/或Android)应用程序中使用它,但我无法将其转换为coreml: import coremltools coreml_model = coremltools.converters.keras.convert(model) # => error occurs coreml_model.save('my_model.mlmodel') 错误是 ---
import coremltools
coreml_model = coremltools.converters.keras.convert(model) # => error occurs
coreml_model.save('my_model.mlmodel')
错误是
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-7-ba230c07a72c> in <module>()
1 import coremltools
----> 2 coreml_model = coremltools.converters.keras.convert(model)
3 # Saving the Core ML model to a file.
4 coreml_model.save('my_model.mlmodel')
/home/jonas/projects/keras/keras-env/local/lib/python2.7/site-packages/coremltools/converters/keras/_keras_converter.pyc in convert(model, input_names, output_names, image_input_names, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, model_precision, predicted_probabilities_output, add_custom_layers, custom_conversion_functions)
743 predicted_probabilities_output,
744 add_custom_layers,
--> 745 custom_conversion_functions=custom_conversion_functions)
746
747 return _MLModel(spec)
/home/jonas/projects/keras/keras-env/local/lib/python2.7/site-packages/coremltools/converters/keras/_keras_converter.pyc in convertToSpec(model, input_names, output_names, image_input_names, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, model_precision, predicted_probabilities_output, add_custom_layers, custom_conversion_functions, custom_objects)
541 add_custom_layers=add_custom_layers,
542 custom_conversion_functions=custom_conversion_functions,
--> 543 custom_objects=custom_objects)
544 else:
545 raise RuntimeError(
/home/jonas/projects/keras/keras-env/local/lib/python2.7/site-packages/coremltools/converters/keras/_keras2_converter.pyc in _convert(model, input_names, output_names, image_input_names, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, predicted_probabilities_output, add_custom_layers, custom_conversion_functions, custom_objects)
185
186 # Check valid versions
--> 187 _check_unsupported_layers(model, add_custom_layers)
188
189 # Build network graph to represent Keras model
/home/jonas/projects/keras/keras-env/local/lib/python2.7/site-packages/coremltools/converters/keras/_keras2_converter.pyc in _check_unsupported_layers(model, add_custom_layers)
98 else:
99 if type(layer) not in _KERAS_LAYER_REGISTRY:
--> 100 raise ValueError("Keras layer '%s' not supported. " % str(type(layer)))
101 if isinstance(layer, _keras.layers.wrappers.TimeDistributed):
102 if type(layer.layer) not in _KERAS_LAYER_REGISTRY:
ValueError: Keras layer '<class 'keras_resnet.layers._batch_normalization.BatchNormalization'>' not supported.
然后
import coremltools
coreml_model = coremltools.converters.keras.convert(model, custom_conversion_functions={"BatchNormalization": BatchNormalization})
但是我仍然得到相同的错误…在推理过程中也使用了批处理规范化,核心ML确实支持它 但是,
keras\u resnet.layers.\u batch\u normalization.BatchNormalization
不是keras的标准BatchNormalization层,因此coremltools不了解如何处理它
好消息是:这个新的BatchNormalization层扩展了Keras标准的BatchNormalization层,因此可以使您的模型与Core ML一起工作
三种选择:
BatchNormalLayerParams
对象。有关如何在coremltools中处理自定义图层的更多信息:keras\u resnet.layers.\u batch\u normalization.BatchNormalization
层替换为keras.layers.BatchNormalization
层,然后像往常一样运行coremltoolskeras_resnet.layers._batch_normalization.BatchNormalization: _layers2.convert_batchnorm,
就像这里:
您还必须将keras\u resnet
导入此文件,否则coremltools将无法找到此模块。然后像往常一样运行coremltools谢谢我尝试了选项1)-所以我将
coremltools.converters.keras.convert(model)
更改为coremltools.converters.keras.convert(model,自定义转换函数={“BatchNormalization”:…})
,对吗?但我不能准确地得到我必须输入的值,即def函数应该是什么样子,我需要将其放入其中…这不是custom\u conversion\u函数
的工作方式。您必须编写一个函数来接受这个定制的BatchNormalization层,并将其转换为核心ML所理解的内容。我在答案中添加了一个选项3,这可能是最简单的解决方案。谢谢,似乎我又向前迈出了一步:Keras层“”不受支持。
如果您能帮助我解决这个问题,那将非常棒,我将尽快添加一个悬赏,并奖励您!看起来您需要为其编写一个转换函数。Core ML确实有上采样层,但coremltools不知道keras\u retinanet.layers.\u misc.UpsampleLike是上采样层。
keras_resnet.layers._batch_normalization.BatchNormalization: _layers2.convert_batchnorm,