如何在 Tensorflow Lite 上为 CoreML 委托设置填充类型以修复未设置“PoolingLayerBuilder (MEAN)_1”。
Posted
技术标签:
【中文标题】如何在 Tensorflow Lite 上为 CoreML 委托设置填充类型以修复未设置“PoolingLayerBuilder (MEAN)_1”。【英文标题】:How to set Padding Type for CoreML Delegate on Tensorflow Lite to fix `PoolingLayerBuilder (MEAN)_1' is not set.`? 【发布时间】:2021-10-08 17:49:32 【问题描述】:我最近在 Google 的 Vision 平台上训练了一个对象检测模型,并将其导出到 TensorFlow Lite 边缘模型。
在带有 CoreML 委托的 ios 设备上运行时,我在 Xcode 中收到此错误:
验证器错误:未设置池化层“PoolingLayerBuilder (MEAN)_1”的填充类型。
当使用带有 CoreML 委托的 TensorFlow lite 在 iOS 上运行时,我收到此错误:
错误编译模型错误读取 protobuf 规范。验证器错误:未设置池化层“PoolingLayerBuilder (MEAN)_1”的填充类型。
这是我迄今为止尝试过的:
更新我的 pod 以确保我使用的是 TensorFlowLiteSwift 夜间版本 仅在 CPU 上运行(该模型有效,所以我知道这是一个 CoreML 委托问题) 确保 CoreMLDelegate 使用的是最新版本的 CoreML (3)接下来的步骤?
尝试修改 TFLite 文件本身,以某种方式为池化层设置填充类型。如何做到这一点并不明显
尝试修改 CoreML 委托以将填充类型设置为默认值?在这个文件的某个地方? https://github.com/tensorflow/tensorflow/blob/nightly/tensorflow/lite/delegates/coreml/builders/pooling_layer_builder.cc#L54
这是正确的方法还是我没有看到更简单的解决方案?
【问题讨论】:
【参考方案1】:为了编辑一个 TFlite 模型,我推荐你使用这个名为 Netron 的 Python 库。我还没有使用对象检测模型对此进行测试[我将在当天更新此评论],但是,我设法访问了模型本身并修改了它的配置。
当您安装 Netron 并将 model.tflite 称为 netron 'model.tflite'
时,服务器链接将显示在您的命令 shell 中。单击它时,您将可以访问模型的图形模式。单击图层时,将显示一组属性,您可以在其中进行修改。感谢github comments,我设法注意到了这一点。我想这会让你解决你的问题。
同时,一旦我有一个对象检测案例的新部署模型,我将尝试修改我的模型的 CoreML 版本。我会及时通知你的!
让我知道到目前为止这是否对您有所帮助。
【讨论】:
【参考方案2】:你可以尝试一些事情:
-
使用 tensorflow-onnx 将模型转换为 .onnx 格式。
您可以尝试将 tensorflow 模型(.h5,SavedModel,tf.keras.Model,具体函数)直接转换为 CoreML,而不是将 .tflite 转换为 CoreML 模型。参考:Tensorflow 2 Conversion
【讨论】:
以上是关于如何在 Tensorflow Lite 上为 CoreML 委托设置填充类型以修复未设置“PoolingLayerBuilder (MEAN)_1”。的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中导入 tensorflow lite 解释器?
如何在 CMake 中正确使用 Tensorflow Lite?
如何创建可轻松转换为 TensorFlow Lite 的模型?