Introduction

  • Kerasの独自モデル(FasterRCNN)を触っているときに出たエラーの解決方法
    • 独自モデルをロードして、メソッドを使用したときにエラーがおきた。
  • 独自モデルはtf.keras.Modelを継承したモデル

Issue

  • 独自モデルをロードして、predict_on_batchメソッドを使用したときににエラーが起きた。
  • 独自モデルでは、predict_on_batchメソッドをオーバーライドしていて、引数を1つ増やしている。(threshold)

TroubleShooting

  • 恐らく、保存したモデル(SavedModel形式)には、メソッドまで記録されていない。
  • 独自モデルをインスタンス化して、保存したモデルから重みだけをコピーすることで解決できた。
# 学習・保存
import tensorflow as tf
 
class OriginalMoldel(tf.keras.Model):
	def predict_on_batch(self,threshold):
		# 処理
 
o_model = OriginalModel()
 
# 中略
o_model.fit()
o_model.save("./saved_model") # saved_model形式で保存
 
# 読み込み・推論
import tensorflow as tf
 
class OriginalMoldel(tf.keras.Model):
	def predict_on_batch(self,threshold):
		# 処理
 
# モデルをインスタンス化
o_model = OriginalModel()
 
# 中略
 
# 学習させたモデルの読み込み
traine_model = tf.keras.load_model("./saved_model")
# 重みのコピー
o_model.set_weights(trained_model.get_weights())
# 独自モデルのオーバーライドしたメソッドを実行
o_model.predict_on_batch(threshold=0.7)
 

Conclusion

  • 独自モデルでメソッドをオーバーライドしている場合は、独自モデルをインスタンス化したあと重みをコピーすることが大事。

Reference