利用Tensorflow-slim Finetuning分类网流程及C++预测

  1. 安装tensorflow及TF-slim库
    https://github.com/tensorflow/tensorflow
    https://github.com/tensorflow/models/tree/master/research/slim


  2. 将自己的训练数据转换成TF-records
    切换到TF-slim(tensorflow/models/research/slim)库目录下

    • 数据准备:将每一类数据置于一个单独的文件夹下,并将所有文件置于同一个根目录下
      如:
      • MyDatasetDir
      • Positive
        • pos-1.jpg
        • pos-2.jpg
      • Negtive
        • neg-1.jpg
        • neg-2.jpg
    • 仿照download_and_convert_flowers.py脚本写一个转换脚本如下:

      </home/wz/DeepLearning/tensorflow_working_dir/models/research/slim/datasets/convert_own_classification_data.py>
       </home/wz/DeepLearning/tensorflow_working_dir/models/research/slim/convert_image_data_to_tfrecords.py>
    • 仿照flowers.py定义自己的数据集类并将之添加到dataset_factory中

      </home/wz/DeepLearning/tensorflow_working_dir/models/research/slim/datasets/flowers.py>
      </home/wz/DeepLearning/tensorflow_working_dir/models/research/slim/datasets/dataset_factory.py>
    • 执行转换脚本

      python convert_image_data_to_tfrecords.py
      --dataset_dir='图像存放根目录'
      --tfrecords_saving_dir='TF-records存放路径'
      dataset_name="MY_OWN_DATA"

    • 将在目标路径下生成对应的tfrecord格式文件,包括trainset,validationset和label.txt


  3. 执行finetuning脚本进行训练
    DATASET_DIR=/home/wz/Desktop/safety_belt/tf_records_merged
    TRAIN_DIR=/home/wz/Desktop/safety_belt/inception_resnet_vs
    CHECKPOINT_PATH=/home/wz/Desktop/safety_belt/inception_resnet_vs/inception_v3.ckptpython

    train_image_classifier.py \
    --train_dir= ${TRAIN_DIR} \
    --dataset_dir=${DATASET_DIR} \
    --dataset_name=safety_belt \
    --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

    注意:最后的trainable_scopes可以指定需要进行训练的层,上述脚本只是训练了新更改的层,要训练所有的层,只需更改为trainable_scopes=InceptionV3/


  4. 合并参数文件和模型文件到一个pb文件

    • 生成模型文件
      export_inference_graph.py脚本提供了转换slim-nets中定义的模型到文件的功能,但是它只提供了示例的数据集如mnist、imagenet等,要做简单的修改,适应自己的模型类别,只需更改模型初始化的类别数目即可。

      python export_inference_graph.py
      --model_name=inception_v3

    • 整合文件
      脚本工具位于tensorflow/python/tools/freeze_graph.py

      freeze_graph.py
      --input_graph=/home/wz/inception_v3_graph.pb
      --input_binary=True
      --input_checkpoint=/home/wz/Desktop/safety_belt/inception_resnet_vs/model.ckpt-1960
      --output_graph=/home/wz/nn_model_frozen.pb
      --output_node_names=InceptionV3/Predictions/Reshape_1

  5. 利用C++调用整合后的pb文件并预测输出
    TODO: VPN挂了,等网好了,装好bazel就开干!!!!!!!!!!!!!!!!
    shit, 原来bazel安装无需VPN,步骤如下, 参照https://docs.bazel.build/versions/master/install-ubuntu.html


    安装openjdk-8-jdk(ubuntu14.04)

    sudo add-apt-repository ppa:webupd8team/java
    sudo apt-get update && sudo apt-get install oracle-java8-installer
    如果是16.04, 则直接
    sudo apt-get install openjdk-8-jdk
  6. 安装bazel,这一步按照上面链接给的方法需要翻墙,提供一种不需要翻墙的方法
    https://github.com/bazelbuild/bazel/releases

    <ul><li>sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python</li>
    <li>从上述地址下载二进制安装文件,并运行安装。注意,前提是第一步的jdk安装成功,否则,运行脚本也会失败的。
    安装命令为
    chmod +x bazel-0.7.1-installer-linux-x86_64
    sh ./bazel-0.7.1-installer-linux-x86_64.sh --user</li>
    <li>设置环境变量
    gedit ~/.bashrc
    文件末尾加入一行:export PATH="$PATH:$HOME/bin"

  7. 编译并进行图片预测的测试
bazel build tensorflow/examples/label_image:label_image
bazel-bin/tensorflow/examples/label_image/label_image \
  --image=${HOME}/Pictures/flowers.jpg \
  --input_layer=input \
  --output_layer=InceptionV3/Predictions/Reshape_1 \
  --graph=/tmp/frozen_inception_v3.pb \
  --labels=/tmp/imagenet_slim_labels.txt \
  --input_mean=0 \
  --input_std=255

TODO, 将检测网的预测改成C++

猜你喜欢

转载自blog.csdn.net/mllearnertj/article/details/78341995
今日推荐