0

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

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

如果需要,我可以共享 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 实用程序。

4

1 回答 1

0

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

于 2018-04-24T09:45:22.187 回答