[PYTHON] Vision par ordinateur: segmentation sémantique, partie 1: pré-formation ImageNet VoVNet

Cible

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.

  1. Téléchargez et préparez depuis ImageNet
  2. VoVNet : One-Shot Aggregation module
  3. Paramètres de la formation

introduction

Téléchargez et préparez depuis ImageNet

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.

osa.png

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.

Fonction d'activation Mish

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

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.

Paramètres en formation

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.

la mise en oeuvre

Environnement d'exécution

Matériel

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

Logiciel

・ 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

Programme à exécuter

Les programmes téléchargés depuis ImageNet et les programmes de formation sont disponibles sur GitHub.

rtss_imagenet.py


rtss_vovnet57.py


résultat

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.

vovnet57_logging.png

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.

référence

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

Vision par ordinateur: segmentation sémantique, partie 1: pré-formation ImageNet VoVNet
Vision par ordinateur: segmentation sémantique, partie 2 - segmentation sémantique en temps réel
Computer Vision: Object Detection Part1 - Prétraitement de la boîte englobante