2017-12-18 12 views
0

Momentan forsche ich mit der Objekterkennungs-API von Tensorflow. Dazu folgte ich dieses Tutorial:TF - Objekterkennung mit Bodenwahrheitsboxen

https://www.oreilly.com/ideas/object-detection-with-tensorflow

Dieses Tutorial beschreibt, wie tfrecord von Bildern zu erzeugen und XML-Label-Dateien auch PASCAL VOC. Neben dem Einstieg in die Objekterkennungs-API.

Um diese tfrecords ich einige Code geändert aus dem referenzierten Waschbär-Repository auf GitHub zu erzeugen:

https://github.com/datitran/raccoon_dataset

ich meine Bilder mit LabelImg markiert (https://github.com/tzutalin/labelImg) dort haben Sie die Möglichkeit, in PASCAL VOC-Format zu speichern.

Also folgte ich dem Tutorial und machte einen ersten Test (Training) mit 60 Bildern und nach einer Stunde (574 Schritte) machte ich einen Interrupt um den Checkpoint zu speichern. Danach habe ich einen Export "Graph für inference.py" gemacht und das eingefrorene Modell gespeichert (korrigiere mich, wenn ich etwas Dummes sage, dieses Zeug ist auch neu für mich ...)

Und danach habe ich das geändert jupyter notebook aus dem tutorial für meine wünsche und tada gibt es einige erkenntnisse in testbildern.

So weit so gut, aber jetzt möchte ich sehen, wie gut (Genauigkeit) die Objekterkennung ist und dazu wollte ich einige Grundwahrheiten aus meinem Test PASCAL VOC-Datensatz hinzufügen. Aber ich habe einige Schwierigkeiten, mein Ziel zu erreichen.

Das erste, was ich ist zu tun Boxen manuell hinzuzufügen, die ich von meinem VOC-Datensatz lesen und fügen Sie sie in das Bild, das ich mit https://matplotlib.org/devdocs/api/_as_gen/matplotlib.patches.Rectangle.html gemacht

Aber in meiner Lösung dieser verschiedenen Parzellen/Zahlen erhält. ...

Also dachte ich, vielleicht bietet die Objekterkennungs-API einige Funktionen zum Hinzufügen von Boxen/Bodenwahrheits-Boxen und bewertet die Genauigkeit meiner Erkennung mit meinem Test-VOC-Datensatz.

Also dachte ich, ich einen Blick auf https://github.com/tensorflow/models/tree/master/research/object_detection/utils nehmen, und ich dachte, dass ich eine Funktion (def draw_bounding_box_on_image_array) gefunden habe ein paar Kisten zu meinem image_np zu machen, aber nothings geschieht so ist es das, was die API eine Visualisierung zu tun verwendet:

vis_util.visualize_boxes_and_labels_on_image_array(
     image_np, 
     np.squeeze(boxes), 
     np.squeeze(classes).astype(np.int32), 
     np.squeeze(scores), 
     category_index, 
     use_normalized_coordinates=True, 
     line_thickness=2) 

und das, was ich versucht habe zu verwenden:

vis_util.draw_bounding_box_on_image(
     image_np, 
     bndbox_coordinates[0][1], 
     bndbox_coordinates[0][0], 
     bndbox_coordinates[0][3], 
     bndbox_coordinates[0][2]) 

aber es arent Boxen, wenn ich versuche, das Bild numpy Array plotten

Fehle ich etwas? Und Frage 2 gibt es eine Klasse in der API, die die Auswertung für Genauigkeit durchführt? Ich sehe nicht mit meinen getrockneten Augen ... Und wenn diese Klasse/Funktion verwendet PASCAL VOC zu bestimmen? Mybe Ich kann das verwenden: https://github.com/tensorflow/models/blob/master/research/object_detection/utils/object_detection_evaluation.py aber ich bin nicht zuversichtlich, weil ich auch neu zu Python bin und einige Code/Kommentare sind schwer für mich zu verstehen ...

Vielleicht Sie professionelle Jungs da kann helfen mir

Dank im Voraus

EDIT:

ich ein wenig von diesem Artikel gelesen haben: https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

und jetzt Ich weiß, dass ich eine IoU (Intersection over Union) brauche - weiß also jemand, ob das Objekterkennungs-API eine Funktion dafür bietet? Ich werde schauen wieder in die API ...

Antwort

0

Ich fühle mich Ihr nicht die kompletten Parameter

vis_util.visualize_boxes_and_labels_on_image_array(
    image_np, 
    np.squeeze(boxes), 
    np.squeeze(classes).astype(np.int32), 
    np.squeeze(scores), 
    category_index, 
    use_normalized_coordinates=True, 
    line_thickness=2) 

Sie brauchen, sind vorbei passieren image_np=ImageID, np.squeeze(boxes)=bounding box coordinates, np.squeeze(classes).astype(np.int32)=to which class this object belongs to, np.squeeze(scores)=confidence score that will always be 1