2017-12-11 6 views
1

Ich versuche MXNet/Gluon zu verwenden, um ein Objekterkennungsmodell (speziell mehrere Instanzen eines Objekttyps in einem Bild) zu trainieren, und das im2rec-Tool scheint keine Begrenzungsrahmeninformationen zur .rec-Datei hinzuzufügen.Kann man Rahmenboxen und Labels mit Bildern in RecordIO packen?

mxnet.recordio.pack_img() scheint die Arbeit des Packens des Bildes und des Etiketts zusammen zu tun, aber ich kann nicht finden, wo/wie man Bounding-Box-Informationen im Pixelraum einbezieht. Aus der Dokumentation:

label = 4 # label can also be a 1-D array, for example: label = [1,2,3] 
id = 2574 
header = mx.recordio.IRHeader(0, label, id, 0) 
img = cv2.imread('test.jpg') 
packed_s = mx.recordio.pack_img(header, img) 

Der Header hat keinen Platz für Box info begrenzen. Irgendeine Idee, wie man das macht?

Antwort

1

Ich glaube, ich habe die Antwort gefunden. Das Packen der Beschriftungen in der LST-Datei kann erweiterte Informationen enthalten. Die documentation beschreibt hier, wie diese Information erwartet wird.

Es bleibt also übrig, im2rec.py zu bearbeiten, um den bloßen Etikettenindex durch die erweiterten Informationen zu ersetzen (Zeilen 50 und 60 zum Zeitpunkt des Schreibens). Etwas wie:

def parse_label_file(fp): 
    with open(fp, 'r') as f: 
     data = f.readlines() # or json.load() if appropriate 
     ### Some code here to parse and return the image dimensions 
     ### width, height, id, xmin, ymin, xmax, ymax 
    return (4, 5, width, id, height, xmin, ymin, xmax, ymax) 

... 
label_file_path = path[:-4] + ".txt" # or .json as appropriate 
if path not in cat: 
    cat[path] = parse_label_file(label_file_path) 
... 
Verwandte Themen