[PYTHON] Computer Vision: Objekterkennung Part2-Single Shot Multi Detector

Ziel

Dies ist eine Fortsetzung der Objekterkennung mit dem Microsoft Cognitive Toolkit (CNTK).

In Teil 2 wird die Objekterkennung durch CNTK unter Verwendung der in Teil 1 vorbereiteten Trainingsdaten durchgeführt. Es wird davon ausgegangen, dass CNTK und NVIDIA GPU CUDA installiert sind.

Einführung

In Computer Vision: Objekterkennung Teil 1 - Bounding Box-Vorverarbeitung aus Microsoft Common Object in Contexts (COCO) [1] wird der Bounding Box angezeigt Wir haben ein Kategorielabel und eine Ankerbox vorbereitet.

In Teil 2 werden wir ein einstufiges Objekterkennungsmodell unter Verwendung eines neuronalen Netzwerks erstellen und trainieren.

Struktur des neuronalen Netzes

Dieses Mal habe ich ein Modell erstellt, das die Multi-Scale-Feature-Map von SSD [2] und die direkte Standortvorhersage von YOLOv2 [3] kombiniert. Der Umriss des implementierten neuronalen Netzwerks ist in der folgenden Abbildung dargestellt.

ssmd.png

Fügen Sie der Feature-Map eine Faltungsschicht hinzu, die aus dem vorab trainierten neuronalen Faltungsnetzwerk (CNN) erhalten wurde. Die hinzugefügte Faltungsschicht übernimmt nicht den Bias-Term, die Aktivierungsfunktion übernimmt exponentielle lineare Einheiten (ELUs) [[4]](# Referenz) und die Chargennormalisierung [[5]](# Referenz) wird angewendet. Ich werde.

In der endgültigen Ausgabefaltungsschicht wird der Bias-Term übernommen, ohne die nichtlineare Aktivierungsfunktion und die Chargennormalisierung zu verwenden, um Begrenzungsrahmen, Objektivität und Kategorisierung durchzuführen.

Die Idee war, eine 26x26-Feature-Map zum Erkennen kleiner Objekte, eine 13x13-Feature-Map zum Erkennen mittlerer Objekte und eine 7x7-Feature-Map zum Erkennen großer Objekte zu verwenden. Die verwendeten Ankerkästen sind 26 × 26 (0,06, 0,08), 13 × 13 (0,19, 0,28), (0,31, 0,67), (0,66, 0,35), 7 × 7 (0,31, 0,67), (0,66, 0,35), ( 0,83, 0,83) verwendet wird.

Der YOLO-Algorithmus wird verwendet, um den Begrenzungsrahmen vorherzusagen.

x = \sigma(t_x) + c_x \\
y = \sigma(t_y) + c_y \\
w = p_w \log(1 + e^{t_w}) \\
h = p_h \log(1 + e^{t_h}) \\
objectness = \sigma(t_o)

Wenden Sie nun die Sigmoid-Funktion auf die Netzwerkausgabe $ t_x, t_y $ an und addieren Sie dann die oberen linken Koordinaten $ c_x, c_y $ jeder Gitterzelle, um die Mittelkoordinaten jeder Gitterzelle vorherzusagen. Um die Breite und Höhe vorherzusagen, wenden Sie die Soft-Plus-Funktion auf die Netzwerkausgabe $ t_w, t_h $ an und multiplizieren Sie sie mit der Ankerbox. Wenden Sie die Sigmoid-Funktion aus Gründen der Objektivität auf die Ausgabe $ t_o $ an.

Einstellungen im Training

Der Anfangswert des hinzugefügten Faltungsschichtparameters wurde auf He's Normalverteilung [6] gesetzt.

Dieses Mal werden wir die Multitasking-Verlustfunktion verwenden. Verwenden Sie Generalized IoU Loss [7] für die Bounding-Box-Regression, Binary Cross Entropy für die Vorhersage der Objektivität und Cross Entropy Error für die Kategorisierung. Die Details der Verlustfunktion werden später erklärt.

Loss = Generalized IoU Loss + Binary Cross Entropy + Cross Entropy Error

Adam [8] wurde als Optimierungsalgorithmus verwendet. Adams Hyperparameter $ β_1 $ wird auf 0,9 und $ β_2 $ auf den Standardwert von CNTK gesetzt.

Verwenden Sie für die Lernrate die zyklische Lernrate (CLR) [9], die maximale Lernrate beträgt 1e-3, die Basis-Lernrate beträgt 1e-5, die Schrittgröße beträgt das 10-fache der Anzahl der Epochen und die Richtlinie ist Auf triangular2 setzen.

Das Modelltraining führte 100 Epochen durch Mini-Batch-Training durch.

Implementierung

Ausführungsumgebung

Hardware-

・ CPU Intel (R) Core (TM) i7-5820K 3,30 GHz ・ GPU NVIDIA Quadro RTX 5000 16 GB

Software

・ Windows 10 Pro 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Cntkx 0.1.13 ・ H5py 2.9.0 ・ Numpy 1.17.3 ・ Pandas 0.25.0 ・ Scikit-Learn 0.21.3

Programm zum Ausführen

Das Schulungsprogramm ist auf [GitHub] verfügbar (https://github.com/sho-watari/ComputerVision/tree/master/SSMD).

ssmd_training.py


Kommentar

Ich werde den Hauptinhalt dieser Implementierung ergänzen.

Generalized IoU Loss Der quadratische Fehler [10] und der glatte L1-Verlust [2] [11] werden für die Regressionsverlustfunktion des Begrenzungsrahmens verwendet. Der Schnittpunkt über der Union (IoU), der den Grad der Überlappung zwischen dem Begrenzungsrahmen und dem richtigen Begrenzungsrahmen angibt, kann übernommen werden.

IoU hat jedoch das Problem, mehr Sattelpunkte bei der Optimierung zu haben, da der Wert 0 ist, wenn sich die beiden Begrenzungsrahmen überhaupt nicht überlappen. Die dort vorgeschlagene ist Generalized IoU (GIoU).

Unter der Annahme, dass der prädiktive Begrenzungsrahmen $ A $ und der korrekte Begrenzungsrahmen $ B $ ist, lautet GIoU wie folgt.

IoU = \frac{A \cap B}{A \cup B} \\
GIoU = IoU  - \frac{C - (A \cup B)}{C} \\
GIoU Loss = 1 - GIoU

Wobei $ C $ den kleinsten rechteckigen Bereich darstellt, der die beiden Begrenzungsrahmen umgibt. GIoU nimmt einen Wert von [-1, 1] an.

Multi-Task Loss Beim Training eines neuronalen Netzwerks, das mehrere Aufgaben ausführt, wird für jede Aufgabe eine Verlustfunktion definiert. Wie oben erwähnt, besteht diese Verlustfunktion aus den folgenden Verlustfunktionen.

Loss = Generalized IoU Loss + Binary Cross Entropy + Cross Entropy Error

Der verallgemeinerte IoU-Verlust bezieht sich auf die Mittelkoordinaten und die Breite / Höhe des Begrenzungsrahmens, die binäre Kreuzentropie auf die Objektivität, um festzustellen, ob ein Objekt vorhanden ist, und der Kreuzentropiefehler auf die Objektkategorisierung. Berechnen Sie die Verlustfunktion.

Daher lautet die Formel für die Verlustfunktion:

Loss = \lambda^{coord}_{obj} \sum^N \sum^B \left\{1 - \left(IoU - \frac{C - (A \cup B)}{C} \right) \right\} +
\lambda^{coord}_{noobj} \sum^N \sum^B \left\{1 - \left(IoU - \frac{C - (A \cup B')}{C} \right) \right\} \\
+ \lambda^{conf}_{obj} \sum^N \sum^B -t \log(\sigma(t_o)) + \lambda^{conf}_{noobj} \sum^N \sum^B -(1 - t) \log(1 - \sigma(t_o)) \\
+ \lambda^{prob}_{obj} \sum^N \sum^B -t \log(p_c) + \lambda^{prob}_{noobj} \sum^N \sum^B -t \log(p_c) \\

\lambda^{coord}_{obj} = 1.0, \lambda^{coord}_{noobj} = 0.1, \lambda^{conf}_{obj} = 1.0, \lambda^{conf}_{noobj} = 0.1, \lambda^{prob}_{obj} = 1.0, \lambda^{prob}_{noobj} = 0.0

Hier repräsentieren $ A, B und C $ den vorhergesagten Begrenzungsrahmen, den korrekten Begrenzungsrahmen und den kleinsten rechteckigen Bereich, der die beiden Begrenzungsrahmen umgibt, und $ B '$ repräsentiert den Standardbegrenzungsrahmen. Der Standardbegrenzungsrahmen bedeutet einen Begrenzungsrahmen, dessen Mittelkoordinaten und Breite / Höhe jeder Gitterzelle dieselbe Größe wie der Ankerrahmen haben.

Der Beitrag jeder Verlustfunktion wird durch den Koeffizienten $ \ lambda $ angepasst, der auf 1,0 gesetzt wird, wenn das Objekt vorhanden ist, und auf 0,1 oder 0,0, wenn das Objekt nicht vorhanden ist.

Dynamic Target Assignment Beim Netzwerktraining entsprechen nicht alle prädiktiven Begrenzungsrahmen den korrekten Daten. Daher werden wir das Maß für die dynamische Zuweisung des richtigen Begrenzungsrahmens und der richtigen Kategoriebezeichnung verwenden.

Wenn beispielsweise die obere linke Abbildung in der folgenden Abbildung das Eingabebild ist, ist der vom Netzwerk ausgegebene Begrenzungsrahmen der rote Begrenzungsrahmen in der oberen rechten Abbildung, wenn ein Objekt vorhanden ist. Der richtige Begrenzungsrahmen ist jedoch der grüne Begrenzungsrahmen in der unteren linken Abbildung. Berechnen Sie hier die IoU des Ausgabe-Begrenzungsrahmens und des korrekten Begrenzungsrahmens und weisen Sie dem vorhergesagten Begrenzungsrahmen mit der größten IoU den richtigen Begrenzungsrahmen und die richtige Kategoriebezeichnung zu. Die Abbildung unten rechts zeigt den vorhergesagten Begrenzungsrahmen, dem der richtige Begrenzungsrahmen zugewiesen ist, in Blau.

Einige der Begrenzungsrahmen, denen nicht der richtige Begrenzungsrahmen zugewiesen wurde, weisen jedoch hohe IoU-Werte auf. Weisen Sie ihnen daher auch den richtigen Begrenzungsrahmen und die richtige Kategoriebeschriftung zu. Der vorhergesagte Begrenzungsrahmen, dem durch diesen Vorgang der richtige Begrenzungsrahmen zugewiesen wird, ist in der unteren rechten Abbildung hellblau dargestellt.

dynamic_target_assignment.png

Wenn der richtige Begrenzungsrahmen nicht zugewiesen werden kann, ist das Objekt nicht vorhanden und der Standardbegrenzungsrahmen ist zugewiesen.

Ergebnis

Training loss and error

Die folgende Abbildung zeigt eine Visualisierung jeder Verlustfunktion während des Trainings. Von links GIoU-Verlust für Bounding-Box-Regression, Binäre Kreuzentropie für Objektivität und Kreuzentropiefehler für Kategorisierung. Die horizontale Achse repräsentiert die Anzahl der Epochen und die vertikale Achse repräsentiert den Wert der Verlustfunktion.

ssmd416x416_logging.png

Validation mAP score

Nachdem wir ein einstufiges Objekterkennungsmodell trainiert haben, haben wir die Leistung anhand von Verifizierungsdaten bewertet.

Für diese Leistungsbewertung haben wir die mittlere durchschnittliche Präzision (mAP) berechnet. Ich habe sklearn verwendet, um den mAP zu berechnen und die IoU auf 0,5 zu setzen. Die Verwendung von val2014 als Validierungsdaten führte zu folgenden Ergebnissen:

mAP50 Score 10.3

FPS and demo

Ich habe auch FPS gemessen, was ein Index für die Ausführungsgeschwindigkeit ist. Die Messung verwendete die Standardzeit des Python-Moduls und die verwendete Hardware war die GPU NVIDIA GeForce GTX 1060 6GB.

39.9 FPS

Unten sehen Sie ein Video eines Objekterkennungsversuchs mit einem trainierten Modell.

ssmd.gif

Das Ergebnis ist nicht gut. Ich möchte noch einmal versuchen, Objekte zu erkennen.

Referenz

Microsoft COCO Common Objects in Context

Computer Vision : Image Classification Part2 - Training CNN model Computer Vision : Object Detection Part1 - Bounding Box preprocessing

  1. 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.
  2. 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.
  3. Joseph Redmon and Ali Farhadi. "YOLO9000: better, faster, stronger", The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2017, pp 7263-7271.
  4. Djork-Arné Clevert, Thomas Unterthiner, and Sepp Hochreiter. "Fast and accurate deep network learning by exponential linear units (ELUs)." arXiv preprint arXiv:1511.07289 (2015).
  5. Ioffe Sergey and Christian Szegedy. "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift", arXiv preprint arXiv:1502.03167 (2015).
  6. Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification", The IEEE International Conference on Computer Vision (ICCV). 2015, pp 1026-1034.
  7. Hamid Rezatofighi, Nathan Tsoi, JunYoung Gwak, Amir Sadeghian, Ian Reid, and Silvio Savarese., "Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression", The IEEE Conference on Computer Vision and Pattern Recognition (CVPR). 2019, pp 658-666.
  8. Diederik P. Kingma and Jimmy Lei Ba. "Adam: A method for stochastic optimization", arXiv preprint arXiv:1412.6980 (2014).
  9. Leslie N. Smith. "Cyclical Learning Rates for Training Neural Networks", 2017 IEEE Winter Conference on Applications of Computer Vision. 2017, pp 464-472.
  10. 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.
  11. Ross Girshick. "Fast R-CNN", The IEEE International Conference on Computer Vision (ICCV). 2015, pp 1440-1448.

Recommended Posts

Computer Vision: Objekterkennung Part2-Single Shot Multi Detector
Computer Vision: Objekterkennung - Nicht maximale Unterdrückung
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: Objekterkennung Teil 1 - Bounding Box-Vorverarbeitung
[PyTorch Tutorial ①] Was ist PyTorch?
Objekterkennung (Single Shot MultiBox Detector) Benutzeroberfläche zur Erstellung von XML-Dateien für Bilddaten