[PYTHON] Computer Vision: Objekterkennung Teil 1 - Bounding Box-Vorverarbeitung

Ziel

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.

  1. Objekterkennung durch neuronales Netzwerk
  2. Bounding Box Vorbehandlung
  3. Dimensionsclustering zum Erstellen einer Ankerbox
  4. Erstellen einer Datei, die von dem von CNTK bereitgestellten integrierten Reader gelesen werden soll

Einführung

Objekterkennung durch neuronales Netzwerk

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.

Bounding Box Vorbehandlung

[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

Dimensionsclustering zum Erstellen einer Ankerbox

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.

Erstellen einer Datei, in der Bilder, Begrenzungsrahmen und Kategorien zum Lernen gespeichert werden

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.

Implementierung

Ausführungsumgebung

Hardware-

CPU Intel(R) Core(TM) i7-7700 3.60GHz

Software

・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Numpy 1.17.3 ・ Opencv-Contrib-Python 4.1.1.26 ・ Scikit-Learn 0.21.3

Programm zum Ausführen

Das implementierte Programm wird auf [GitHub] veröffentlicht (https://github.com/sho-watari/ComputerVision/tree/master/SSMD).

ssmd_boundingbox.py


Kommentar

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")

Ergebnis

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)

dimension_clustering.png

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.

Referenz

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

  1. Wei Liu, Dragomir Anguelov, Dumitru Erhan, Christian Szegedy, Scott Reed, Cheng-Yang Fu, and Alexander C. Berg. "SSD: Single Shot MultiBox Detector", arXiv preprint arXiv:1512.02325 (2016). European Conference on Computer Vision. 2016, pp 21-37.
  2. Joseph Redmon, Santosh Divvala, Ross Girshick, and Ali Farhadi. "You Only Look Once: Unified, Real-Time Object Detection", The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2016, pp 779-788.
  3. Tsung-Yi Lin, Michael Maire, Serge Belongie, Lubomir Bourdev, Ross Girshick, James Hays, Pietro Perona, Deva Ramanan, C. Lawrence Zitnick, and Piotr Dollár. "Microsoft COCO: Common Objects in Context", European Conference on Computer Vision. 2014, pp 740-755.
  4. Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun. "Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks", In Advances in Neural Information Processing Systems (NIPS). 2015, pp 91-99.
  5. Joseph Redmon and Ali Farhadi. "YOLO9000: better, faster, stronger", The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2017, pp 7263-7271.

Recommended Posts

Computer Vision: Objekterkennung Teil 1 - Bounding Box-Vorverarbeitung
Computer Vision: Objekterkennung - Nicht maximale Unterdrückung
Computer Vision: Objekterkennung Part2-Single Shot Multi Detector
Computer Vision: Semantische Segmentierung Teil2 - Semantische Echtzeitsegmentierung
[PyTorch Tutorial ⑧] Tutorial zur Feinabstimmung der Erkennung von Fackelsichtobjekten
Computer Vision: Semantische Segmentierung Teil1 - ImageNet-Vorschulung von VoVNet