Wir haben die Objekterkennung mit dem Microsoft Cognitive Toolkit (CNTK) zusammengefasst.
In Teil 1 bereiten wir die Objekterkennung mit dem Microsoft Cognitive Toolkit vor. Wir werden die von Microsoft bereitgestellten Microsoft Common Objects in Context (COCO) als Trainingsdatensatz für die Objekterkennung verwenden.
Ich werde sie in der folgenden Reihenfolge vorstellen.
Die Objekterkennung ist grob in zwei Systeme unterteilt: ein zweistufiges System, das Kandidatenbereiche erkennt und diese dann klassifiziert, und ein einstufiges System, das Kandidatenbereiche gleichzeitig erkennt und klassifiziert, und es gibt einen Kompromiss zwischen Genauigkeit und Geschwindigkeit. Es ist bekannt, dass es in ist.
Speziell für die Objekterkennung, die Echtzeit erfordert, wird ein einstufiges Hochgeschwindigkeitssystem verwendet.
Daher folgen wir dieses Mal unter Verwendung von Merkmalen aus mehreren Schichten wie SSD [1] dem Algorithmus von YOLO [2] zum Erlernen des Begrenzungsrahmens und der Klassifizierung. Trainieren Sie Ihr Netzwerk zur Echtzeit-Objekterkennung mit Ihrem Modell.
Das Eingabebild ist ein BGR-Farbbild mit einer Größe von 416 x 416, und das Basis-Faltungs-Neuronale Netzwerk (CNN) verfügt über ein Computer Vision: Bildklassifizierung Part2-Training CNN-Modell. Verwenden Sie das Original-CNN (coco21), das darin geschult ist.
[Computer Vision: Bildklassifizierung Teil 1 - COCO-Datensatz verstehen](https://qiita.com/sho_watari/items/bf0cdaa32cbbc2192393#coco-%E3%83%87%E3%83%BC%E3%82%BF%E3% 82% BB% E3% 83% 83% E3% 83% 88% E3% 81% AE% E8% A7% A3% E6% 9E% 90) Wie im Microsoft COCO-Bild erwähnt, der Begrenzungsrahmen und seine Informationen zu allen 80 Kategorien für den Begrenzungsrahmen werden gegeben. [3]
Der YOLO-Algorithmus wird verwendet, um den Kandidatenbereich zu erkennen, in dem das Objekt vorhanden ist. Daher ist es als Vorverarbeitung erforderlich, die Mittelkoordinaten, die Breite und die Höhe des in jedem Bild enthaltenen Begrenzungsrahmens zu berechnen und jeweils in das Verhältnis umzuwandeln, wenn die Größe des Originalbilds 1 beträgt. Die Struktur des Verzeichnisses ist diesmal wie folgt.
COCO |―COCO |―train2014 |―COCO_train2014_000000000009.jpg |―... MNIST NICS SSMD ssmd_boundingbox.py coco21.h5
Begrenzungsrahmen gibt es in vielen Formen, daher sind Ankerkästen eine Möglichkeit, das Lernen zu stabilisieren. [4]
Sowohl SSD als auch YOLOv2 [5] verwenden Ankerkästen. Wie bei YOLOv2 ist es aufgrund der Breite und Höhe des Begrenzungsrahmens in den Trainingsdaten typisch, k-means Clustering für unbeaufsichtigtes Lernen zu verwenden. Finden Sie die Breite und Höhe. Ich habe die Anzahl der Ankerkästen auf fünf gesetzt.
Was Sie diesmal benötigen, ist eine Textdatei von ImageDeserializer, die die für das Training verwendeten Bilder liest, und CFTDeserializer, die den Begrenzungsrahmen und die Kategoriebeschriftung liest, die jedem Bild entsprechen. ImageDeserializer und CTFDeserializer sind die integrierten Lesegeräte von CNTK. AA% AC), CTFDeserializer wird in Computer Vision: Bildunterschrift Teil1 - STAIR-Untertitel eingeführt. tun.
Dieses Mal möchte ich jedoch mehrere Begrenzungsrahmen und Kategorien lernen, die gleichzeitig in einem Bild vorhanden sind. Daher war während des Trainings ein gewisser Einfallsreichtum erforderlich. Wir werden diese Ideen in Teil 2 des eigentlichen Trainings vorstellen.
CPU Intel(R) Core(TM) i7-7700 3.60GHz
・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Numpy 1.17.3 ・ Opencv-Contrib-Python 4.1.1.26 ・ Scikit-Learn 0.21.3
Das implementierte Programm wird auf [GitHub] veröffentlicht (https://github.com/sho-watari/ComputerVision/tree/master/SSMD).
ssmd_boundingbox.py
Ich werde einige Teile des auszuführenden Programms extrahieren und ergänzen.
Da einem einzelnen Bild mehrere Kategoriebeschriftungen und Begrenzungsrahmen zugewiesen sind, behalten Sie die Bild-ID als Schlüssel im Wörterbuchformat bei.
ssmd_boundingbox.py
bbox_dict = {}
for ann in annotations:
image_id = ann["image_id"]
category_id = ann["category_id"]
bbox = ann["bbox"]
bbox.append(categories[str(category_id)][0])
bbox_dict.setdefault(image_id, []).append(bbox)
Normalisieren Sie für den richtigen Begrenzungsrahmen die Mittelkoordinaten (x, y) und Breite / Höhe mit der ursprünglichen Breite / Höhe auf [0, 1].
ssmd_boundingbox.py
box = [(bbox[0] + bbox[2] / 2) / width, (bbox[1] + bbox[3] / 2) / height, bbox[2] / width, bbox[3] / height]
Schließlich wird eine k-Mittel-Clusterbildung für die Breite und Höhe aller Begrenzungsrahmen durchgeführt.
dimension_clustering
def dimension_clustering(bounding_boxes, num_anchors):
centroid, label, _ = k_means(bounding_boxes, num_anchors)
np.save("anchor_boxes.npy", centroid)
print("\nSaved anchor_boxes.npy")
Wenn das Programm ausgeführt wird, werden die Mittelkoordinaten und die Breite / Höhe des Begrenzungsrahmens, die dem Begrenzungsrahmen entsprechende Kategoriebeschriftung und schließlich die Breite eines typischen Begrenzungsrahmens geschrieben, der durch k-Mittel-Clustering aus allen Begrenzungsrahmen erhalten wird. Und speichern Sie die Höhe als Numpy-Datei.
Now 10000 samples...
Now 20000 samples...
...
Now 80000 samples...
Number of samples 82081
Saved anchor_boxes.npy
Die Breite und Höhe des diesmal erhaltenen Ankerkastens sind wie folgt. In aufsteigender Reihenfolge sortiert und mit 2 gültigen Nummern angezeigt, ist die Ankerbox in der folgenden Abbildung dargestellt.
(0.06, 0.08)
(0.19, 0.28)
(0.31, 0.67)
(0.66, 0.35)
(0.83, 0.83)
Nachdem Sie die zum Erstellen und Trainieren der Ankerbox verwendete Textdatei erstellt haben, werden Sie in Teil 2 mithilfe von CNTK im End-to-End-Objekterkennungsnetzwerk geschult.
Microsoft COCO Common Objects in Context
Computer Vision : Image Classification Part1 - Understanding COCO dataset Computer Vision : Image Classification Part2 - Training CNN model Computer Vision : Image Caption Part1 - STAIR Captions
Recommended Posts