Wir haben die semantische Segmentierung mit dem Microsoft Cognitive Toolkit (CNTK) zusammengefasst.
Teil 1 wird das CNN, das als Rückgrat für die semantische Segmentierung verwendet wird, vorab trainieren. Verwenden Sie 1.000 Kategorien von ImageNet-Bildern für das CNN-Pre-Training.
Ich werde sie in der folgenden Reihenfolge vorstellen.
ImageNet [1] ist eine umfangreiche Bilddatenbank mit mehr als 140 Millionen registrierten Bildern. Bis 2017 wurde es im Bilderkennungswettbewerb ILSVCR eingesetzt.
Dieses Mal haben wir 1.000 Kategorien von Trainingsdaten gesammelt, indem wir sie über die URL des von ImageNet verwalteten Bildes heruntergeladen haben. Da jedoch keiner der 850. Teddybären und Teddybären heruntergeladen werden konnte, wurde das Bild in Computer Vision: Bildklassifizierung Teil 1 - COCO-Datensatz verstehen vorbereitet. Ich habe es als Ersatz benutzt.
Außerdem enthielten die heruntergeladenen Bilder eine erhebliche Anzahl beschädigter JPEG-Dateien und Bilder, die nicht mit der Kategorie zusammenhängen, sodass ich sie automatisch und manuell bereinigte. Die endgültige Bildersammlung war 775.983.
Die Struktur des Verzeichnisses ist diesmal wie folgt.
COCO MNIST NICS RTSS |―ImageNet |―n01440764 |―n01440764_0.jpg |―… rtss_imagenet.py rtss_vovnet57.py SSMD
VoVNet : One-Shot Aggregation module Dieses Mal wurde VoVNet [2] (Variety of View Network) als Modell für das Faltungsnetzwerk übernommen. VoVNet ist ein CNN-Modell, das weniger Speicher und weniger Rechenaufwand benötigt als DenseNet [3].
One-Shot Aggregation module VoVNet verwendet das OSA-Modul (One-Shot Aggregation), das in der folgenden Abbildung vom Quadrat umgeben ist.
VoVNet57 Die Netzwerkkonfiguration von VoVNet57 ist wie folgt.
Layer | Filters | Size/Stride | Input | Output |
---|---|---|---|---|
Convolution2D | 64 | 3x3/2 | 3x224x224 | 64x112x112 |
Convolution2D | 64 | 3x3/1 | 64x112x112 | 64x112x112 |
Convolution2D | 128 | 3x3/1 | 64x112x112 | 128x112x112 |
MaxPooling2D | 3x3/2 | 128x112x112 | 128x56x56 | |
OSA module | 128, 256 | 3x3/1, 1x1/1 | 128x56x56 | 256x56x56 |
MaxPooling2D | 3x3/2 | 256x56x56 | 256x28x28 | |
OSA module | 160, 512 | 3x3/1, 1x1/1 | 256x28x28 | 512x28x28 |
MaxPooling2D | 3x3/2 | 512x28x28 | 512x14x14 | |
OSA module | 192, 768 | 3x3/1, 1x1/1 | 512x14x14 | 768x14x14 |
OSA module | 192, 768 | 3x3/1, 1x1/1 | 768x14x14 | 768x14x14 |
OSA module | 192, 768 | 3x3/1, 1x1/1 | 768x14x14 | 768x14x14 |
OSA module | 192, 768 | 3x3/1, 1x1/1 | 768x14x14 | 768x14x14 |
MaxPooling2D | 3x3/2 | 768x14x14 | 768x7x7 | |
OSA module | 224, 1024 | 3x3/1, 1x1/1 | 768x7x7 | 1024x7x7 |
OSA module | 224, 1024 | 3x3/1, 1x1/1 | 1024x7x7 | 1024x7x7 |
OSA module | 224, 1024 | 3x3/1, 1x1/1 | 1024x7x7 | 1024x7x7 |
GlobalAveragePooling | global | 1024x7x7 | 1024x1x1 | |
Dense | 1000 | 1024x1x1 | 1000x1x1 | |
Softmax | 1000 | 1000 | 1000 |
Es besteht aus insgesamt 57 Faltungsschichten und 32x Downsampling. Die Gesamtzahl der Parameter beträgt 31.429.159.
Wenden Sie für die Faltungsschicht die Chargennormalisierung [4] an und geben Sie sie dann ohne Verwendung von Bias in die Aktivierungsfunktion ein.
Die letzte vollständig verbundene Schicht verwendet den Bias-Term anstelle der Chargennormalisierung.
Wir haben Mish [5] für die Aktivierungsfunktion übernommen. Mish ist eine Aktivierungsfunktion, von der berichtet wurde, dass sie ReLU von Swish [[6]] übertrifft (#reference). Misch kann leicht implementiert werden, indem die Soft-Plus-Funktion und die Tanh-Funktion kombiniert werden, wie durch die folgende Formel ausgedrückt.
Mish(x) = x \cdot \tanh \left( \log (1 + e^x) \right)
Misch sieht aus wie in der Abbildung unten.
Mish vermeidet das tödliche Neuron von ReLU, und während ReLU bei der Differenzierung diskontinuierlich ist, ist Mish kontinuierlich, egal wie oft es differenziert wird, wodurch die Verlustfunktion reibungsloser und einfacher zu optimieren ist.
Das Eingabebild wird durch den maximalen Helligkeitswert von 255 geteilt.
Der Anfangswert des Parameters jeder Schicht wurde auf die Normalverteilung von He [7] eingestellt.
Die Verlustfunktion ist Cross Entropy Error, und der Optimierungsalgorithmus ist Stochastic Gradient Decent (SGD) mit Momentum. Das Momentum wurde auf 0,9 festgelegt.
Die zyklische Lernrate (CLR) [8] wird als Lernrate verwendet, die maximale Lernrate beträgt 0,1, die Basislernrate beträgt 1e-4, die Schrittgröße beträgt das 10-fache der Anzahl der Epochen und die Richtlinie ist dreieckig2. Ich habe es eingestellt.
Als Maßnahme gegen Überlernen habe ich den Wert der L2-Regularisierung auf 0,0005 gesetzt.
Das Modelltraining führte 100 Epochen mit einem Mini-Batch-Training der Mini-Batch-Größe 64 durch.
・ CPU Intel (R) Core (TM) i7-5820K 3,30 GHz ・ GPU NVIDIA Quadro RTX 5000 16 GB
・ Windows 10 Pro 1909 ・ CUDA 10.0 ・ CuDNN 7.6 ・ Python 3.6.6 ・ Cntk-gpu 2.7 ・ Cntkx 0.1.50 ・ Numpy 1.17.3 ・ Opencv-Contrib-Python 4.1.1.26 ・ Pandas 0.25.0 ・ Anfragen 2.22.0
Von ImageNet heruntergeladene Programme und Schulungsprogramme sind auf [GitHub] verfügbar (https://github.com/sho-watari/ComputerVision/tree/master/RTSS).
rtss_imagenet.py
rtss_vovnet57.py
Die folgende Abbildung zeigt die Verlustfunktion und die Protokolle der falschen Erkennungsrate während des Trainings. Das Diagramm links zeigt die Verlustfunktion, das Diagramm rechts zeigt die Fehlerkennungsrate, die horizontale Achse zeigt die Anzahl der Epochen und die vertikale Achse zeigt den Wert der Verlustfunktion bzw. die Fehlerkennungsrate.
Nachdem wir nun ein Backbone-CNN-Pre-Training-Modell haben, wird Teil 2 mit zusätzlichen Mechanismen zur Erzielung einer semantischen Segmentierung abgeschlossen.
ImageNet Microsoft COCO Common Objects in Context
Computer Vision : Image Classification Part1 - Understanding COCO dataset