【问题标题】:AttributeError: 'numpy.ndarray' object has no attribute 'toarray' in py-faster-rcnnAttributeError:“numpy.ndarray”对象在 py-faster-rcnn 中没有属性“toarray”
【发布时间】:2016-11-25 11:49:27
【问题描述】:

我正在按照https://github.com/deboc/py-faster-rcnn/blob/master/help/Readme.md 的说明训练一个 py-faster-rcnn 在自定义数据集上。

但是,我收到以下错误:

    Preparing training data...
    Process Process-1:
    Traceback (most recent call last):
  File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in run
    self._target(*self._args, **self._kwargs)
  File "./train_faster_rcnn_alt_opt.py", line 122, in train_rpn
    roidb, imdb = get_roidb(imdb_name)
  File "./train_faster_rcnn_alt_opt.py", line 67, in get_roidb
    roidb = get_training_roidb(imdb)
  File "/home/Work/code/py-faster-rcnn/tools/../lib/fast_rcnn/train.py", line 122, in get_training_roidb
    rdl_roidb.prepare_roidb(imdb)
  File "/home/Work/code/py-faster-rcnn/tools/../lib/roi_data_layer/roidb.py", line 31, in prepare_roidb
    gt_overlaps = roidb[i]['gt_overlaps'].toarray()
AttributeError: 'numpy.ndarray' object has no attribute 'toarray'

这是 roidb.py 的 code-sn-p(第 31 行):

for i in xrange(len(imdb.image_index)):
    roidb[i]['image'] = imdb.image_path_at(i)
    roidb[i]['width'] = sizes[i][0]
    roidb[i]['height'] = sizes[i][1]
    # need gt_overlaps as a dense array for argmax
    gt_overlaps = roidb[i]['gt_overlaps'].toarray()

我找不到解决办法。

【问题讨论】:

  • .toarray() 是一个 scipy sparse 数组 (docs.scipy.org/doc/scipy/reference/sparse.html) 的方法。你是否将一个常规的 numpy 数组传递给一个需要稀疏数组的函数?
  • 我设法通过做一些小的编辑来绕过错误,gt_overlaps = roidb[i]['gt_overlaps'] gt_overlaps = sp.sparse.csr_matrix(gt_overlaps).toarray(),但是我不确定最终结果是否会是正如预期的那样。
  • 首先检查gt_overlaps是什么。是np.matrix吗? np.ndarray。如果您可以编辑代码以添加此sp.sparse...,您也可以对其进行编辑以删除toarray。那将是更简单的解决方法。

标签: python numpy deep-learning caffe


【解决方案1】:

在标准实现中,发布行上的roidb[i]['gt_overlaps'] 预计是一个稀疏矩阵。您在定义自己的数据集地面实况阅读器时可能忘记了这一点,因为它最初是一个 numpy.ndarray,后来被转换。其他解决方法是可能的(根据应用程序可能更可取),但如果您想尽可能接近 py-faster-rcnn,只需将每个基本事实的 gt_overlaps 键包装起来,如 overlaps = scipy.sparse.csr_matrix(overlaps),可以找到更多参考在原始数据集文件中(即lib/datasets/pascal_voc.py)。

【讨论】:

    猜你喜欢
    • 2013-12-07
    • 2017-07-03
    • 2020-12-03
    • 2020-11-29
    • 2020-10-06
    • 2018-01-25
    • 2016-06-29
    • 2020-03-25
    • 2017-10-16
    相关资源
    最近更新 更多