如何在微调 Tensorflow Inception_V3 模型时摆脱图表中添加的额外操作?

How to get rid of additional ops added in the graph while fine-tuning Tensorflow Inception_V3 model?

我正在尝试将经过微调的 tensorflow inception_v3 模型转换为 uff 格式,这在 NVIDIA 的 Jetson TX2 上可以是 运行。对于转换为 uff,某些操作是受支持的,有些则不是。我能够使用 tensorflow 提供的 imagenet 检查点成功冻结并转换为 uff inception_v3 模型。但是,如果我对模型进行微调,则会在新图中添加尚不支持的其他操作,如 Floor、RandomUniform 等。这些层甚至在冻结模型后仍然存在。这也发生在 tensorflow 网站上提供的花卉样本微调中。

  1. 我想了解为什么在图中添加了额外的操作,而微调只是为了修改最后一层以匹配所需的输出数量。
  2. 如果它们是在训练时添加的,我该如何去除它们?在发布 inception_v3 imagenet 模型之前,tensorflow 团队遵循了哪些 post 处理步骤?

如果需要,我可以分享 pbtxt 文件。目前,模型层详细信息上传至 https://github.com/shrutim90/TF_to_UFF_Issue。我正在使用带 GPU 的 Tensorflow 1.6。

我正在按照以下步骤冻结或微调模型:https://github.com/tensorflow/models/tree/master/research/slim#Pretrained。如上文所述 link,要重现该问题,请安装 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 实用程序。

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