1. ホーム
  2. ディープラーニング

などの警告を出しながらFaster-RCNNを実行します。RuntimeWarning: invalid value encountered in greater_equal などの警告が表示されます。

2022-01-23 18:41:53

Faster-RCNNのコードを実行する際、ハンディキャップがあるので、公式のPascal VOCデータセットを変更し、代わりに独自のデータセットを実行したいと思うかもしれません。

しかし、このようなWARNINGがあったり、似たようなことがあるかもしれません。

RuntimeWarning: true_divide で無効な値に遭遇しました。

RuntimeWarning: greater_equal で無効な値が検出されました。

...

そうなると、決して良くならないロス=ナンの状況もあるかもしれません


段階的にデバッグを行い、ネットで調べたところ、以下のような原因が考えられることがわかりました。

このブログの記事 の文脈で議論することも可能です。 rbg big brother github公式イシュー .

データセットを変更したため、データセットの独自のアノテーションを作成する際に、幅w、高さhが0のbboxができることがあり、コード内でオフセットを計算することになる または は負の無限大を表します。

この結果、rpn_locとgt_rpn_locは、rpnの損失を計算するときに損失=nanになる。


実際には、rpnネットワークを修正して、アンカーからロケーションへの場所に制限を加えてみてください。 小さすぎてはいけない

リファレンスコードです。

    BBOX_XFORM_CLIP = np.log(bbox_min / img_max) # bbox: 16 img_max: 1000

    tw = np.maximum(tw, BBOX_XFORM_CLIP)
    th = np.maximum(th, BBOX_XFORM_CLIP)

ここで、bbox_min はあらかじめ設定されている bbox のボックスの高さの最小値、img_max は画像を切り出すときに確保される最大幅、および bbox のボックスの高さの最大値である。

もちろん、1e-3を1e-4にするなど、学習率を下げる方法もあります

または、RNG_SEED = 3 を RNG_SEED = 4 に変更する。


参考にしてください。

[1]. https://www.jianshu.com/p/1168fe20cc23

[2]. https://github.com/rbgirshick/py-faster-rcnn/issues/65

[3]. https://github.com/chenyuntc/simple-faster-rcnn-pytorch