跑 Faster-RCNN 出現:RuntimeWarning: invalid value encountered in greater_equal 等這樣的warning

在跑 Faster-RCNN 的代碼的時候,可能手殘想更改官方的Pascal VOC數據集,改成跑自己的數據集。

但是可能會出現這樣或者類似的warning:

RuntimeWarning: invalid value encountered in true_divide

RuntimeWarning: invalid value encountered in greater_equal

...

接着可能就會出現loss = nan的情況,且一直不見好轉


通過一步步調試和網上搜集,發現可能的原因:

就是這篇博客給出的原因,具體討論也可以參照rbg大佬github官方issue

由於我們更換了數據集,所以在製作自己的數據集的annotation時候,可能會出現bbox的寬w和高h爲0的情況,這樣導致在代碼中計算偏移的時候,log(w/w_{a})或者log(h/h_{a})爲負無窮大。

preview

這樣求得的rpn_loc和gt_rpn_loc算rpn loss的時候會使得loss = nan


具體做法:嘗試修改rpn網絡中把anchor轉location的地方添加一個限制,即限制t_{w}t_{h}不能太小

參考代碼:

    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是在crop圖片時候保留的最大寬高,也是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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章