【问题标题】:NMS does not work in tensorflow-lite quantized modelNMS 在 tensorflow-lite 量化模型中不起作用
【发布时间】:2020-04-07 20:46:26
【问题描述】:

最近我使用 tensorflow 对象检测 API 来训练对象检测器(ssd mobilenet v1)。我想在Coral Edge TPU 上运行检测,所以我使用了量化感知训练。 我在我的 pipeline.config 中添加了以下部分以启用量化:

graph_rewriter {
  quantization {
    delay: 1800
    activation_bits: 8
    weight_bits: 8
  }
}

训练完成后,我使用以下命令将其转换为 .pb:

python $TFAPIPATH/research/object_detection/export_tflite_ssd_graph.py \
 --pipeline_config_path $CONFIG_NAME \
 --trained_checkpoint_prefix $CHECKPOINT_PREFIX \
 --output_directory $OUTPUT_DIR \
 --add_postprocessing_op true

然后 - 使用生成的 .tflite 文件

--input_file=$INPUT_FILE \ 
--output_file=$OUTPUT_FILE \
--input_shapes=1,200,800,3 \
--input_arrays=normalized_input_image_tensor \
--output_arrays='TFLite_Detection_PostProcess','TFLite_Detection_PostProcess:1','TFLite_Detection_PostProcess:2','TFLite_Detection_PostProcess:3' \
--inference_type=QUANTIZED_UINT8 \ 
--mean_values=128 \
--std_values=128 \
--change_concat_input_ranges=false \
--allow_custom_ops

我使用自己编译的 tflite 库(Ubuntu 18.04 x64)从 C++ 代码运行检测。我使用 Edge TPU 文档中提到的 tensorflow 存储库修订版来确保它与 libedgetpu(13.0 版)兼容。

检测成功运行,但与非量化版本相比,我的准确率下降了约 10%。我发现这种损失很大一部分是由于 tflite 没有执行 NMS 步骤造成的。我观察到一张图像,其中检测到两个几乎完全重叠的物体。

据我了解,tflite 支持 nms 操作,使用推荐工具(如上所述)转换为 tflite 的 ssd mobilenet v1 网络应该执行 nms。但出于某种原因,在我的情况下它不起作用。我不得不在我的 C++ 代码中添加 nms 步骤作为后处理操作,以提高模型的性能。

我是否遗漏了什么,或者我使用的转换命令有问题?

谢谢!

【问题讨论】:

  • 您好,从 .pb 转换为 .tflite 后,您验证模型的准确性了吗?只是想知道这是否是由于 tflite 转换或 edgetpu 编译器造成的问题。
  • @NamVu 嗨,我没有比较 .pb 和 .tflite 的准确性,但是在 CPU 上运行的 .tflite 模型的结果与由 edgetpu 编译器编译的模型的结果几乎没有差异在 TPU 上运行。所以我几乎可以肯定这不是edgetpu编译器的问题。

标签: tensorflow-lite object-detection-api google-coral


【解决方案1】:

嗯,准确率下降可能是一个应该解决的单独问题,但我不认为这是因为没有执行 nms。当您使用以下标志将 pb 模型导出到 .tflite 时:--add_postprocessing_op true,后处理操作中应包含非最大抑制。如果您想探索,代码在这里:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/kernels/detection_postprocess.cc

我知道这已经很长时间了,但此时您可能需要再次检查您的配置并降低 iou_threshold 以减少输出框:https://github.com/tensorflow/models/blob/master/research/object_detection/samples/configs/ssd_mobilenet_v1_quantized_300x300_coco14_sync.config#L130

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2019-05-16
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    相关资源
    最近更新 更多