PyTorch to TensorFlow Lite converter

Overview

PyTorch to TensorFlow Lite Converter

Converts PyTorch whole model into Tensorflow Lite

PyTorch -> Onnx -> Tensorflow 2 -> TFLite

Please install first

python3 setup.py install

Args

  • --torch-path Path to local PyTorch model, please save whole model e.g. torch.save(model, PATH)
  • --tf-lite-path Save path for Tensorflow Lite model
  • --target-shape Model input shape to create static-graph (default: (224, 224, 3)
  • --sample-file Path to sample image file. If model is not about computer-vision, please use leave empty and only enter --target-shape
  • --seed Seeds RNG to produce random input data when --sample-file does not exists
  • --log=INFO To see what happens behind

Basic usage of the script

To test with sample file:

python3 -m torch2tflite.converter
    --torch-path tests/mobilenetv2_model.pt
    --tflite-path mobilenetv2.tflite
    --sample-file sample_image.png
    --target-shape 224 224 3

To test with random input to check gradients:

python3 -m torch2tflite.converter
    --torch-path tests/mobilenetv2_model.pt
    --tflite-path mobilenetv2.tflite
    --target-shape 224 224 3
    --seed 10
Comments
  • Issue in the model converting

    Issue in the model converting

    Hi, I had an error below when the code is in torch.onnx.export. I doubt the problem is the model isn't loaded completely but I'm not sure. Is it possible to provide any model sample to verify my code environment. Thanks! 'dict' object has no attribute 'training'

    bug 
    opened by wenjingyang 10
  • No module named 'models'

    No module named 'models'

    I tried this code to convert my custom trained YOLOv5 model (.pt) It returns this message

    2021-05-31 10:26:03.181164: I tensorflow/stream_executor/platform/default/dso_loader.cc:53] Successfully opened dynamic library libcudart.so.11.0 No module named 'models'

    How can I fix this?

    opened by jhnhp 7
  • OSError: SavedModel file does not exist at: ./converter/tf_model/{saved_model.pbtxt|saved_model.pb}

    OSError: SavedModel file does not exist at: ./converter/tf_model/{saved_model.pbtxt|saved_model.pb}

    Hi,

    Thank you very much for sharing this code. I have tried applying it to my torch model, the conversion steps from torch to ONNX and ONNX to TF work fine, but it fails at the last step (TF to TFlite) with the following message:

    Traceback (most recent call last): File "converter.py", line 58, in main() File "converter.py", line 22, in main convert(torch_model_path=args.torch_model_path, File "/home/A49175/torch2tflite-master/converter/torch_to_tflite.py", line 157, in convert tf_to_tf_lite(tf_path=TF_PATH, tf_lite_path=tf_lite_model_path) File "/home/A49175/torch2tflite-master/converter/torch_to_tflite.py", line 74, in tf_to_tf_lite converter = tf.lite.TFLiteConverter.from_saved_model(tf_path) # Path to the SavedModel directory File "/home/A49175/.conda/envs/tflite-converter/lib/python3.8/site-packages/tensorflow/lite/python/lite.py", line 399, in from_saved_model saved_model = _load(saved_model_dir, tags) File "/home/A49175/.conda/envs/tflite-converter/lib/python3.8/site-packages/tensorflow/python/saved_model/load.py", line 578, in load return load_internal(export_dir, tags) File "/home/A49175/.conda/envs/tflite-converter/lib/python3.8/site-packages/tensorflow/python/saved_model/load.py", line 588, in load_internal loader_impl.parse_saved_model_with_debug_info(export_dir)) File "/home/A49175/.conda/envs/tflite-converter/lib/python3.8/site-packages/tensorflow/python/saved_model/loader_impl.py", line 56, in parse_saved_model_with_debug_info saved_model = _parse_saved_model(export_dir) File "/home/A49175/.conda/envs/tflite-converter/lib/python3.8/site-packages/tensorflow/python/saved_model/loader_impl.py", line 110, in parse_saved_model raise IOError("SavedModel file does not exist at: %s/{%s|%s}" % OSError: SavedModel file does not exist at: ./converter/tf_model/{saved_model.pbtxt|saved_model.pb}

    Do you have any idea of the origin of this problem ? I am using the packages versions specified in the requirements.txt.

    Thank you!

    opened by PaulKassis 4
  • Fails to create .tflite

    Fails to create .tflite

    ValueError: Could not open './converter/tf_lite_model.tflite'.

    I've loaded my .pt file and a sample test image....but looks like the conversion is not working. Can you rectify this?

    Thanks

    opened by rakshith-rm 3
  • error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

    error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

    I tried this code to convert my custom trained YOLOv5 model (.pt) It returns this bug: cv2.error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

    2021-06-02 03:17:26.651552: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library libcudart.so.10.1 Showing result!

    Traceback (most recent call last): File "converter.py", line 59, in main() File "converter.py", line 30, in main original_image, tf_lite_image, torch_image = get_example_input(args.test_im_path) File "/content/drive/My Drive/Univoice/yolov5/torch2tflite/converter/torch_to_tflite.py", line 28, in get_example_input image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) cv2.error: OpenCV(4.1.2) /io/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

    How can I fix this?

    opened by thongvhoang 2
  • Under what license is your code?

    Under what license is your code?

    Hi,

    under what license is the code in your repository? I've found the overview at https://choosealicense.com/ useful to choose a license. It would be great if you could add a license file to the repository, because otherwise it can't be used.

    opened by fvollmer 2
  • Compatibility update (v1.1.0)

    Compatibility update (v1.1.0)

    • Development packages (black, pre-commit, poetry.lock etc.) added
    • Code style changed to black
    • Project setup changed to pyproject.toml from setup.py
    • VSCode settings added
    enhancement 
    opened by omerferhatt 0
  • TypeError: 'tuple' object cannot be interpreted as an integer

    TypeError: 'tuple' object cannot be interpreted as an integer

    I created below colab and getting below "TypeError: 'tuple' object cannot be interpreted as an integer" error. Could you please help me on this ? https://colab.research.google.com/drive/19JeOkrxlGP6KtkfGbrkO87COc4pvSZSE?usp=sharing#scrollTo=vdeytDxjFdZ3

    Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "main", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/content/torch2tflite/torch2tflite/converter.py", line 187, in args.seed File "/content/torch2tflite/torch2tflite/converter.py", line 40, in init self.sample_data = self.load_sample_input(sample_file_path, target_shape, seed, normalize) File "/content/torch2tflite/torch2tflite/converter.py", line 121, in load_sample_input data = np.random.random(target_shape).astype(np.float32) File "mtrand.pyx", line 434, in numpy.random.mtrand.RandomState.random File "mtrand.pyx", line 425, in numpy.random.mtrand.RandomState.random_sample File "_common.pyx", line 291, in numpy.random._common.double_fill TypeError: 'tuple' object cannot be interpreted as an integer

    opened by nyadla-sys 2
  • Runtime Errori mportError: dlopen

    Runtime Errori mportError: dlopen

    When I have ran: python -m torch2tflite.converter --torch-path converted.pt --tflite-path siggraph17.tflite --targeet-shape 225 225 3 --seed 10

    I have the following error:

      File "/usr/local/Cellar/[email protected]/3.8.12_1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/runpy.py", line 194, in _run_module_as_main
        return _run_code(code, main_globals, None,
      File "/usr/local/Cellar/[email protected]/3.8.12_1/Frameworks/Python.framework/Versions/3.8/lib/python3.8/runpy.py", line 87, in _run_code
        exec(code, run_globals)
      File "/XXX/torch2tflite/torch2tflite/converter.py", line 12, in <module>
        import onnx
      File "/XXX/torch2tflite/venv38/lib/python3.8/site-packages/onnx-1.11.0-py3.8-macosx-12-x86_64.egg/onnx/__init__.py", line 10, in <module>
        from .onnx_cpp2py_export import ONNX_ML
    ImportError: dlopen(/XXX/torch2tflite/venv38/lib/python3.8/site-packages/onnx-1.11.0-py3.8-macosx-12-x86_64.egg/onnx/onnx_cpp2py_export.cpython-38-darwin.so, 0x0002): symbol not found in flat namespace '__ZN6google8protobuf11MessageLite20ParseFromCodedStreamEPNS0_2io16CodedInputStreamE'```
    
    
    ANY SUGGESTION, SOLUTION?
    opened by celikmustafa89 0
  • ERROR:root:Can not load PyTorch model. Please make surethat model saved like `torch.save(model, PATH)`

    ERROR:root:Can not load PyTorch model. Please make surethat model saved like `torch.save(model, PATH)`

    I'm trying to convert a YOLOv5 best.pt weights file to a .tflite file so we can deploy the model on a flutter app.

    This is the code:

    `import torch weights_path = '/content/drive/MyDrive/Weights/best.pt' yolo_path = '/content/yolov5'

    model = torch.hub.load(yolo_path, 'custom', weights_path, source='local') # local repo torch.save(model, '/content/pipeline.pt' )`

    You can also go straight to the colab for all the colde. https://colab.research.google.com/drive/19JeOkrxlGP6KtkfGbrkO87COc4pvSZSE?usp=sharing

    I assume I'm not saving the model how the converter wants it, but I can't figure it out. Can you please explain exactly how the file needs to be saved so the code will work ?

    Thanks a lot in advance!

    opened by IvanStoykov 5
  • Installation issue

    Installation issue

    Dear Authors, Could you please verify the dependencies. It seems tflite-runtime~=2.5 is not available now.

    No local packages or working download links found for tflite-runtime~=2.5 error: Could not find suitable distribution for Requirement.parse('tflite-runtime~=2.5')

    Thanks Maulik

    bug 
    opened by maulikmadhavi 0
Releases(v1.0)
Owner
Omer Ferhat Sarioglu
DL/ML Enthusiast | Computer Vision
Omer Ferhat Sarioglu
3D-RETR: End-to-End Single and Multi-View3D Reconstruction with Transformers

3D-RETR: End-to-End Single and Multi-View 3D Reconstruction with Transformers (BMVC 2021) Zai Shi*, Zhao Meng*, Yiran Xing, Yunpu Ma, Roger Wattenhofe

Zai Shi 36 Dec 21, 2022
A code copied from google-research which named motion-imitation was rewrited with PyTorch

motor-system Introduction A code copied from google-research which named motion-imitation was rewrited with PyTorch. More details can get from this pr

NewEra 6 Jan 08, 2022
PyTorch implementations of normalizing flow and its variants.

PyTorch implementations of normalizing flow and its variants.

Tatsuya Yatagawa 55 Dec 01, 2022
A Pytorch Implementation for Compact Bilinear Pooling.

CompactBilinearPooling-Pytorch A Pytorch Implementation for Compact Bilinear Pooling. Adapted from tensorflow_compact_bilinear_pooling Prerequisites I

169 Dec 23, 2022
PyTorch extensions for fast R&D prototyping and Kaggle farming

Pytorch-toolbelt A pytorch-toolbelt is a Python library with a set of bells and whistles for PyTorch for fast R&D prototyping and Kaggle farming: What

Eugene Khvedchenya 1.3k Jan 05, 2023
Implements pytorch code for the Accelerated SGD algorithm.

AccSGD This is the code associated with Accelerated SGD algorithm used in the paper On the insufficiency of existing momentum schemes for Stochastic O

205 Jan 02, 2023
On the Variance of the Adaptive Learning Rate and Beyond

RAdam On the Variance of the Adaptive Learning Rate and Beyond We are in an early-release beta. Expect some adventures and rough edges. Table of Conte

Liyuan Liu 2.5k Dec 27, 2022
Fast and Easy-to-use Distributed Graph Learning for PyTorch Geometric

Fast and Easy-to-use Distributed Graph Learning for PyTorch Geometric

Quiver Team 221 Dec 22, 2022
Training RNNs as Fast as CNNs (https://arxiv.org/abs/1709.02755)

News SRU++, a new SRU variant, is released. [tech report] [blog] The experimental code and SRU++ implementation are available on the dev branch which

ASAPP Research 2.1k Jan 01, 2023
A tiny package to compare two neural networks in PyTorch

Compare neural networks by their feature similarity

Anand Krishnamoorthy 180 Dec 30, 2022
Implementation of LambdaNetworks, a new approach to image recognition that reaches SOTA with less compute

Lambda Networks - Pytorch Implementation of λ Networks, a new approach to image recognition that reaches SOTA on ImageNet. The new method utilizes λ l

Phil Wang 1.5k Jan 07, 2023
TorchShard is a lightweight engine for slicing a PyTorch tensor into parallel shards

TorchShard is a lightweight engine for slicing a PyTorch tensor into parallel shards. It can reduce GPU memory and scale up the training when the model has massive linear layers (e.g., ViT, BERT and

Kaiyu Yue 275 Nov 22, 2022
lookahead optimizer (Lookahead Optimizer: k steps forward, 1 step back) for pytorch

lookahead optimizer for pytorch PyTorch implement of Lookahead Optimizer: k steps forward, 1 step back Usage: base_opt = torch.optim.Adam(model.parame

Liam 318 Dec 09, 2022
Tez is a super-simple and lightweight Trainer for PyTorch. It also comes with many utils that you can use to tackle over 90% of deep learning projects in PyTorch.

Tez: a simple pytorch trainer NOTE: Currently, we are not accepting any pull requests! All PRs will be closed. If you want a feature or something does

abhishek thakur 1.1k Jan 04, 2023
Differentiable ODE solvers with full GPU support and O(1)-memory backpropagation.

PyTorch Implementation of Differentiable ODE Solvers This library provides ordinary differential equation (ODE) solvers implemented in PyTorch. Backpr

Ricky Chen 4.4k Jan 04, 2023
A lightweight wrapper for PyTorch that provides a simple declarative API for context switching between devices, distributed modes, mixed-precision, and PyTorch extensions.

A lightweight wrapper for PyTorch that provides a simple declarative API for context switching between devices, distributed modes, mixed-precision, and PyTorch extensions.

Fidelity Investments 56 Sep 13, 2022
A tiny scalar-valued autograd engine and a neural net library on top of it with PyTorch-like API

micrograd A tiny Autograd engine (with a bite! :)). Implements backpropagation (reverse-mode autodiff) over a dynamically built DAG and a small neural

Andrej 3.5k Jan 08, 2023
A Closer Look at Structured Pruning for Neural Network Compression

A Closer Look at Structured Pruning for Neural Network Compression Code used to reproduce experiments in https://arxiv.org/abs/1810.04622. To prune, w

Bayesian and Neural Systems Group 140 Dec 05, 2022
PyTorch framework A simple and complete framework for PyTorch, providing a variety of data loading and simple task solutions that are easy to extend and migrate

PyTorch framework A simple and complete framework for PyTorch, providing a variety of data loading and simple task solutions that are easy to extend and migrate

Cong Cai 12 Dec 19, 2021
GPU-accelerated PyTorch implementation of Zero-shot User Intent Detection via Capsule Neural Networks

GPU-accelerated PyTorch implementation of Zero-shot User Intent Detection via Capsule Neural Networks This repository implements a capsule model Inten

Joel Huang 15 Dec 24, 2022