我一直按照 https://github.com/tensorflow/models/blob/394baa9f21424d3522ccfbdcee8acd3840891ff6/research/deeplab/g3doc/quantize.md 中的步骤量化USB Coral TPU的DeeplabV3 MobileNetV2模型,但我无法让它工作。
即使我从底部提供的模型(不是8_bits,原始模型(开始,我也无法让它运行。我什至对两种模型都遇到了不同的问题。
对于deeplabv3_mnv2_pascal_train_aug:
- 用于量化的deeplab/train.py
脚本成功运行。
-deeplab/export_model.py
脚本步骤有效。
-tflite_convert
也有效。
- EdgeTPU 编译器收到神秘的错误消息:Internal compiler error. Aborting!
对于deeplabv3_mnv2_dm05_pascal_trainaug: - 用于量化运行的deeplab/train.py
脚本得到:ValueError: Total size of new array must be unchanged for MobilenetV2/Conv/weights lh_shape: [(3, 3, 3, 16)], rh_shape: [(3, 3, 3, 32)]
我尝试了这个解决方案,但没有成功。
-
直接使用 .pb 文件,具有量化感知训练的
deeplab/train.py
会失败,并导致 python 崩溃。 -
在python中直接进行后量化是有效的。
- edgetpu_compiler有效。
- 但是一旦在 TPU 上运行,我们就会得到 0.87 TPS,很可能是因为 edgetpu-converter 无法将所有转换为 edgtpu。
任何使其正常工作的指导都会很棒。我也对不遵循张量流指南的解决方案持开放态度。
我相信您已经与我们联系,我的同事已经分享了该程序,但我会在这里将其提及以供其他人参考:
python deeplab/export_model.py
--checkpoint_path=../../deeplabv3_mnv2_dm05_pascal_trainaug_8bit/model.ckpt
--quantize_delay_step=0
--crop_size=55
--crop_size=55
--model_variant="mobilenet_v2"
--decoder_output_stride=""
--export_path=../../deeplabv3_mnv2_dm05_pascal_trainaug_8bit/frozen_inference_graph.pb
--depth_multiplier=0.5
tflite_convert
--graph_def_file=../../frozen_inference_graph.pb
--output_file=../../frozen_inference_graph.tflite
--output_format=TFLITE
--input_shape=1,55,55,3
--input_arrays="MobilenetV2/MobilenetV2/input"
--inference_type=QUANTIZED_UINT8
--inference_input_type=QUANTIZED_UINT8
--std_dev_values=128
--mean_values=128
--change_concat_input_ranges=true
--output_arrays="ArgMax"
更改 deeplab/common 中的值.py
flags.DEFINE_float('depth_multiplier', 1,...
自
flags.DEFINE_float('depth_multiplier', 0.5,...