Il s'agit d'une implémentation Pytorch de modèles de segmentation sémantique sur l'ensemble de données d'analyse MIT ADE20K (http://sceneparsing.csail.mit.edu/).
ADE20K est le plus grand ensemble de données open source pour la segmentation sémantique et l'analyse de scène, publié par l'équipe de vision informatique du MIT. Suivez le lien ci-dessous pour trouver le référentiel pour notre ensemble de données et nos implémentations sur Caffe et Torch7: https://github.com/csailvision/sceneParsing
Si vous souhaitez simplement jouer avec notre démo, veuillez essayer ce lien: http://sceseegmentation.csail.mit.edu Vous pouvez télécharger votre propre photo et analyser!
Vous pouvez également utiliser ce terrain de jeu Colab Notebook ici pour bricoler avec le code pour segmenter une image.
Tous les modèles pré-entraînés peuvent être trouvés sur: http://sceneparsing.csail.mit.edu/model/pytorch


Le codage couleur des catégories sémantiques peut être trouvée ici: https://docs.google.com/spreadsheets/d/1se8yetb2dets7oupe86fxgyd269pmycawe2mtkuj2w8/edit?usp=sharing
config/defaults.py .Ce module calcule la moyenne et la déviation standard sur tous les appareils pendant la formation. Nous constatons empiriquement qu'une grande taille de lot raisonnable est importante pour la segmentation. Nous remercions Jiayuan Mao pour ses aimables contributions, veuillez vous référer à Synchronized-Batchnorm-Pytorch pour plus de détails.
L'implémentation est facile à utiliser comme:
Pour la tâche de la segmentation sémantique, il est bon de maintenir le rapport d'aspect des images pendant la formation. Nous réimplémentons donc le module DataParallel et faisons de son prise en charge de distribution de données à plusieurs GPU dans Python Dict, afin que chaque GPU puisse traiter des images de différentes tailles. Dans le même temps, le dataloader fonctionne également différemment.
Désormais, la taille du lot d'un dataloader équivaut toujours au nombre de GPU , chaque élément sera envoyé à un GPU. Il est également compatible avec le multi-traitement. Notez que l'index de fichiers pour le dataloader multiprocesseur est stocké sur le processus maître, ce qui est en contrediction avec notre objectif pour que chaque travailleur conserve sa propre liste de fichiers. Nous utilisons donc une astuce que bien que le processus maître donne toujours à DatalOader un index pour la fonction __getitem__ , nous ignorons simplement une telle demande et envoyons un dict aléatoire. En outre, les multiples travailleurs fourchus par le dataloader ont tous la même graine , vous constaterez que plusieurs travailleurs fourniront exactement les mêmes données, si nous utilisons directement l'astuce susmentionnée. Par conséquent, nous ajoutons une ligne de code qui définit la graine Defaut pour numpy.random avant d'activer plusieurs travailleurs dans DatalOader.
Nous divisons nos modèles en encodeur et en décodeur, où les encodeurs sont généralement modifiés directement à partir des réseaux de classification, et les décodeurs sont constitués de convolutions finales et d'échantillonnage. Nous avons fourni des modèles préconfigurés dans le dossier config .
Encodeur:
Décodeur:
IMPORTANT: Le Resnet de base de notre référentiel est personnalisé (différent de celui de TorchVision). Les modèles de base seront automatiquement téléchargés en cas de besoin.
| Architecture | Tests à plusieurs échelles | Signifie iou | Précision des pixels (%) | Score global | Vitesse d'inférence (FPS) |
|---|---|---|---|---|---|
| MobileNetv2Dilated + c1_deepsup | Non | 34.84 | 75.75 | 54.07 | 17.2 |
| Oui | 33,84 | 76.80 | 55,32 | 10.3 | |
| MobileNetv2Dilated + ppm_deepsup | Non | 35,76 | 77.77 | 56.27 | 14.9 |
| Oui | 36.28 | 78.26 | 57.27 | 6.7 | |
| Resnet18Diled + C1_Deepsup | Non | 33,82 | 76.05 | 54.94 | 13.9 |
| Oui | 35.34 | 77.41 | 56.38 | 5.8 | |
| Resnet18Dilated + ppm_deepsup | Non | 38.00 | 78,64 | 58,32 | 11.7 |
| Oui | 38.81 | 79.29 | 59.05 | 4.2 | |
| Resnet50Dilated + ppm_deepsup | Non | 41.26 | 79.73 | 60,50 | 8.3 |
| Oui | 42.14 | 80.13 | 61.14 | 2.6 | |
| Resnet101 noté + ppm_deepsup | Non | 42.19 | 80,59 | 61.39 | 6.8 |
| Oui | 42.53 | 80.91 | 61.72 | 2.0 | |
| Upernet50 | Non | 40.44 | 79.80 | 60.12 | 8.4 |
| Oui | 41,55 | 80.23 | 60,89 | 2.9 | |
| Upernet101 | Non | 42.00 | 80.79 | 61.40 | 7.8 |
| Oui | 42.66 | 81.01 | 61.84 | 2.3 | |
| Hrnetv2 | Non | 42.03 | 80.77 | 61.40 | 5.8 |
| Oui | 43.20 | 81.47 | 62.34 | 1.9 |
La formation est comparée sur un serveur avec 8 GPU NVIDIA Pascal Titan XP (mémoire GPU 12 Go), la vitesse d'inférence est compatible un seul GPU Nvidia Pascal Titan XP, sans visualisation.
Le code est développé dans les configurations suivantes.
[--gpus GPUS] en conséquence)chmod +x demo_test.sh
./demo_test.shCe script télécharge un modèle formé (RESNET50Dilated + ppm_deepsup) et une image de test, exécute le script de test et enregistre la segmentation prédite (.png) dans le répertoire de travail.
$PATH_IMG ), vous pouvez simplement effectuer ce qui suit: python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG
chmod +x download_ADE20K.sh
./download_ADE20K.sh$GPUS ) et le fichier de configuration ( $CFG ) à utiliser. Pendant la formation, les points de contrôle par défaut sont enregistrés dans le dossier ckpt . python3 train.py --gpus $GPUS --cfg $CFG --gpus 0-7 , soit --gpus 0,2,4,6 .Par exemple, vous pouvez commencer par nos configurations fournies:
python3 train.py --gpus GPUS --cfg config/ade20k-mobilenetv2dilated-c1_deepsup.yamlpython3 train.py --gpus GPUS --cfg config/ade20k-resnet50dilated-ppm_deepsup.yamlpython3 train.py --gpus GPUS --cfg config/ade20k-resnet101-upernet.yamlpython3 train.py TRAIN.num_epoch 10 . VAL.visualize True dans l'argument aux visualisations de sortie comme indiqué dans Teaser.Par exemple:
python3 eval_multipro.py --gpus GPUS --cfg config/ade20k-mobilenetv2dilated-c1_deepsup.yamlpython3 eval_multipro.py --gpus GPUS --cfg config/ade20k-resnet50dilated-ppm_deepsup.yamlpython3 eval_multipro.py --gpus GPUS --cfg config/ade20k-resnet101-upernet.yaml Cette bibliothèque peut être installée via pip pour s'intégrer facilement à une autre base de code
pip install git+https://github.com/CSAILVision/semantic-segmentation-pytorch.git@masterMaintenant, cette bibliothèque peut facilement être consommée par programme. Par exemple
from mit_semseg . config import cfg
from mit_semseg . dataset import TestDataset
from mit_semseg . models import ModelBuilder , SegmentationModule Si vous trouvez le code ou les modèles pré-formés utiles, veuillez citer les articles suivants:
Compréhension sémantique des scènes via un ensemble de données ADE20K. B. Zhou, H. Zhao, X. Puig, T. Xiao, S. Fidler, A. Barriuso et A. Torralba. International Journal on Computer Vision (IJCV), 2018. (https://arxiv.org/pdf/1608.05442.pdf)
@article{zhou2018semantic,
title={Semantic understanding of scenes through the ade20k dataset},
author={Zhou, Bolei and Zhao, Hang and Puig, Xavier and Xiao, Tete and Fidler, Sanja and Barriuso, Adela and Torralba, Antonio},
journal={International Journal on Computer Vision},
year={2018}
}
Analyse de scène via un ensemble de données ADE20K. B. Zhou, H. Zhao, X. Puig, S. Fidler, A. Barriuso et A. Torralba. Vision par ordinateur et reconnaissance des modèles (CVPR), 2017. (http://people.csail.mit.edu/bzhou/publication/scene-parse-camera-ready.pdf)
@inproceedings{zhou2017scene,
title={Scene Parsing through ADE20K Dataset},
author={Zhou, Bolei and Zhao, Hang and Puig, Xavier and Fidler, Sanja and Barriuso, Adela and Torralba, Antonio},
booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
year={2017}
}