Home

Awesome

tflite2tensorflow

<p align="center"> <img src="https://user-images.githubusercontent.com/33194443/105187518-38ac0c00-5b76-11eb-869b-b518df146924.png" /> </p>

Generate saved_model, tfjs, tf-trt, EdgeTPU, CoreML, quantized tflite, ONNX, OpenVINO, Myriad Inference Engine blob and .pb from .tflite. Support for building environments with Docker. It is possible to directly access the host PC GUI and the camera to verify the operation. NVIDIA GPU (dGPU) support. Intel iHD GPU (iGPU) support. Supports inverse quantization of INT8 quantization model.

Special custom TensorFlow binaries and special custom TensorFLow Lite binaries are used.

Downloads GitHub PyPI CodeQL

<p align="center"> <img src="https://user-images.githubusercontent.com/33194443/166147152-79cd691e-7b47-4338-acee-34791ac2d1f3.gif" /> </p>

1. Supported Layers

<details><summary>Supported Layers</summary><div>

No.TFLite LayerTF LayerRemarks
1CONV_2Dtf.nn.conv2d
2DEPTHWISE_CONV_2Dtf.nn.depthwise_conv2d
3MAX_POOL_2Dtf.nn.max_pool
4PADtf.pad
5MIRROR_PADtf.raw_ops.MirrorPad
6RELUtf.nn.relu
7PRELUtf.keras.layers.PReLU
8RELU6tf.nn.relu6
9RESHAPEtf.reshape
10ADDtf.add
11SUBtf.math.subtract
12CONCATENATIONtf.concat
13LOGISTICtf.math.sigmoid
14TRANSPOSE_CONVtf.nn.conv2d_transpose
15MULtf.multiply
16HARD_SWISHx*tf.nn.relu6(x+3)*0.16666667 Or x*tf.nn.relu6(x+3)*0.16666666
17AVERAGE_POOL_2Dtf.keras.layers.AveragePooling2D
18FULLY_CONNECTEDtf.keras.layers.Dense
19RESIZE_BILINEARtf.image.resize Or tf.image.resize_bilinearThe behavior differs depending on the optimization options of openvino and edgetpu.
20RESIZE_NEAREST_NEIGHBORtf.image.resize Or tf.image.resize_nearest_neighborThe behavior differs depending on the optimization options of openvino and edgetpu.
21MEANtf.math.reduce_mean
22SQUARED_DIFFERENCEtf.math.squared_difference
23RSQRTtf.math.rsqrt
24DEQUANTIZE(const)
25FLOORtf.math.floor
26TANHtf.math.tanh
27DIVtf.math.divide
28FLOOR_DIVtf.math.floordiv
29SUMtf.math.reduce_sum
30POWtf.math.pow
31SPLITtf.split
32SOFTMAXtf.nn.softmax
33STRIDED_SLICEtf.strided_slice
34TRANSPOSEttf.transpose
35SPACE_TO_DEPTHtf.nn.space_to_depth
36DEPTH_TO_SPACEtf.nn.depth_to_space
37REDUCE_MAXtf.math.reduce_max
38Convolution2DTransposeBiastf.nn.conv2d_transpose, tf.math.addCUSTOM, MediaPipe
39LEAKY_RELUtf.keras.layers.LeakyReLU
40MAXIMUMtf.math.maximum
41MINIMUMtf.math.minimum
42MaxPoolingWithArgmax2Dtf.raw_ops.MaxPoolWithArgmaxCUSTOM, MediaPipe
43MaxUnpooling2Dtf.cast, tf.shape, tf.math.floordiv, tf.math.floormod, tf.ones_like, tf.shape, tf.concat, tf.reshape, tf.transpose, tf.scatter_ndCUSTOM, MediaPipe
44GATHERtf.gather
45CASTtf.cast
46SLICEtf.slice
47PACKtf.stack
48UNPACKtf.unstack
49ARG_MAXtf.math.argmax Or tf.math.reduce_max, tf.subtract, tf.math.minimum, tf.multiplyThe behavior differs depending on the optimization options of edgetpu.
50EXPtf.exp
51TOPK_V2tf.math.top_k
52LOG_SOFTMAXtf.nn.log_softmax
53L2_NORMALIZATIONtf.math.l2_normalize
54LESStf.math.less
55LESS_EQUALtf.math.less_equal
56GREATERtf.math.greater
57GREATER_EQUALtf.math.greater_equal
58NEGtf.math.negative
59WHEREtf.where
60SELECTtf.where
61SELECT_V2tf.where
62PADV2tf.raw_ops.PadV2
63SINtf.math.sin
64TILEtf.tile
65EQUALtf.math.equal
66NOT_EQUALtf.math.not_equal
67LOGtf.math.log
68SQRTtf.math.sqrt
69ARG_MINtf.math.argmin or tf.math.negative,tf.math.argmax
70REDUCE_PRODtf.math.reduce_prod
71LOGICAL_ORtf.math.logical_or
72LOGICAL_ANDtf.math.logical_and
73LOGICAL_NOTtf.math.logical_not
74REDUCE_MINtf.math.reduce_min or tf.math.negative,tf.math.reduce_max
75REDUCE_ANYtf.math.reduce_any
76SQUAREtf.math.square
77ZEROS_LIKEtf.zeros_like
78FILLtf.fill
79FLOOR_MODtf.math.floormod
80RANGEtf.range
81ABStf.math.abs
82UNIQUEtf.unique
83CEILtf.math.ceil
84REVERSE_V2tf.reverse
85ADD_Ntf.math.add_n
86GATHER_NDtf.gather_nd
87COStf.math.cos
88RANKtf.math.rank
89ELUtf.nn.elu
90WHILEtf.while_loop
91REVERSE_SEQUENCEtf.reverse_sequence
92MATRIX_DIAGtf.linalg.diag
93ROUNDtf.math.round
94NON_MAX_SUPPRESSION_V4tf.raw_ops.NonMaxSuppressionV4
95NON_MAX_SUPPRESSION_V5tf.raw_ops.NonMaxSuppressionV5, tf.raw_ops.NonMaxSuppressionV4, tf.raw_ops.NonMaxSuppressionV3
96SCATTER_NDtf.scatter_nd
97SEGMENT_SUMtf.math.segment_sum
98CUMSUMtf.math.cumsum
99BROADCAST_TOtf.broadcast_to
100RFFT2Dtf.signal.rfft2d
101L2_POOL_2Dtf.square, tf.keras.layers.AveragePooling2D, tf.sqrt
102LOCAL_RESPONSE_NORMALIZATIONtf.nn.local_response_normalization
103RELU_N1_TO_1tf.minimum, tf.maximum
104SPLIT_Vtf.raw_ops.SplitV
105MATRIX_SET_DIAGtf.linalg.set_diag
106SHAPEtf.shape
107EXPAND_DIMStf.expand_dims
108SQUEEZEtf.squeeze
109FlexRFFTtf.signal.rfftFlex OP
110FlexImagtf.math.imagFlex OP
111FlexRealtf.math.realFlex OP
112FlexRFFT2Dtf.signal.rfft2dFlex OP
113FlexComplexAbstf.raw_ops.ComplexAbsFlex OP
114IMAGtf.math.imag
115REALtf.math.real
116COMPLEX_ABStf.raw_ops.ComplexAbs
117TFLite_Detection_PostProcesstf.divide, tf.strided_slice, tf.math.argmax, tf.math.reduce_max, tf.math.multiply, tf.math.add, tf.math.exp, tf.math.subtract, tf.expand_dims, tf.gather, tf.reshape, tf.identity, tf.raw_ops.NonMaxSuppressionV5CUSTOM
118ONE_HOTtf.one_hot
119FlexMultinomialtf.random.categoricalFlex OP
120FlexAlltf.math.reduce_allFlex OP
121FlexErftf.math.erfFlex OP
122FlexRolltf.rollFlex OP
123CONV_3Dtf.keras.layers.Conv3D
124CONV_3D_TRANSPOSEtf.nn.conv3d_transpose
125Densify(const)
126SPACE_TO_BATCH_NDtf.space_to_batch_nd
127BATCH_TO_SPACE_NDtf.compat.v1.batch_to_space_nd
128TransformLandmarkstf.reshape, tf.linalg.matmul, tf.math.addCUSTOM, MediaPipe
129TransformTensorBilineartf.reshape, tf.linalg.matmul, tf.math.add, tf.tile, tf.math.floor, tf.math.subtract, tf.math.multiply, tf.math.reduce_prod, tf.cast, tf.math.maximum, tf.math.maximum, tf.concat, tf.gather_ndCUSTOM, MediaPipe
130Landmarks2TransformMatrixtf.constant, tf.math.subtract, tf.math.norm, tf.math.divide, tf.linalg.matmul, tf.concat, tf.transpose, tf.gather, tf.math.reduce_min, tf.math.reduce_max, tf.math.multiply, tf.zeros, tf.math.add, tf.tileCUSTOM, MediaPipe
</div></details>

2. Environment

3. Setup

3-1. [Environment construction pattern 1] Execution by Docker (strongly recommended)

You do not need to install any packages other than Docker. It consumes about 26.7GB of host storage.

$ docker pull ghcr.io/pinto0309/tflite2tensorflow:latest
or
$ docker build -t ghcr.io/pinto0309/tflite2tensorflow:latest .

# If you don't need to access the GUI of the HostPC and the USB camera.
$ docker run -it --rm \
  -v `pwd`:/home/user/workdir \
  ghcr.io/pinto0309/tflite2tensorflow:latest

# If conversion to TF-TRT is not required. And if you need to access the HostPC GUI and USB camera.
$ xhost +local: && \
  docker run -it --rm \
  -v `pwd`:/home/user/workdir \
  -v /tmp/.X11-unix/:/tmp/.X11-unix:rw \
  --device /dev/video0:/dev/video0:mwr \
  --net=host \
  -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
  -e DISPLAY=$DISPLAY \
  --privileged \
  ghcr.io/pinto0309/tflite2tensorflow:latest

# If you need to convert to TF-TRT. And if you need to access the HostPC GUI and USB camera.
$ xhost +local: && \
  docker run --gpus all -it --rm \
  -v `pwd`:/home/user/workdir \
  -v /tmp/.X11-unix/:/tmp/.X11-unix:rw \
  --device /dev/video0:/dev/video0:mwr \
  --net=host \
  -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
  -e DISPLAY=$DISPLAY \
  --privileged \
  ghcr.io/pinto0309/tflite2tensorflow:latest

# If you are using iGPU (OpenCL). And if you need to access the HostPC GUI and USB camera.
$ xhost +local: && \
  docker run -it --rm \
  -v `pwd`:/home/user/workdir \
  -v /tmp/.X11-unix/:/tmp/.X11-unix:rw \
  --device /dev/video0:/dev/video0:mwr \
  --net=host \
  -e LIBVA_DRIVER_NAME=iHD \
  -e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR \
  -e DISPLAY=$DISPLAY \
  --privileged \
  ghcr.io/pinto0309/tflite2tensorflow:latest

3-2. [Environment construction pattern 2] Execution by Host machine

To install using the Python Package Index (PyPI), use the following command.

$ pip3 install --user --upgrade tflite2tensorflow

Or, To install with the latest source code of the main branch, use the following command.

$ pip3 install --user --upgrade git+https://github.com/PINTO0309/tflite2tensorflow

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, TransformLandmarks, TransformTensorBilinear, Landmarks2TransformMatrix

$ sudo pip3 uninstall -y \
    tensorboard-plugin-wit \
    tb-nightly \
    tensorboard \
    tf-estimator-nightly \
    tensorflow-gpu \
    tensorflow \
    tf-nightly \
    tensorflow_estimator \
    tflite_runtime

$ APPVER=v1.20.7
$ TENSORFLOWVER=2.8.0

### Customized version of TensorFlow Lite installation
$ wget https://github.com/PINTO0309/tflite2tensorflow/releases/download/${APPVER}/tflite_runtime-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl \
  && sudo chmod +x tflite_runtime-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl \
  && pip3 install --user --force-reinstall tflite_runtime-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl \
  && rm tflite_runtime-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl

### Install the Customized Full TensorFlow package
### (MediaPipe Custom OP, FlexDelegate, XNNPACK enabled)
$ wget https://github.com/PINTO0309/tflite2tensorflow/releases/download/${APPVER}/tflite_runtime-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl \
  && sudo chmod +x tensorflow-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl \
  && pip3 install --user --force-reinstall tensorflow-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl \
  && rm tensorflow-${TENSORFLOWVER}-cp38-none-linux_x86_64.whl

 or

### Install the Non-customized TensorFlow package
$ pip3 install --user tf-nightly

### Download schema.fbs
$ wget https://github.com/PINTO0309/tflite2tensorflow/raw/main/schema/schema.fbs

Build flatc

$ git clone -b v2.0.8 https://github.com/google/flatbuffers.git
$ cd flatbuffers && mkdir build && cd build
$ cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ..
$ make -j$(nproc)

vvtvsu0y1791ow2ybdk61s9fv7e4 saxqukktcjncsk2hp7m8p2cns4q4

The Windows version of flatc v2.0.8 can be downloaded from here. https://github.com/google/flatbuffers/releases/download/v2.0.8/Windows.flatc.binary.zip

4. Usage / Execution sample

4-1. Command line options

usage: tflite2tensorflow
  [-h]
  --model_path MODEL_PATH
  --flatc_path FLATC_PATH
  --schema_path SCHEMA_PATH
  [--model_output_path MODEL_OUTPUT_PATH]
  [--output_pb]
  [--output_no_quant_float32_tflite]
  [--output_dynamic_range_quant_tflite]
  [--output_weight_quant_tflite]
  [--output_float16_quant_tflite]
  [--output_integer_quant_tflite]
  [--output_full_integer_quant_tflite]
  [--output_integer_quant_type]
  [--string_formulas_for_normalization STRING_FORMULAS_FOR_NORMALIZATION]
  [--calib_ds_type CALIB_DS_TYPE]
  [--ds_name_for_tfds_for_calibration DS_NAME_FOR_TFDS_FOR_CALIBRATION]
  [--split_name_for_tfds_for_calibration SPLIT_NAME_FOR_TFDS_FOR_CALIBRATION]
  [--download_dest_folder_path_for_the_calib_tfds DOWNLOAD_DEST_FOLDER_PATH_FOR_THE_CALIB_TFDS]
  [--tfds_download_flg]
  [--load_dest_file_path_for_the_calib_npy LOAD_DEST_FILE_PATH_FOR_THE_CALIB_NPY]
  [--output_tfjs]
  [--output_tftrt_float32]
  [--output_tftrt_float16]
  [--output_coreml]
  [--optimizing_coreml]
  [--output_edgetpu]
  [--edgetpu_compiler_timeout EDGETPU_COMPILER_TIMEOUT]
  [--edgetpu_num_segments EDGETPU_NUM_SEGMENTS]
  [--output_onnx]
  [--onnx_opset ONNX_OPSET]
  [--onnx_extra_opset ONNX_EXTRA_OPSET]
  [--disable_onnx_nchw_conversion]
  [--disable_onnx_optimization]
  [--output_openvino_and_myriad]
  [--vpu_number_of_shaves VPU_NUMBER_OF_SHAVES]
  [--vpu_number_of_cmx_slices VPU_NUMBER_OF_CMX_SLICES]
  [--optimizing_for_openvino_and_myriad]
  [--rigorous_optimization_for_myriad]
  [--replace_swish_and_hardswish]
  [--optimizing_for_edgetpu]
  [--replace_prelu_and_minmax]
  [--disable_experimental_new_quantizer]
  [--disable_per_channel]
  [--optimizing_barracuda]
  [--locationids_of_the_terminating_output]

optional arguments:
  -h, --help
          show this help message and exit
  --model_path MODEL_PATH
          input tflite model path (*.tflite)
  --flatc_path FLATC_PATH
          flatc file path (flatc)
  --schema_path SCHEMA_PATH
          schema.fbs path (schema.fbs)
  --model_output_path MODEL_OUTPUT_PATH
          The output folder path of the converted model file
  --output_pb
          .pb output switch
  --output_no_quant_float32_tflite
          float32 tflite output switch
  --output_dynamic_range_quant_tflite
          dynamic range quant tflite output switch
  --output_weight_quant_tflite
          weight quant tflite output switch
  --output_float16_quant_tflite
          float16 quant tflite output switch
  --output_integer_quant_tflite
          integer quant tflite output switch
  --output_full_integer_quant_tflite
          full integer quant tflite output switch
  --output_integer_quant_type OUTPUT_INTEGER_QUANT_TYPE
          Input and output types when doing Integer Quantization
          ('int8 (default)' or 'uint8')
  --string_formulas_for_normalization STRING_FORMULAS_FOR_NORMALIZATION
          String formulas for normalization. It is evaluated by
          Python's eval() function. Default: '(data -
          [127.5,127.5,127.5]) / [127.5,127.5,127.5]'
  --calib_ds_type CALIB_DS_TYPE
          Types of data sets for calibration. tfds or numpy
          Default: numpy
  --ds_name_for_tfds_for_calibration DS_NAME_FOR_TFDS_FOR_CALIBRATION
          Dataset name for TensorFlow Datasets for calibration.
          https://www.tensorflow.org/datasets/catalog/overview
  --split_name_for_tfds_for_calibration SPLIT_NAME_FOR_TFDS_FOR_CALIBRATION
          Split name for TensorFlow Datasets for calibration.
          https://www.tensorflow.org/datasets/catalog/overview
  --download_dest_folder_path_for_the_calib_tfds DOWNLOAD_DEST_FOLDER_PATH_FOR_THE_CALIB_TFDS
          Download destination folder path for the calibration
          dataset. Default: $HOME/TFDS
  --tfds_download_flg
          True to automatically download datasets from
          TensorFlow Datasets. True or False
  --load_dest_file_path_for_the_calib_npy LOAD_DEST_FILE_PATH_FOR_THE_CALIB_NPY
          The path from which to load the .npy file containing
          the numpy binary version of the calibration data.
          Default: sample_npy/calibration_data_img_sample.npy
          [20, 513, 513, 3] -> [Number of images, h, w, c]
  --output_tfjs
          tfjs model output switch
  --output_tftrt32
          tftrt float32 model output switch
  --output_tftrt16
          tftrt float16 model output switch
  --output_coreml
          coreml model output switch
  --optimizing_for_coreml
          Optimizing graph for coreml
  --output_edgetpu
          edgetpu model output switch
  --edgetpu_compiler_timeout
          edgetpu_compiler timeout for one compilation process in seconds.
          Default: 3600
  --edgetpu_num_segments
          Partition the model into 'num_segments' segments.
          Default: 1 (no partition)
  --output_onnx
          onnx model output switch
  --onnx_opset ONNX_OPSET
          onnx opset version number
  --onnx_extra_opset ONNX_EXTRA_OPSET
          The name of the onnx 'extra_opset' to enable.
          Default: ''
          'com.microsoft:1' or 'ai.onnx.contrib:1' or 'ai.onnx.ml:1'
  --disable_onnx_nchw_conversion
          Disable onnx NCHW conversion
  --disable_onnx_optimization
          Disable onnx optimization
  --output_openvino_and_myriad
          openvino model and myriad inference engine blob output switch
  --vpu_number_of_shaves VPU_NUMBER_OF_SHAVES
          vpu number of shaves. Default: 4
  --vpu_number_of_cmx_slices VPU_NUMBER_OF_CMX_SLICES
          vpu number of cmx slices. Default: 4
  --optimizing_for_openvino_and_myriad
          Optimizing graph for openvino/myriad
  --rigorous_optimization_for_myriad
          Replace operations that are not supported by myriad with operations
          that are as feasible as possible.
          e.g. 'Abs' -> 'Square' + 'Sqrt'
  --replace_swish_and_hardswish
          Replace swish and hard-swish with each other
  --optimizing_for_edgetpu
          Optimizing for edgetpu
  --replace_prelu_and_minmax
          Replace prelu and minimum/maximum with each other
  --disable_experimental_new_quantizer
          Disable MLIRs new quantization feature during INT8 quantization
          in TensorFlowLite.
  --disable_per_channel
          Disable per-channel quantization for tflite.
  --optimizing_barracuda
          Generates ONNX by replacing Barracuda unsupported layers
          with standard layers. For example, GatherND.
  --locationids_of_the_terminating_output
          A comma-separated list of LocationIDs to be used as output layers.
          e.g. --locationids_of_the_terminating_output 100,201,560
          Default: ''

4-2. Step 1 : Generating saved_model and FreezeGraph (.pb)

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_pb

or

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_pb \
  --optimizing_for_openvino_and_myriad

or

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_pb \
  --optimizing_for_openvino_and_myriad \
  --rigorous_optimization_for_myriad

or

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_pb \
  --optimizing_for_edgetpu

or

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_pb \
  --optimizing_for_coreml

or

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_pb \
  --optimizing_barracuda

4-3. Step 2 : Generation of quantized tflite, TFJS, TF-TRT, EdgeTPU, CoreML and ONNX

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_no_quant_float32_tflite \
  --output_dynamic_range_quant_tflite \
  --output_weight_quant_tflite \
  --output_float16_quant_tflite \
  --output_integer_quant_tflite \
  --string_formulas_for_normalization 'data / 255.0' \
  --output_tfjs \
  --output_coreml \
  --output_tftrt_float32 \
  --output_tftrt_float16 \
  --output_onnx \
  --onnx_opset 11 \
  --output_openvino_and_myriad

or

$ tflite2tensorflow \
  --model_path segm_full_v679.tflite \
  --flatc_path ../flatc \
  --schema_path ../schema.fbs \
  --output_no_quant_float32_tflite \
  --output_dynamic_range_quant_tflite \
  --output_weight_quant_tflite \
  --output_float16_quant_tflite \
  --output_integer_quant_tflite \
  --output_edgetpu \
  --output_integer_quant_typ 'uint8' \
  --string_formulas_for_normalization 'data / 255.0' \
  --output_tfjs \
  --output_coreml \
  --output_tftrt_float32 \
  --output_tftrt_float16 \
  --output_onnx \
  --onnx_opset 11

4-4. Check the contents of the .npy file, which is a binary version of the image file

$ view_npy --npy_file_path calibration_data_img_sample.npy

Press the Q button to display the next image. calibration_data_img_sample.npy contains 20 images extracted from the MS-COCO data set.

image

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, OpenVINO, Myriad Inference Engine blob.

BeforeAfter
segm_full_v679 tflitemodel_float32 tflite