tflite2tensorflow
【WIP】 Generate saved_model, tfjs, tf-trt, EdgeTPU, CoreML, quantized tflite and .pb from .tflite.
1. Supported Layers
| No. | TFLite Layer | TF Layer | Remarks |
|---|---|---|---|
| 1 | CONV_2D | tf.nn.conv2d | |
| 2 | DEPTHWISE_CONV_2D | tf.nn.depthwise_conv2d | |
| 3 | MAX_POOL_2D | tf.nn.max_pool | |
| 4 | PAD | tf.pad | |
| 5 | MIRROR_PAD | tf.raw_ops.MirrorPad | |
| 6 | RELU | tf.nn.relu | |
| 7 | PRELU | tf.keras.layers.PReLU | |
| 8 | RELU6 | tf.nn.relu6 | |
| 9 | RESHAPE | tf.reshape | |
| 10 | ADD | tf.add | |
| 11 | SUB | tf.math.subtract | |
| 12 | CONCATENATION | tf.concat | |
| 13 | LOGISTIC | tf.math.sigmoid | |
| 14 | TRANSPOSE_CONV | tf.nn.conv2d_transpose | |
| 15 | MUL | tf.multiply | |
| 16 | HARD_SWISH | x*tf.nn.relu6(x+3)*0.16666667 Or x*tf.nn.relu6(x+3)*0.16666666 | |
| 17 | AVERAGE_POOL_2D | tf.keras.layers.AveragePooling2D | |
| 18 | FULLY_CONNECTED | tf.keras.layers.Dense | |
| 19 | RESIZE_BILINEAR | tf.image.resize Or tf.image.resize_bilinear | |
| 20 | RESIZE_NEAREST_NEIGHBOR | tf.image.resize Or tf.image.resize_nearest_neighbor | |
| 21 | MEAN | tf.math.reduce_mean | |
| 22 | SQUARED_DIFFERENCE | tf.math.squared_difference | |
| 23 | RSQRT | tf.math.rsqrt | |
| 24 | DEQUANTIZE | (const) | |
| 25 | FLOOR | tf.math.floor | |
| 26 | TANH | tf.math.tanh | |
| 27 | DIV | tf.math.divide | |
| 28 | FLOOR_DIV | tf.math.floordiv | |
| 29 | SUM | tf.math.reduce_sum | |
| 30 | POW | tf.math.pow | |
| 31 | SPLIT | tf.split | |
| 32 | SOFTMAX | tf.nn.softmax | |
| 33 | STRIDED_SLICE | tf.strided_slice | |
| 34 | TRANSPOSE | ttf.transpose | |
| 35 | SPACE_TO_DEPTH | tf.nn.space_to_depth | |
| 36 | DEPTH_TO_SPACE | tf.nn.depth_to_space | |
| 37 | REDUCE_MAX | tf.math.reduce_max | |
| 38 | Convolution2DTransposeBias | tf.nn.conv2d_transpose, tf.math.add | CUSTOM, MeditPipe |
| 39 | LEAKY_RELU | tf.keras.layers.LeakyReLU | |
| 40 | MAXIMUM | tf.math.maximum | |
| 41 | MINIMUM | tf.math.minimum | |
| 42 | MaxPoolingWithArgmax2D | tf.raw_ops.MaxPoolWithArgmax | CUSTOM, MeditPipe |
| 43 | MaxUnpooling2D | tf.cast, tf.shape, tf.math.floordiv, tf.math.floormod, tf.ones_like, tf.shape, tf.concat, tf.reshape, tf.transpose, tf.scatter_nd | CUSTOM, MeditPipe |
2. Environment
- Python3.6+
- TensorFlow v2.4.0+ or tf-nightly
- TensorFlow Lite v2.4.1 with MediaPipe Custom OP, FlexDelegate and XNNPACK enabled
- Add a custom OP to the TFLite runtime to build the whl installer (for Python),
MaxPoolingWithArgmax2D,MaxUnpooling2D,Convolution2DTransposeBias
- Add a custom OP to the TFLite runtime to build the whl installer (for Python),
- flatc v1.12.0
3. Setup
To install using the Python Package Index (PyPI), use the following command.
$ pip3 install tflite2tensorflow --upgrade
Or, To install with the latest source code of the main branch, use the following command.
$ pip3 install git+https://github.com/PINTO0309/tflite2tensorflow --upgrade
Installs a customized TensorFlow Lite runtime with support for MediaPipe Custom OP, FlexDelegate, and XNNPACK. If tflite_runtime does not install properly, please follow the instructions in the next article to build a custom build in the environment you are using. Add a custom OP to the TFLite runtime to build the whl installer (for Python), MaxPoolingWithArgmax2D, MaxUnpooling2D, Convolution2DTransposeBias
$ sudo pip3 uninstall tensorboard-plugin-wit tb-nightly tensorboard \
tf-estimator-nightly tensorflow-gpu \
tensorflow tf-nightly tensorflow_estimator tflite_runtime -y
### Customized version of TensorFlow Lite installation
$ sudo gdown --id 1RWZmfFgtxm3muunv6BSf4yU29SKKFXIh
$ sudo chmod +x tflite_runtime-2.4.1-py3-none-any.whl
$ sudo pip3 install tflite_runtime-2.4.1-py3-none-any.whl
### Install the full TensorFlow package
$ sudo pip3 install tf-nightly
or
$ sudo pip3 install tensorflow==2.4.1
### Download flatc
$ flatbuffers/1.12.0/download.sh
### Download schema.fbs
$ wget https://github.com/PINTO0309/tflite2tensorflow/raw/main/schema/schema.fbs
If the downloaded flatc does not work properly, please build it in your environment.
$ git clone -b v1.12.0 https://github.com/google/flatbuffers.git
$ cd flatbuffers && mkdir build && cd build
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
$ make -j$(nproc)
4. Usage / Execution sample
4-1. Step 1 : Generating saved_model and FreezeGraph (.pb)
$ tflite2tensorflow \
--model_path magenta_arbitrary-image-stylization-v1-256_fp16_prediction_1.tflite \
--flatc_path ./flatc \
--schema_path schema.fbs \
--output_pb True
or
$ tflite2tensorflow \
--model_path magenta_arbitrary-image-stylization-v1-256_fp16_prediction_1.tflite \
--flatc_path ./flatc \
--schema_path schema.fbs \
--output_pb True \
--optimizing_hardswish_for_edgetpu True
4-2. Step 2 : Generation of quantized tflite, TFJS, TF-TRT, EdgeTPU, and CoreML
$ tflite2tensorflow \
--model_path magenta_arbitrary-image-stylization-v1-256_fp16_prediction_1.tflite \
--flatc_path ./flatc \
--schema_path schema.fbs \
--output_no_quant_float32_tflite True \
--output_weight_quant_tflite True \
--output_float16_quant_tflite True \
--output_integer_quant_tflite True \
--string_formulas_for_normalization 'data / 255.0' \
--output_tfjs True \
--output_coreml True \
--output_tftrt True
or
$ tflite2tensorflow \
--model_path magenta_arbitrary-image-stylization-v1-256_fp16_prediction_1.tflite \
--flatc_path ./flatc \
--schema_path schema.fbs \
--output_no_quant_float32_tflite True \
--output_weight_quant_tflite True \
--output_float16_quant_tflite True \
--output_integer_quant_tflite True \
--output_edgetpu True \
--string_formulas_for_normalization 'data / 255.0' \
--output_tfjs True \
--output_coreml True \
--output_tftrt True
5. Sample image
This is the result of converting MediaPipe's Meet Segmentation model (segm_full_v679.tflite / Float16 / Google Meet) to saved_model and then reconverting it to Float32 tflite. Replace the GPU-optimized Convolution2DTransposeBias layer with the standard TransposeConv and BiasAdd layers in a fully automatic manner. The weights and biases of the Float16 Dequantize layer are automatically back-quantized to Float32 precision. The generated saved_model in Float32 precision can be easily converted to Float16, INT8, EdgeTPU, TFJS, TF-TRT, CoreML, ONNX, and OpenVINO.
| Before | After |
|---|---|
Metadata
Release files for tflite2tensorflow 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tflite2tensorflow-0.2.2.tar.gz | 17.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tflite2tensorflow-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.0 kB
Release files / tflite2tensorflow-0.2.2.tar.gz
| Download URL | tflite2tensorflow-0.2.2.tar.gz |
|---|---|
| Size | 17.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
77217d8eaf887cd7ba534495f9579837aaf675428a3dc62de6f9e8e1a29e49cd
|
|
BLAKE2b-256 checksum How to use checksums |
0b82ed9fb0ddf9aefbe7a2981e06d4a961adb4c98de33a71eec1e8b1742dce6c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.6.0 requests/2.22.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.6.9
|
Release files / tflite2tensorflow-0.2.2-py3-none-any.whl
| Download URL | tflite2tensorflow-0.2.2-py3-none-any.whl |
|---|---|
| Size | 16.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a2284442c80c3e384d0b5a50a6bc2c716e63881d67a9e28fb07ab224c2bbe47f
|
|
BLAKE2b-256 checksum How to use checksums |
8febf498112b3f7aa1c1b07771d1dee5ff6367c177d8fde137b62967213e6064
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.2.0 pkginfo/1.6.0 requests/2.22.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.6.9
|