[PYTHON] Computer Vision: Semantische Segmentierung Teil1 - ImageNet-Vorschulung von VoVNet

Ziel

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.

  1. Laden Sie ImageNet herunter und bereiten Sie es vor
  2. VoVNet : One-Shot Aggregation module
  3. Einstellungen im Training

Einführung

Laden Sie ImageNet herunter und bereiten Sie es vor

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.

osa.png

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.

Aktivierungsfunktion Misch

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.png

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.

Einstellungen im Training

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.

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.50 ・ Numpy 1.17.3 ・ Opencv-Contrib-Python 4.1.1.26 ・ Pandas 0.25.0 ・ Anfragen 2.22.0

Programm zum Ausführen

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


Ergebnis

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.

vovnet57_logging.png

Nachdem wir nun ein Backbone-CNN-Pre-Training-Modell haben, wird Teil 2 mit zusätzlichen Mechanismen zur Erzielung einer semantischen Segmentierung abgeschlossen.

Referenz

ImageNet Microsoft COCO Common Objects in Context

Computer Vision : Image Classification Part1 - Understanding COCO dataset

  1. Jia Deng, Wei Dong, Richard Socher, Li-Jia Li, Kai Li, and Li Fei-Fei. "ImageNet: A Large-Scale Hierarchical Image Database", IEEE conference on Computer Vision and Pattern Recognition (CVPR). 2009, p. 248-255.
  2. Youngwan Lee, Joong-won Hwang, Sangrok Lee, Yuseok Bae, and Jongyoul Park. "An Energy and GPU-Computation Efficient Backbone Network for Real-Time Object Detection", the IEEE Conference on Computer Vision and Pattern Recognition Workshops. 2019, p. 0-0.
  3. Gao Huang, Zhuang Liu, Laurens van der Maaten, and Kilian Q. Weinberger. "Densely Connected Convolutional Networks", the IEEE conference on Computer Vision and Pattern Recognition (CVPR). 2017. p. 4700-4708.
  4. Ioffe Sergey and Christian Szegedy. "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift", arXiv preprint arXiv:1502.03167 (2015).
  5. Misra, Diganta. "Mish: A self regularized non-monotonic neural activation function." arXiv preprint arXiv:1908.08681 (2019).
  6. Ramachandran, Prajit, Barret Zoph, and Quoc V. Le. "Searching for activation functions." arXiv preprint arXiv:1710.05941 (2017).
  7. 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, p. 1026-1034.
  8. Leslie N. Smith. "Cyclical Learning Rates for Training Neural Networks", 2017 IEEE Winter Conference on Applications of Computer Vision. 2017, p. 464-472.

Recommended Posts

Computer Vision: Semantische Segmentierung Teil1 - ImageNet-Vorschulung von VoVNet
Computer Vision: Semantische Segmentierung Teil2 - Semantische Echtzeitsegmentierung
Computer Vision: Objekterkennung Teil 1 - Bounding Box-Vorverarbeitung