我最近在Google的Vision平台上训练了一个对象检测模型,并将其导出为TensorFlow Lite边缘模型。
当在带有CoreML委托的iOS设备上运行时,我在Xcode中收到此错误:
验证器错误:池化层'PoolingLayerBuilder (MEAN)_1'的填充类型未设置。
当在iOS上使用TensorFlow lite与CoreML委托运行时,我得到这个错误:
编译模型错误读取protobuf规格错误验证器错误:池化层'PoolingLayerBuilder (MEAN)_1'的填充类型未设置。
以下是我到目前为止所做的尝试:
- 更新我的pod以确保我在tensorflowlitesswift夜间构建
- 仅在CPU上运行(模型工作,所以我知道这是一个CoreML委托问题)
- 确保CoreMLDelegate使用最新版本的CoreML (3)
下一步?
-
尝试修改TFLite文件本身以设置池层的填充类型。如何做到这一点并不明显
-
尝试修改CoreML委托设置填充类型为默认值?在这个文件的某个地方?https://github.com/tensorflow/tensorflow/blob/nightly/tensorflow/lite/delegates/coreml/builders/pooling_layer_builder.cc L54
这是正确的方法吗?还是有我没有看到的更简单的解决方案?
为了编辑TFlite模型,我建议您使用这个名为neutron的python库。我还没有用对象检测模型进行测试[我会在当天更新此评论],但是,我设法访问了模型本身并修改了它的配置。
安装tron时,调用模型。tflite作为netron 'model.tflite'
,服务器链接将显示在命令shell中。当您单击它时,您将可以访问模型的图形模式。当你点击一个图层时,会显示一组属性,你可以在那里修改。我设法注意到这要感谢这个github评论。我想这会解决你的问题。
同时,一旦我有了一个新的对象检测用例的部署模型,我将尝试修改我的模型的CoreML版本。我会随时更新!
让我知道到目前为止这是否对你有帮助。
你可以试试:
- 使用tensorflow-onnx将模型转换为。onnx格式。 而不是转换。tflite到CoreML模型,你可以尝试转换tensorflow模型(。h5, SavedModel, tf.keras。模型,具体功能)直接到CoreML。参考:Tensorflow 2转换