今回の記事はTensorFlow形式のpbモデルをtensorFlow Lite形式のtflite形式に変換する際に起きたエラーとその回避方法に関しての記事です。初心者がハマりやすい箇所をまとめられていると思うので是非参考にして下さい。
pbモデルをtflite形式に変換する方法
TensorFlow形式のpbモデルをtensorFlow Lite形式のtflite形式に変換する際に必要なものはtflite変換用の「tflite_graph.pb」と「Object Detection API」の実行環境です。
「Object Detection API」の環境構築が済んでいない方は下記記事を参考に実行環境をまずは作成してください。
「「Object Detection API」の環境構築をローカルPCに行う方法。」
「「Object Detection API」の環境構築をDocker上に行う方法。」
では「Object Detection API」の実行環境がすでにある方は「models/research」のフォルダに移動して下記を実行しましょう。
models/research#python object_detection/export_tflite_ssd_graph.py --input_type image_tensor --pipeline_config_path [pipelineのpath] --trained_checkpoint_prefix [ckptのpath] --output_ddirectory [出力先フォルダ] -add_postprocessing_op=true
piplineは転移学習の際に使用したものを使用してください。(転移学習に使用したものがmobilenetならmobilenet、inceptionならinceptionのpipelineを使用してください)また、ckptは一番進んでいるもの(値が一番大きいもの)です。
上記実行後出力先フォルダにtflite_graph.pbが格納されています。
するとasset,valiavleフォルダなどが作成されており、savedmodel-model.tfliteのtfliteファイルも保存成功しております。
このできたものを次に.tfliteの拡張子に変換します。
models/research#tflite_convert --output=[/models/original_data/result1.tflite] --graph_def_file=[~tflite_graph.pb] --input_arrays=normalized_input_iamge_tensor(これはPipelineかpbtxtに記載されています。) --output_arrays=TFLite_Detection_PostProcess,TFLite_Detection_PostProcess:1,TFLite_Detection_PostProcess:2,TFLite_Detection_PostProcess:3 --input_shapes=1,300,300,3 --allow_custom_ops
–output_file=[出力先のファイル名とパスを記載(.tfliteまで記載)]
–graph_def_file=[tflite_graph.pbグラフpath(.pbまで記載)]
–input_arrays=[パイプラインかpbtxtに記載際あり]
–output_arrays[引数はTFLite_Detection_PostProcess:1〜4まで]
おそらく出力項目が4つなので4つ分の記載にする必要があるから
–output_arraysがtfliteの結果出力に割と影響している様ですが、あまり記述がないのでtfliteに変換できてもうまくXcodeの方でうまく出力が出ていない際はここを変更してみてください。
result1.tfliteがうまく出力されていればOKです。
pbモデルをtflite形式に変換する際のエラーと回避方法一覧
OSError: SavedModel file does not exist at: frozen_inference_graph.pb/{saved_model.pbtxt|saved_model.pb}
とか
ValueError: Attempted to save a function b’__inference_<lambda>_45′ which references a symbolic Tensor Tensor(“Variable/read:0”, shape=(), dtype=float32) that is not a simple constant. This is not supported.
上記エラーはtensorflowのversionが1系の為起きているようで、2.2にバージョンを上げれば問題なく動作しました。
Pythonパスがうまく取れていない「not found」系のエラーは下記を事項してslimのpathを通してください。
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
これでもパスが通らない様でしたら下記を実行してslimをコンパイル?し直して下さい。
python setup.py build
python setup.py install
これで解消されるはず。
何かと初心者には環境構築の難度が高い点がありますが、是非上記でエラーを解消してください。他にもエラー等あると思うので困っている方はコメントください。自身の勉強のためにも調査いたします。
では今回の記事は以上です。他にも多数の機械学習・Python関連の記事を記載しているので是非そちらも参考にして下さい。
コメント
[…] […]
[…] 【TensorFlow】TensorFlow形式のpbモデルをTensorFlow Lite形式のtflite変換に関するerr… […]