在 TensorFlow(精简版)中使用 GluonCV 模型

Using GluonCV models in TensorFlow (Lite)

我正在做模型在嵌入式设备上的部署,做性能比较等。这是一次实习,所以我的时间真的很有限,不能重新实施/重新训练模型,但我必须使用可用的模型(实际上我明确地向我的主管询问过)。 由于 TorchScript 不如 TF Lite 成熟,至少从我收集到的信息来看,我选择后者。它在 2018 年之前的模型中运行良好,但许多像 ResNeSt 这样的 SotA 模型只有 PyTorch 中的代码。然而,GluonCV 似乎在他们的 zoo 中提供了一个很好的模型选择,并且基于 TensorFlow,所以我认为有一种方法可以将它们导出到 SavedModel、Keras .h5 或其他任何东西,但我发现none 经过大量搜索。我发现 MMdnn 但在 JSON 导出模型上尝试它在转换为 IR 期间失败(我将输出附加在底部,似乎 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 的计算机视觉工具包!将 gluoncv 模型部署到嵌入式运行时的几个选项:

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

请记住,从一个框架到另一个框架的编译和可移植性取决于运营商的覆盖范围,它可能不适用于异国情调或非常新的模型