我想将Mask-RCNN移植到tensorflow lite以便能够在我的android设备上使用它。 Tensorflow lite有一些教程展示了如何执行此操作,但是当您的模型具有扩展keras图层类的图层时,它们的说明将失败。特别是,这是我得到的错误:
/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/layers/serialization.py in deserialize(config, custom_objects)
87 module_objects=globs,
88 custom_objects=custom_objects,
---> 89 printable_module_name='layer')
/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/utils/generic_utils.py in deserialize_keras_object(identifier, module_objects, custom_objects, printable_module_name)
179 config = identifier
180 (cls, cls_config) = class_and_config_for_serialized_keras_object(
--> 181 config, module_objects, custom_objects, printable_module_name)
182
183 if hasattr(cls, 'from_config'):
/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/utils/generic_utils.py in class_and_config_for_serialized_keras_object(config, module_objects, custom_objects, printable_module_name)
164 cls = module_objects.get(class_name)
165 if cls is None:
--> 166 raise ValueError('Unknown ' + printable_module_name + ': ' + class_name)
167 return (cls, config['config'])
168
ValueError: Unknown layer: ProposalLayer
我用来导入keras模型的代码是:
converter = tf.lite.TFLiteConverter.from_keras_model_file('mrcnn.h5')
您知道如何解决此问题吗?
答案 0 :(得分:0)
保存Keras-h5仅了解标准图层。
这里有三种可能的解决方法:
1)from_keras_model方法具有一个称为custom_objects={"ProposalLayer":my_layers.ProposalLayer}
的参数。如果您将其传递给班级:UIViewControllerRepresentable
可能就可以了。
如重新加载模型here的要求
2)另一个选择是使用functional api定义模型,而keras保存和加载会更好地支持该模型。
3)使用save_format="tf"
参数。 TensorFlow-SavedModel可能不存在此问题,因为它保存了较低级别的表示形式。
答案 1 :(得分:-1)
custom_objects={"ProposalLayer":ProposalLayer}