Faster R-CNN运行报错:ValueError: ‘a‘ cannot be empty unless no samples are taken

在使用FasterR-CNN进行训练时,遇到51epoch时的ValueError,源于代码中某处的重复执行。解决方法是删除冗余的随机选择和cat操作,确保代码逻辑正确。
摘要由CSDN通过智能技术生成
Traceback (most recent call last):
  File "/root/autodl-tmp/Faster-rcnn/train.py", line 451, in <module>
    fit_one_epoch(model, train_util, loss_history, eval_callback, optimizer, epoch, epoch_step, epoch_step_val, gen, gen_val, UnFreeze_Epoch, Cuda, fp16, scaler, save_period, save_dir)
  File "/root/autodl-tmp/Faster-rcnn/utils/utils_fit.py", line 27, in fit_one_epoch
    rpn_loc, rpn_cls, roi_loc, roi_cls, total = train_util.train_step(images, boxes, labels, 1, fp16, scaler)
  File "/root/autodl-tmp/Faster-rcnn/nets/frcnn_training.py", line 321, in train_step
    losses = self.forward(imgs, bboxes, labels, scale)
  File "/root/autodl-tmp/Faster-rcnn/nets/frcnn_training.py", line 248, in forward
    rpn_locs, rpn_scores, rois, roi_indices, anchor = self.model_train(x = [base_feature, img_size], scale = scale, mode = 'rpn')
  File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1501, in _call_impl
    return forward_call(*args, **kwargs)
  File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/parallel/data_parallel.py", line 169, in forward
    return self.module(*inputs[0], **kwargs[0])
  File "/root/miniconda3/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1501, in _call_impl
    return forward_call(*args, **kwargs)
  File "/root/autodl-tmp/Faster-rcnn/nets/frcnn.py", line 97, in forward
    rpn_locs, rpn_scores, rois, roi_indices, anchor = self.rpn.forward(base_feature, img_size, scale)
  File "/root/autodl-tmp/Faster-rcnn/nets/rpn.py", line 175, in forward
    roi         = self.proposal_layer(rpn_locs[i], rpn_fg_scores[i], anchor, img_size, scale = scale)
  File "/root/autodl-tmp/Faster-rcnn/nets/rpn.py", line 91, in __call__
    index_extra = np.random.choice(range(len(keep)), size=(n_post_nms - len(keep)), replace=True)
  File "mtrand.pyx", line 934, in numpy.random.mtrand.RandomState.choice
ValueError: 'a' cannot be empty unless no samples are taken

运行Bubbliiiing的Faster r-cnn,运行完50个epoch后运行第51个epoch时,就会报上述错误,根据 File "/root/autodl-tmp/Faster-rcnn/nets/frcnn.py", line 97这个提示,定位到错误的代码处,发现我不知道咋搞的,有句代码重复了(B导的源代码是没有问题的)

 if len(keep) < n_post_nms:
            index_extra = np.random.choice(range(len(keep)), size=(n_post_nms - len(keep)), replace=True)
            index_extra = np.random.choice(range(len(keep)), size=(n_post_nms - len(keep)), replace=True)
            keep        = torch.cat([keep, keep[index_extra]])
        keep    = keep[:n_post_nms]
        roi     = roi[keep]
        return roi

删除掉重复的那句代码即可正常运行。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于Faster RCNN的人脸检测识别系统python源码+项目说明+wider_face数据集.zip ### 三,使用说明 1. 锚框的大小为[128、256、512],比率为[1:1、1:2、2:1]。 2. tensorflow的版本是'1.9.0',keras的版本是'2.1.5',除了使用tensorflow2.0之后版本,其他版本都可以尝试。不支持python2.x。 3. 使用的是tensorflow backend,theano可以自行修改。 4. wider face的Label文件格式与VOC2012的label不同,而我使用的Faster RCNN需要VOC2012的格式,所以需要将label文件转换一下格式。具体可以查看 [https://blog.csdn.net/qq_37431083/article/details/102742322](https://blog.csdn.net/qq_37431083/article/details/102742322) 5. 在训练过程中可能会出现`"ValueError: 'a' cannot be empty unless no samples are taken"`这个错误,原因是neg_samples(负样本)的值是一个空值,一般在一轮训练中可能会有负样本为空的情况,这里直接用异常处理跳过了,如果有更好的办法欢迎指正。 [https://blog.csdn.net/qq_37431083/article/details/102628580](https://blog.csdn.net/qq_37431083/article/details/102628580) 6. 这里只使用了wider face数据集中的训练集部分,将训练集分割成训练集,验证集,测试集,但主要使用的是训练集。 ### 四,预测结果 由于显卡性能有限,这里只训练了30轮左右的预测结果,挑出了比较好的一张。 [https://github.com/jiaka/faster_rcnn_keras_wider_face/blob/master/results_imgs/10.png](https://github.com/jiaka/faster_rcnn_keras_wider_face/blob/master/results_imgs/10.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值