Tensorflow OD API-导出训练有素的模型后,pipeline.config发生更改

时间:2019-08-20 13:10:35

标签: tensorflow object-detection-api

我正在使用Tensorflow OD API 1.13从模型动物园进行预训练的ssd_mobilent_v2_coco的转移学习。完成训练后,我使用以下命令导出冻结的图形:

python object_detection\export_inference_graph.py ^
--input_type image_tensor ^
--pipeline_config_path C:\TF_train\models\model\pipeline.config ^
--trained_checkpoint_prefix C:\TF_train\models\model\model.ckpt-7200 ^
--output_directory C:\export\ssd_v2_7200

在输出文件夹中,有模型文件和pipeline.config文件。但是,当我打开它并将其与原始模型(用于训练模型)进行比较时,我发现某些字段已更改。

例如,这是原始pipeline.config中的特征提取器部分:

feature_extractor {
  type: "ssd_mobilenet_v2"
  depth_multiplier: 1.0
  min_depth: 16
  conv_hyperparams {
    regularizer {
      l2_regularizer {
        weight: 3.99999989895e-05
      }
    }
    initializer {
      truncated_normal_initializer {
        mean: 0.0
        stddev: 0.0299999993294
      }
    }
    activation: RELU_6
    batch_norm {
      decay: 0.999700009823
      center: true
      scale: true
      epsilon: 0.0010000000475
      train: true
    }
  }
  use_depthwise: true
}

并从导出的pipeline.config:

feature_extractor {
   type: "ssd_mobilenet_v2"
   depth_multiplier: 1.0
   min_depth: 16
   conv_hyperparams {
     regularizer {
       l2_regularizer {
         weight: 3.9999998989515007e-05
       }
     }
     initializer {
       truncated_normal_initializer {
         mean: 0.0
         stddev: 0.029999999329447746
       }
     }
     activation: RELU_6
     batch_norm {
       decay: 0.9997000098228455
       center: true
       scale: true
       epsilon: 0.0010000000474974513
       train: true
     }
   }
   use_depthwise: true
 }

注意,l2_regularizer的权重,stddev,衰减和epsilon的精度如何变化。这是预期的吗?为什么会这样?

1 个答案:

答案 0 :(得分:0)

结果证明它是原生细菌issue

  

如果使用cpp扩展名,则存在浮点类型精度的已知问题:

     

Python没有C样式的float,它只有C样式的double。   因此,纯python对float和double使用double precision   字段,cpp扩展将浮点精度用于浮点字段。

我像这样检查了protobuf的主动实现:

python -c "from google.protobuf.internal import api_implementation; print(api_implementation.Type())"

输出为cpp。所以我添加了环境变量:

PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python

现在它可以正常工作了。