mobilenetv2 tflite与python3预期的输出大小

时间:2019-02-25 10:26:01

标签: python python-3.x tensorflow tensorflow-lite

我的mobilenetV2 SSD型号出现问题。 我使用详细的步骤here对其进行了转换,除了在相关步骤中使用CLI工具tflite_convert之外。

这很好,我可以执行推断,但是输出大小不是我期望的。

以下python代码行

interpreter.get_output_details()

告诉我,我将取回10个检测盒:

[{'shape': array([ 1, 10,  4], dtype=int32), 'index': 252, 'name': 'TFLite_Detection_PostProcess', 'quantization': (0.0, 0), 'dtype': <class 'numpy.float32'>}, {'shape': array([ 1, 10], dtype=int32), 'index': 253, 'name': 'TFLite_Detection_PostProcess:1', 'quantization': (0.0, 0), 'dtype': <class 'numpy.float32'>}, {'shape': array([ 1, 10], dtype=int32), 'index': 254, 'name': 'TFLite_Detection_PostProcess:2', 'quantization': (0.0, 0), 'dtype': <class 'numpy.float32'>}, {'shape': array([1], dtype=int32), 'index': 255, 'name': 'TFLite_Detection_PostProcess:3', 'quantization': (0.0, 0), 'dtype': <class 'numpy.float32'>}]

到目前为止很好,但是在我的pipeline.config文件中,我指定了以下后期处理设置

post_processing {
    batch_non_max_suppression {
        score_threshold: 9.99999993922529e-09
        iou_threshold: 0.6000000238418579
        max_detections_per_class: 100                                                            
        max_total_detections: 100
    }
    score_converter: SIGMOID
}

因此,鉴于在经典的tensorflow中运行相同的模型会给我100个盒子,因此我希望检测的输出数量为100。

有没有办法改变输出张量的大小?是在转换时还是在运行时?

我在经典tensorflow中的张量输出详细信息下面添加

[<tf.Tensor 'prefix/detection_boxes:0' shape=<unknown> dtype=float32>, <tf.Tensor 'prefix/detection_scores:0' shape=<unknown> dtype=float32>, <tf.Tensor 'prefix/detection_classes:0' shape=<unknown> dtype=float32>, <tf.Tensor 'prefix/num_detections:0' shape=<unknown> dtype=float32>]

形状未知的地方,这是有道理的,因为我们可以容纳100个或更少的盒子...

对此,我们将不胜感激。

请问我是否已经提出过类似的问题,但我显然没有找到。谢谢。

1 个答案:

答案 0 :(得分:0)

重新阅读export_tflite_ssd_graph.py脚本后,似乎可以选择设置保留的最大检测次数。

将此值设置为100可解决我的问题。我很难过。

对于那些感兴趣的人,我从

更改了导出命令
python3 object_detection/export_tflite_ssd_graph.py \                                            
    --pipeline_config_path=$model_dir/pipeline.config \                                          
    --trained_checkpoint_prefix=$model_dir/model.ckpt \                                          
    --output_directory=$output_dir \                                                             
    --add_post_processing_op=true

python3 object_detection/export_tflite_ssd_graph.py \                                            
    --pipeline_config_path=$model_dir/pipeline.config \                                          
    --trained_checkpoint_prefix=$model_dir/model.ckpt \                                          
    --output_directory=$output_dir \                                                             
    --add_post_processing_op=true \                                                              
    --max_detections=100