【发布时间】:2019-04-10 10:51:51
【问题描述】:
我已通过以下方式将模型导出到 ONNX:
# Export the model
torch_out = torch.onnx._export(learn.model, # model being run
x, # model input (or a tuple for multiple inputs)
EXPORT_PATH + "mnist.onnx", # where to save the model (can be a file or file-like object)
export_params=True) # store the trained parameter weights inside the model file
现在我正在尝试将模型转换为 Tensorflow Lite 文件,以便可以在 Android 上进行推理。不幸的是,对于 Android 而言,PyTorch/Caffe2 支持相当缺乏或过于复杂,但 Tensorflow 似乎要简单得多。
ONNX 到 Tflite 的文档对此非常简单。
我尝试通过以下方式导出到 Tensorflow GraphDef 原型:
tf_rep.export_graph(EXPORT_PATH + 'mnist-test/mnist-tf-export.pb')
然后运行toco:
toco \
--graph_def_file=mnist-tf-export.pb \
--input_format=TENSORFLOW_GRAPHDEF \
--output_format=TFLITE \
--inference_type=FLOAT \
--input_type=FLOAT \
--input_arrays=0 \
--output_arrays=add_10 \
--input_shapes=1,3,28,28 \
--output_file=mnist.tflite`
当我这样做时,我收到以下错误:
File "anaconda3/lib/python3.6/site-packages/tensorflow/lite/python/convert.py", line 172, in toco_convert_protos
"TOCO failed. See console for info.\n%s\n%s\n" % (stdout, stderr))
tensorflow.lite.python.convert.ConverterError: TOCO failed. See console for info.
2018-11-06 16:28:33.864889: I tensorflow/lite/toco/import_tensorflow.cc:1268] Converting unsupported operation: PyFunc
2018-11-06 16:28:33.874130: F tensorflow/lite/toco/import_tensorflow.cc:114] Check failed: attr.value_case() == AttrValue::kType (1 vs. 6)
此外,即使我运行命令时,我也不知道为 input_arrays 或 output_arrays 指定什么,因为模型最初是在 PyTorch 中构建的。
有没有人成功地将他们的 ONNX 模型转换为 TFlite?
这是我要转换的 ONNX 文件:https://drive.google.com/file/d/1sM4RpeBVqPNw1WeCROpKLdzbSJPWSK79/view?usp=sharing
额外信息
- Python 3.6.6 :: Anaconda 自定义(64 位)
- onnx.版本 = '1.3.0'
- tf.版本 = '1.13.0-dev20181106'
- torch.版本 = '1.0.0.dev20181029'
【问题讨论】:
-
更新:不幸的是,对此没有很好的支持,我(此时/日期)建议采用 caffe2 路线或在 Tensorflow 中制作模型。
-
正如您在评论中所说,PyTorch 现在封装了 Caffe2,因此您可以直接部署。
-
现在您可以直接在手机上运行 PyTorch 模型。查看 PyTorch Mobile 的文档:pytorch.org/mobile/home
标签: tensorflow keras deep-learning pytorch onnx