Ich trainiere ein py-schneller-rcnn folgenden Anweisungen von https://github.com/deboc/py-faster-rcnn/blob/master/help/Readme.md auf einem benutzerdefinierten Dataset.AttributError: 'numpy.darray' Objekt hat kein Attribut 'toarray' in py-schneller-rcnn
Allerdings erhalte ich folgende Fehlermeldung:
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'
Dies ist der Code-Schnipsel von roidb.py (Linie 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()
Ich bin nicht in der Lage, einen Weg zu finden, um Dies.
'.toarray()' ist eine Methode eines scipy * Sparse * Arrays (http://docs.scipy.org/doc/scipy/reference/sparse.html). Haben Sie ein normales numpy Array an eine Funktion übergeben, die irgendwo ein spärliches Array erwartet? –
Ich habe es geschafft, den Fehler zu umgehen, indem ich kleinere Änderungen vornahm, 'gt_overlaps = roidb [i] ['gt_overlaps'] ' gt_overlaps = sp.sparse.csr_matrix (gt_overlaps) .toarray(), aber dann bin ich mir nicht sicher, ob Endergebnisse werden wie erwartet sein. – vikiboy
Zuerst prüfen, was 'gt_overlaps' ist. Ist es "np.matrix"? 'np.tarray'. Wenn Sie den Code bearbeiten können, um 'sp.sparse ...' hinzuzufügen, können Sie ihn auch bearbeiten, um die 'toarray' zu entfernen. Das wäre die einfachere Lösung. – hpaulj