【问题标题】:Using GluonCV models in TensorFlow (Lite)在 TensorFlow (Lite) 中使用 GluonCV 模型
【发布时间】:2020-05-05 07:29:59
【问题描述】:

我正在致力于在嵌入式设备上部署模型,进行性能比较等。这是一次实习,所以我的时间真的很有限,无法重新实现/重新训练模型,但我必须使用可用的东西(我实际上是向我的主管明确询问过这个问题)。 由于 TorchScript 并不像 TF Lite 那样成熟,至少从我收集到的信息来看,我会选择后者。 2018 年之前的模型运行良好,但许多 SotA 模型(如 ResNeSt)只有 PyTorch 中的代码。然而,GluonCV 似乎在他们的动物园中提供了很好的模型选择,并且基于 TensorFlow,所以我认为有一种方法可以将这些模型导出到 SavedModel、Keras .h5 或其他任何东西,但之后我没有找到很多搜索。我找到了MMdnn,但在转换为 IR 期间尝试在 JSON 导出模型上失败(我将输出附加到底部,似乎 MXNet JSON 和 Gluon JSON 格式不同)。

还有其他人将 Gluon 模型导出到野外吗?进展如何?

谢谢!

mmtoir -f mxnet -n resnest200-symbol.json -d resnest200 --inputShape 3,257,257的输出:

/home/kmfrick/Gluon_Tinkering/venv/lib/python3.8/site-packages/mxnet/module/base_module.py:55: UserWarning: You created Module with Module(..., label_names=['softmax_label']) but input with name 'softmax_label' is not found in symbol.list_arguments(). Did you mean one of:
    data
    _defaultpreprocess1_init_mean
    _defaultpreprocess1_init_scale
  warnings.warn(msg)
Warning: MXNet Parser has not supported operator null with name data.
Warning: convert the null operator with name [data] into input layer.
Warning: MXNet Parser has not supported operator null with name _defaultpreprocess1_init_scale.
Warning: convert the null operator with name [_defaultpreprocess1_init_scale] into input layer.
terminate called after throwing an instance of 'dmlc::Error'
  what():  [09:24:49] src/c_api/c_api_symbolic.cc:540: InferShapeKeyword argument name data not found.
Candidate arguments:
    [0]_defaultpreprocess1_init_scale

Stack trace:
  [bt] (0) /home/kmfrick/Gluon_Tinkering/venv/lib/python3.8/site-packages/mxnet/libmxnet.so(+0x307d3b) [0x7f0127eb9d3b]
  [bt] (1) /home/kmfrick/Gluon_Tinkering/venv/lib/python3.8/site-packages/mxnet/libmxnet.so(+0x33a3755) [0x7f012af55755]

【问题讨论】:

  • gluoncv 基于 MXNet,而不是 TensorFlow

标签: python tensorflow tensorflow-lite mxnet gluon


【解决方案1】:

Gluoncv 是一个出色的基于 MXNet 的计算机视觉工具包!将 gluoncv 模型部署到嵌入式运行时的几个选项:

  1. 您可以使用 ONNX 将模型转换为其他运行时,例如 Android 的 CoreML for iOSNNAPI
  2. 您可以使用TVM
  3. 您可以使用 SageMaker Neo + DLR runtime,这可能是最简单的解决方案。 git 包含适用于 Android 的示例。

请记住,从一个框架到另一个框架的编译和可移植性取决于运营商的覆盖范围,它可能不适用于外来或最近的模型

【讨论】:

  • 我尝试按照您的建议进行操作,但遇到了问题。我将我的模型转换为 ONNX,但为了将其与 NNAPI 一起使用,必须将其转换为 daq。存储库中提供的脚本返回一个错误,并且在问题部分他们报告“它实际上对所有 onnx 对象检测模型都失败了”。然后,我尝试使用 DLR。据我了解,我需要先用 TVM 编译我的自定义模型...我尝试了 Docker 容器中的转换脚本,但它说“不支持 ssd_512_mobilenet1.0_custom”,并列出了一堆可用的标准模型.
  • 我问了一个关于这个话题的类似问题(stackoverflow.com/questions/66439247/…),如果你能看一下就好了
猜你喜欢
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多