Nous avons résumé la segmentation sémantique à l'aide du Microsoft Cognitive Toolkit (CNTK).
La partie 1 pré-entraînera le CNN utilisé comme épine dorsale pour la segmentation sémantique. Utilisez 1 000 catégories d'images ImageNet pour la pré-formation CNN.
Je vais les présenter dans l'ordre suivant.
ImageNet [1] est une base de données d'images à grande échelle avec plus de 140 millions d'images enregistrées. Jusqu'en 2017, il était utilisé dans le cadre du concours de reconnaissance d'image ILSVCR.
Cette fois, nous avons collecté 1000 catégories de données d'entraînement en les téléchargeant à l'aide de l'URL de l'image gérée par ImageNet. Cependant, comme aucun des 850e nounours et ours en peluche n'a pu être téléchargé, l'image préparée dans Computer Vision: Image Classification Part1 --Understanding COCO dataset Je l'ai utilisé comme substitut.
De plus, les images téléchargées contenaient un nombre important de fichiers JPEG corrompus et d'images qui n'étaient pas liées à la catégorie, je les ai donc nettoyées automatiquement et manuellement. La collection finale d'images était de 775 983.
La structure du répertoire cette fois est la suivante.
COCO MNIST NICS RTSS |―ImageNet |―n01440764 |―n01440764_0.jpg |―… rtss_imagenet.py rtss_vovnet57.py SSMD
VoVNet : One-Shot Aggregation module Cette fois, VoVNet [2] (Variety of View Network) a été adopté comme modèle du réseau neuronal convolutif. VoVNet est un modèle CNN qui utilise moins de mémoire et moins de coûts de calcul que DenseNet [3].
One-Shot Aggregation module VoVNet utilise le module One-Shot Aggregation (OSA) entouré par le carré dans la figure ci-dessous.
VoVNet57 La configuration réseau de VoVNet57 est la suivante.
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 |
Il se compose d'un total de 57 couches de convolution et de sous-échantillonnage 32x. Le nombre total de paramètres est de 31 429 159.
Pour la couche convolutionnelle, appliquez la normalisation par lots [4], puis entrez-la dans la fonction d'activation sans utiliser de biais.
La dernière couche entièrement connectée utilise le terme de biais au lieu de la normalisation par lots.
Nous avons adopté Mish [5] pour la fonction d'activation. Mish est une fonction d'activation qui a été signalée pour surpasser ReLU par Swish [6]. Mish peut être facilement implémenté en combinant la fonction soft plus et la fonction tanh, comme exprimé par la formule suivante.
Mish(x) = x \cdot \tanh \left( \log (1 + e^x) \right)
Mish ressemble à la figure ci-dessous.
Mish évite le neurone mortel de ReLU, et tandis que ReLU est discontinu lorsqu'il est différencié, Mish est continu quel que soit le nombre de fois qu'il est différencié, ce qui rend la fonction de perte plus fluide et plus facile à optimiser.
L'image d'entrée est divisée par la valeur de luminosité maximale de 255.
La valeur initiale du paramètre de chaque couche a été fixée à la distribution normale de He [7].
La fonction de perte est Cross Entropy Error, et l'algorithme d'optimisation est Stochastic Gradient Decent (SGD) avec Momentum. L'élan a été fixé à 0,9.
Le taux d'apprentissage cyclique (CLR) [8] est adopté comme taux d'apprentissage, le taux d'apprentissage maximal est de 0,1, le taux d'apprentissage de base est de 1e-4, la taille du pas est 10 fois le nombre d'époques et la politique est triangulaire2. Je l'ai mis à.
Pour lutter contre le surapprentissage, j'ai fixé la valeur de la régularisation L2 à 0,0005.
La formation du modèle a effectué 100 Epoch avec une formation en mini-lot de taille mini-lot 64.
・ Processeur Intel (R) Core (TM) i7-5820K 3,30 GHz ・ GPU NVIDIA Quadro RTX 5000 16 Go
・ Windows 10 Professionnel 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 ・ Requêtes 2.22.0
Les programmes téléchargés depuis ImageNet et les programmes de formation sont disponibles sur GitHub.
rtss_imagenet.py
rtss_vovnet57.py
La figure ci-dessous est une visualisation de la fonction de perte et des journaux de taux de fausse reconnaissance pendant l'entraînement. Le graphique de gauche montre la fonction de perte, le graphique de droite montre le taux de fausse reconnaissance, l'axe horizontal montre le nombre d'époques et l'axe vertical montre la valeur et le taux de fausse reconnaissance de la fonction de perte, respectivement.
Maintenant que nous avons un modèle de pré-formation CNN, la partie 2 sera complétée par l'ajout de mécanismes pour réaliser la segmentation sémantique.
ImageNet Microsoft COCO Common Objects in Context
Computer Vision : Image Classification Part1 - Understanding COCO dataset