2
2

More than 3 years have passed since last update.

【Mask R-CNN】AttributeError: 'Model' object has no attribute 'metrics_tensors' にぶち当たったら考えること。

Last updated at Posted at 2020-12-22

Mask R-CNNの続き

修士研究で植生の検出をするために、matterport社のMask R-CNNを使ってインスタンスセグメンテーションを実装しています。
他にもエラー記事をまとめているのでご覧下さい。

AttributeError: module 'tensorflow' has no attribute 'log' を解決した話。

【前編】Mask R-CNNで発生したエラー「UserWarning: An input could not be retrieved. It could be because a worker has died」を解決してみた。

【後編】Mask R-CNNで発生したエラー「UserWarning: An input could not be retrieved. It could be because a worker has died」を解決してみた。

AttributeError: 'Model' object has no attribute 'metrics_tensors' が発生しました。

準備が終わり、以下のプログラムを実行していざ学習をさせようとすると…

Mask_RCNN.py
model.train(dataset_train, dataset_val, 
             learning_rate=config.LEARNING_RATE, 
             epochs=40, 
             augmentation=augmentation,
             layers='heads')
実行結果.
AttributeError: 'Model' object has no attribute 'metrics_tensors' 

このようなエラーが発生してしまいます。
早速、解決していきましょう。

解決方法1:kerasのダウングレード

お馴染み、githubの質問コーナーに同様のトラブルが記載されていました。

Training balloon model on gpu: AttributeError: 'Model' object has no attribute 'metrics_tensors' #1754

kerasを2.0.8にダウングレードすれば良さそうです。
しかし、ダウングレードによって他のコードでもエラーが発生する危険性があり、いたちごっこになりそうだったので、私は解決方法2・3を試しました。

解決方法2:keras_model.metrics.append(loss)に書き換え

前にも紹介しましたが、このエラーはmodel.pyに書かれているコードが古いことに起因しています。
Ctrl+Fで検索することで該当箇所を見つけ、kerasの新バージョンに対応するコードに書き換えました。

model.py
self.keras_model.metrics.append(loss)

結果、エラーは解消!学習を進めることが出来ました!

一件落着!と、思いきや…何かがおかしい!

実行結果.
Epoch 1/20 105/105 [==============================] - 1146s 11s/step - loss: 2.8658 - val_loss: 2.2283

本来ならば、rpn_class_loss等が計算されるはずなのに、計算されているlossは2種類だけなのです。
これを解決するためには解決方法3を試す必要があります。

<参考>Mask R-CNNで計算されるlossについての解説はこちら
loss function #1111

解決方法3:keras_model.add_metric(loss,name)に書き換え

Training balloon model on gpu: AttributeError: 'Model' object has no attribute 'metrics_tensors' #1754

を見てみたところ、もう一つの解決方法が紹介されていました。
先程同様、model.pyの該当部分を以下のように書き換えます。

model.py
self.keras_model.add_metric(loss,name)

すると、エラーを発生させずに、かつ他のlossも計算させることができました!
(実行結果は追い追い更新します…)

まとめ

まとめると、自分が今悩んでいることは、以前地球上の誰かも悩んでいたと踏んでいるので、
他にもMask R-CNNでのエラーが発生したらgithub Issuesを見てみて下さい!
日本語でヒットしないものでも、英語ではヒットすることが多くあるので、英語の重要性をひしひしと感じますね~

一件落着です!
参考になればいいね!お願いします~

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2