質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%

Q&A

解決済

1回答

200閲覧

KerasのモデルをtfLiteに変換できない。

masa-nakamura

総合スコア5

0グッド

0クリップ

投稿2024/09/06 14:32

編集2024/09/06 14:37

実現したいこと

GoogleColab上で、KerasのモデルをTFLiteに変換して保存したい。

発生している問題・分からないこと

 1週間ほど前まで動いていた、画像分類モデルを作るコードが突然動かなくなりました。モデル自体は作れるが、これをTFLiteのモデルとして保存することができません。エラーメッセージを見ると、「model.save('/content/saved_model/myModel')」という部分で、myModelに拡張子をつけてmyModel.kerasとせよとあったので、そうすると、この部分は動き、Kerasのモデルを保存することができました。
ところが、そのあとでこれをTFLiteに保存する部分で、エラーが起きます。変換すべきモデルが指定されたパスに存在しないといったエラーメッセージが出るが、実際にはそこにはモデル(myModel.keras)が表示されています。ただ、以前はここにはフォルダがあって、その中に.pbという拡張子のついたファイルなどいくつかがあったように記憶していますので、model.save()のところで拡張子をつけたことによって、保存のしかたが変わってしまったような気がしています。

エラーメッセージ

error

1OSError Traceback (most recent call last) 2<ipython-input-30-906685e7ef33> in <cell line: 7>() 3 5 model.save('/content/saved_model/myModel.keras') 4 6 5----> 7 converter = tf.lite.TFLiteConverter.from_saved_model('/content/saved_model/myModel.keras') 6 8 tflite_model = converter.convert() 7 9 8 94 frames 10/usr/local/lib/python3.10/dist-packages/tensorflow/python/saved_model/loader_impl.py in parse_saved_model(export_dir) 11 117 raise IOError(f"Cannot parse file {path_to_pbtxt}: {str(e)}.") from e 12 118 else: 13--> 119 raise IOError( 14 120 f"SavedModel file does not exist at: {export_dir}{os.path.sep}" 15 121 f"{{{constants.SAVED_MODEL_FILENAME_PBTXT}|" 16 17OSError: SavedModel file does not exist at: /content/saved_model/myModel.keras/{saved_model.pbtxt|saved_model.pb}

該当のソースコード

Python

1model.save('/content/saved_model/myModel.keras') 2converter = tf.lite.TFLiteConverter.from_saved_model('/content/saved_model/myModel.keras') 3tflite_model = converter.convert() 4

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

モデルを保存する方法として、.kerasという拡張子をつける以外に.h5という拡張子をつける方法(レガシー)もあるということなので、それを試したが結果は変わらなかった。
Googleで類似の問題について調べたが、該当するものを見つけられなかった。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

 投稿の後で調べたところ、 tf.lite.TFLiteConverter.from_saved_model()の引数とすべきsaved_modelというモデルの形式が使えなくなっていること、そのために拡張子(.keras)をつけて保存するようにとのエラーメッセージが出たことがわかりました。さらに、.kerasの形式のモデルはsaved_modelと同じ方法ではTFLiteに変換できず、別のメソッドを使う必要があることと、実際に変換する実際の方法が次のサイトからわかりました。
https://www.tensorflow.org/lite/models/convert/convert_models?hl=ja

 これによって、TFLiteのモデルを作れたのですが、これにはメタデータがついていませんので、TFLiteのモデルにメタデータをつけるために今まで使っていたコードを適用してみると、それが動かないという状況が発生しています。従って、問題は解決していないのですが、これはまた別のテーマと思われるので、少しやってみて、うまくいかなければ再び質問させていただこうと思っています。

 →その後、いろいろやってみてとりあえず解決しました。というのは、メタデータの追加は次のサイトにある方法で行ったのですが、
https://www.tensorflow.org/lite/models/convert/metadata?hl=ja
その際、モデルを保存するフォルダ名を "test_model" としていたのですが、これを "model_test" に書き換えるとうまくメタデータをつけることができました。どうも、フォルダ名が小文字の"t"で始まると、VSC上でその部分の色が微妙に変わり(もっとはっきり変えてくれたらいいのですが)、何らかのエラーが起きているようです。色が変わる文字は"t"の他にも"a"、"b"など多くあります。全部調べていませんが"c"、"d"、"e"などは変わりません。また、大文字にしておくと色は変わりません。
ということで、問題自体は解決したのですが、この現象はとても奇妙に思えます。どなたかご存じの方がおられたら、教えていただけると幸いです。

投稿2024/09/06 22:19

編集2024/09/06 23:41
masa-nakamura

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2024/09/07 02:04 編集

その「t」の直前にバックスラッシュ(もしくは¥マーク)は付いていませんか? \t は タブ文字と解釈されます。 他の文字は特殊な意味がないのでそのままになります。 tで始めたいのであれば、バックスラッシュをエスケープしたり、pythonであれば、raw文字列(r"")を使うといいでしょう。
masa-nakamura

2024/09/07 12:30

 確かに、パスを表すバックスラッシュが付いていました! そういうことだったのですね。フォルダのパスをコピーしてペーストしていたので、その部分をいじらないといけないことは全く考えが及びませんでした。  コメントどうもありがとうございました。お陰様でよくわかりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問