【问题标题】:keras FRCNN training error message: Exception: 'a' cannot be empty unless no samples are takenkeras FRCNN 训练错误消息:异常:'a' 不能为空,除非没有采样
【发布时间】:2019-07-15 01:09:48
【问题描述】:

我正在使用这种 FRCNN 实现来训练我的数据集:

https://github.com/kbardool/keras-frcnn

在训练期间,我得到没有堆栈跟踪的随机异常:

708/1000 [====================>.........] - ETA: 289s - rpn_cls: 0.1376 - rpn_regr: 0.3020 - detector_cls: 
709/1000 [====================>.........] - ETA: 288s - rpn_cls: 0.1376 - rpn_regr: 0.3020 - detector_cls: 
710/1000 [====================>.........] - ETA: 287s - rpn_cls: 0.1374 - rpn_regr: 0.3021 - detector_cls: 
711/1000 [====================>.........] - ETA: 286s - rpn_cls: 0.1373 - rpn_regr: 0.3018 - detector_cls: 
712/1000 [====================>.........] - ETA: 284s - rpn_cls: 0.1371 - rpn_regr: 0.3017 - detector_cls: 
713/1000 [====================>.........] - ETA: 283s - rpn_cls: 0.1370 - rpn_regr: 0.3019 - detector_cls: 
714/1000 [====================>.........] - ETA: 282s - rpn_cls: 0.1370 - rpn_regr: 0.3017 - detector_cls: 0.0783 - detector_regr: 0.0686
Exception: 'a' cannot be empty unless no samples are taken

715/1000 [====================>.........] - ETA: 281s - rpn_cls: 0.1369 - rpn_regr: 0.3015 - detector_cls: 
716/1000 [====================>.........] - ETA: 280s - rpn_cls: 0.1367 - rpn_regr: 0.3013 - detector_cls: 
717/1000 [====================>.........] - ETA: 279s - rpn_cls: 0.1365 - rpn_regr: 0.3009 - detector_cls: 
718/1000 [====================>.........] - ETA: 278s - rpn_cls: 0.1363 - rpn_regr: 0.3011 - detector_cls:

虽然我收到错误消息,但损失仍然下降,可能是什么原因以及如何解决?

【问题讨论】:

    标签: python keras faster-rcnn


    【解决方案1】:

    我一直看到相同的错误消息,它似乎不会影响培训课程的结果。我注意到当我在训练数据上的边界框小于 20px 时,就会出现这个错误。如果您真的确定是什么导致了问题,请告诉我!

    【讨论】:

    • 看起来在 ResNet50 中必须大于 64 px(ResNet50 的最小内核)。
    【解决方案2】:

    我找到了根本原因并进行了一些表面上的修复,但我对正在发生的事情没有 100% 的了解。该异常发生在第二次尝试执行 np.random.choice 时。如果第一个选择因异常而失败,则作者正在缓存异常并尝试选择不进行重复数据删除。但是,如果 neg_samples 为空,则第二次调用会产生异常。

    try:
        selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples), replace=False).tolist()
    except:
        selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples), replace=True).tolist()
    

    我已经这样“修复”了它:

    try:
      selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples), replace=False).tolist()
    except:
        selected_neg_samples = np.random.choice(neg_samples, C.num_rois - len(selected_pos_samples) if len(neg_samples)>0 else 0, replace=True).tolist()
    

    再次,我不确定是否可以在 neg_samples 为空的情况下进行采样。可能对算法有更好理解的人可以在这里给出合理的评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2014-04-05
      • 2018-01-08
      • 2016-11-16
      • 2015-07-10
      • 2012-01-26
      • 2017-09-06
      相关资源
      最近更新 更多