tf.image.non_max_suppression
Faster-RCNN ネットワークでテンソルフローを使用しています。テンソルフロー グラフは正常に構築され、エラーなしで実行されますが、グラフを実行すると、出力は空のテンソルになり、サイズが 0 の入力に依存する次元になります (たとえば、形状 (0,4) の出力テンソルを取得します)。そこで、tfdbg
ツールを使用して何が起こっているのかを確認しました。テンソル値はopUninitialized tensor
用であることがわかりました。tf.image.non_max_suppression
nms op の出力に依存する後続のすべてのテンソルも として表示されUnintialized tensor
ます。
この Faster-RCNN ネットワークをトレーニングし、 を使用して重みを保存しましたtf.train.Saver(..).save(..)
。ネットワークをトレーニングしたとき、NMS を実行するために python numpy 関数を使用していました。それは op ラッパーを使用してネットワークにプラグインされtf.py_func
、モデルのトレーニング後、python 関数を tensorflow 実装に変更することにしました。
tf.image.non_max_suppression
には学習可能なパラメーターがないため、保存したモデルを読み込んでグラフを実行すると、テンソルが初期化されない理由がわかりません。sess.run(tf.global_variables_initializer())
私もモデルをロードする前にやろうとしましたが、変更はなく、NMS とその後の操作をtf.train.Saver(..).restore(..)
まだ見Uninitialized tensor
ています。tfdbg
この動作とそれを解決する方法についてのアイデアはありますか?
これは私が使用する方法ですtf.image.non_max_suppression
:
keep = tf.image.non_max_suppression(proposals_yxyx, scores, tf.constant(cfg[cfg_key].RPN_POST_NMS_TOP_N), cfg[cfg_key].RPN_NMS_THRESH, name="Non-maximal-suppression")