【发布时间】: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