如何在微调Tensorflow Inception_V3模型的同时摆脱图中添加的其他操作?

时间:2018-04-15 08:24:58

标签: tensorflow tensorflow-slim

我正在尝试将精细调整的张量流inception_v3模型转换为可以在NVIDIA的Jetson TX2上运行的uff格式。为了转换为uff,支持某些操作,有些则不支持。我能够通过tensorflow提供的imagenet检查点成功冻结并转换为uff inception_v3模型。但是,如果我对模型进行微调,则会在新图表中添加其他操作,如Floor,RandomUniform等,这些操作尚不受支持。冷冻模型后,这些层仍然保留。这也发生在tensorflow网站上提供的鲜花样本的微调中。

  1. 我想了解为什么在图表中添加了额外的操作,而微调只是为了修改最后一层以匹配所需的输出数量。
  2. 如果在训练期间添加它们,我该如何摆脱它们?在释放imagenet的inception_v3模型之前,tensorflow团队遵循了哪些后处理步骤?
  3. 如果需要,我可以共享pbtxt文件。目前,模型图层详细信息已上传到https://github.com/shrutim90/TF_to_UFF_Issue。我正在使用带有GPU的Tensorflow 1.6。

    我正在按照以下步骤冻结或微调模型:https://github.com/tensorflow/models/tree/master/research/slim#Pretrained。如上面的链接所述,要重现此问题,请安装TF-Slim图像模型库并按照以下步骤操作:

    1. python export_inference_graph.py \
      --alsologtostderr \
      --model_name=inception_v3 \
      --output_file=/tmp/inception_v3_inf_graph.pb
    
    2. python freeze_graph.py \
      --input_graph=/tmp/inception_v3_inf_graph.pb \
      --input_checkpoint=/tmp/checkpoints/inception_v3.ckpt \
      --input_binary=true --output_graph=/tmp/frozen_inception_v3.pb \
      --output_node_names=InceptionV3/Predictions/Reshape_1
    
    3. DATASET_DIR=/tmp/flowers
       TRAIN_DIR=/tmp/flowers-models/inception_v3
       CHECKPOINT_PATH=/tmp/my_checkpoints/inception_v3.ckpt
       python train_image_classifier.py --train_dir=$TRAIN_DIR --dataset_dir=$DATASET_DIR --dataset_name=flowers --dataset_split_name=train --model_name=inception_v3 --checkpoint_path=${CHECKPOINT_PATH} --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits
    
    4. python freeze_graph.py \
      --input_graph=/tmp/graph.pbtxt \
      --input_checkpoint=/tmp/checkpoints/model.ckpt-2539 \
      --input_binary=false --output_graph=/tmp/frozen_inception_v3_flowers.pb \
      --output_node_names=InceptionV3/Predictions/Reshape_1
    

    要检查图层,您可以查看.pbtxt文件或使用NVIDIA的convert-to-uff实用程序。

1 个答案:

答案 0 :(得分:0)

运行培训脚本 - > export_inference_graph - > freeze_graph。这摆脱了所有额外的节点,模型可以很容易地转换为uff。