2016-07-21 3 views
-1

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.

+0

'.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? –

+0

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

+0

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

Antwort

0

In der Standardimplementierung wird roidb[i]['gt_overlaps'] auf der geposteten Zeile voraussichtlich eine spärliche Matrix sein. Wahrscheinlich haben Sie dies vergessen, als Sie Ihren eigenen Grundwahrheitsleser für Datasets definiert haben, weil er ursprünglich ein numpy.darray ist, der später konvertiert wird. Andere Problemumgehungen sind möglich (und vielleicht vorzuziehen, je nach Anwendung), aber wenn Sie so nah wie möglich an py-faster-rcnn bleiben wollen, wickeln Sie einfach den gt_overlaps Schlüssel jeder Grundwahrheit wie overlaps = scipy.sparse.csr_matrix(overlaps), weitere Referenz kann im ursprünglichen Dataset gefunden werden Dateien (zB lib/datasets/pascal_voc.py).

Verwandte Themen