Dies ist eine Pytorch -Implementierung von semantischen Segmentierungsmodellen auf der MIT ADE20K -Szene -Parsing -Datensatz (http://sceneparsing.csail.mit.edu/).
ADE20K ist der größte Open -Source -Datensatz für semantische Segmentierung und Szenenanalyse, das vom MIT -Computer -Vision -Team veröffentlicht wurde. Folgen Sie dem folgenden Link, um das Repository für unseren Datensatz und die Implementierungen auf Caffe und Torch7 zu finden: https://github.com/csailvision/sceneparsing
Wenn Sie einfach nur mit unserer Demo spielen möchten, probieren Sie diesen Link aus: http://scenesegmentation.csail.mit.edu Sie können Ihr eigenes Foto hochladen und analysieren!
Sie können diesen Colab Notebook -Spielplatz auch hier verwenden, um mit dem Code zum Segmentieren eines Bildes zu basteln.
Alle vorbereiteten Modelle finden Sie unter: http://sceneparsing.csail.mit.edu/model/pytorch


Farbkodierung semantischer Kategorien finden Sie hier: https://docs.google.com/spreadsheets/d/1se8yetb2dets7oupe86fxgyd269pmycawe2mtkuj2w8/edit?usp=sharing
config/defaults.py aufgeführt.Dieses Modul berechnet während des Trainings den Mittelwert und die Standardabteilung über alle Geräte hinweg. Wir stellen empirisch fest, dass eine vernünftige große Chargengröße für die Segmentierung wichtig ist. Wir danken Jiyuan Mao für seine freundlichen Beiträge. Weitere Informationen finden Sie in synchronisierten Batchnorm-Pytorch.
Die Implementierung ist einfach zu bedienen als:
Für die Aufgabe der semantischen Segmentierung ist es gut, das Seitenverhältnis von Bildern während des Trainings zu halten. Daher implementieren wir das DataParallel und unterstützen die Verteilung von Daten an mehrere GPUs im Python-Diktat, damit jede GPU Bilder unterschiedlicher Größe verarbeiten kann. Gleichzeitig arbeitet der Dataloader auch anders.
Jetzt entspricht die Stapelgröße eines Dataloader immer der Anzahl der GPUs . Jedes Element wird an eine GPU gesendet. Es ist auch mit Multi-Processing kompatibel. Beachten Sie, dass der Dateiindex für den Multi-Processing-Dataloader im Master-Prozess gespeichert ist, der unserem Ziel widerspricht, dass jeder Arbeiter seine eigene Dateiliste verwaltet. Wir verwenden also einen Trick, dass der Master -Prozess Dataloader zwar einen Index für __getitem__ -Funktion gibt, aber wir ignorieren diese Anfrage nur und senden ein zufälliges Stapel -Dict. Außerdem haben die vom DataLoader gegablten mehreren Arbeiter denselben Saatgut . Sie werden feststellen, dass mehrere Arbeitnehmer genau dieselben Daten liefern, wenn wir den oben genannten Trick direkt verwenden. Daher fügen wir eine Codezeile hinzu, die den Defaut -Seed für numpy.random festlegt, bevor wir mehrere Mitarbeiter in Dataloader aktivieren.
Wir teilen unsere Modelle in Encoder und Decoder auf, wo Encoder normalerweise direkt aus Klassifizierungsnetzwerken modifiziert werden und Decoder aus endgültigen Konvolutionen und Upsampling bestehen. Wir haben einige vorkonfigurierte Modelle im config bereitgestellt.
Encoder:
Decoder:
WICHTIG: Das Basisresnet in unserem Repository ist angepasst (unterscheidet sich von der in Torchvision). Die Basismodelle werden bei Bedarf automatisch heruntergeladen.
| Architektur | Multiskale -Tests | Mean iou | Pixelgenauigkeit (%) | Gesamtpunktzahl | Inferenzgeschwindigkeit (FPS) |
|---|---|---|---|---|---|
| Mobilenetv2dilated + c1_deepsup | NEIN | 34,84 | 75,75 | 54.07 | 17.2 |
| Ja | 33.84 | 76,80 | 55.32 | 10.3 | |
| Mobilenetv2dilated + ppm_deepsup | NEIN | 35.76 | 77,77 | 56,27 | 14.9 |
| Ja | 36.28 | 78,26 | 57.27 | 6.7 | |
| Resnet18dilated + c1_deepsup | NEIN | 33.82 | 76.05 | 54,94 | 13.9 |
| Ja | 35.34 | 77,41 | 56.38 | 5.8 | |
| Resnet18dilated + ppm_deepsup | NEIN | 38.00 | 78,64 | 58.32 | 11.7 |
| Ja | 38.81 | 79,29 | 59.05 | 4.2 | |
| Resnet50dilated + ppm_deepsup | NEIN | 41.26 | 79,73 | 60.50 | 8.3 |
| Ja | 42.14 | 80.13 | 61.14 | 2.6 | |
| Resnet101dilated + ppm_deepsup | NEIN | 42.19 | 80.59 | 61.39 | 6.8 |
| Ja | 42,53 | 80.91 | 61.72 | 2.0 | |
| UPERNET50 | NEIN | 40.44 | 79,80 | 60.12 | 8.4 |
| Ja | 41,55 | 80.23 | 60.89 | 2.9 | |
| Upernet101 | NEIN | 42.00 | 80.79 | 61.40 | 7.8 |
| Ja | 42.66 | 81.01 | 61.84 | 2.3 | |
| Hrnetv2 | NEIN | 42.03 | 80.77 | 61.40 | 5.8 |
| Ja | 43.20 | 81.47 | 62.34 | 1.9 |
Das Training ist auf einem Server mit 8 NVIDIA Pascal Titan XP GPUs (12 GB GPU -Speicher) vergleichbar. Die Inferenzgeschwindigkeit wird ohne Visualisierung mit einer einzelnen Nvidia Pascal Titan XP -GPU bewertet.
Der Code wird unter den folgenden Konfigurationen entwickelt.
[--gpus GPUS] entsprechend)chmod +x demo_test.sh
./demo_test.shDieses Skript lädt ein geschultes Modell (resnet50dilated + ppm_deepsup) und ein Testbild herunter, führt das Testskript aus und speichert die vorhergesagte Segmentierung (.png) in das Arbeitsverzeichnis.
$PATH_IMG ) zu testen, können Sie einfach Folgendes tun: python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG
chmod +x download_ADE20K.sh
./download_ADE20K.sh$GPUS ) und die Konfigurationsdatei ( $CFG ) auswählen. Während des Trainings werden die Kontrollpunkte standardmäßig in Ordner ckpt gespeichert. python3 train.py --gpus $GPUS --cfg $CFG --gpus 0-7 oder --gpus 0,2,4,6 tun.Sie können beispielsweise mit unseren bereitgestellten Konfigurationen beginnen:
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 in Argument zum Ausgangsvisualisierungen hinzu, wie in Teaser gezeigt.Zum Beispiel:
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 Diese Bibliothek kann über pip installiert werden, um einfach in eine andere Codebasis zu integrieren
pip install git+https://github.com/CSAILVision/semantic-segmentation-pytorch.git@masterJetzt kann diese Bibliothek problematisch programmatisch konsumiert werden. Zum Beispiel
from mit_semseg . config import cfg
from mit_semseg . dataset import TestDataset
from mit_semseg . models import ModelBuilder , SegmentationModule Wenn Sie den Code oder die vorgeborenen Modelle nützlich finden, zitieren Sie bitte die folgenden Arbeiten:
Semantisches Verständnis von Szenen durch ADE20K -Datensatz. B. Zhou, H. Zhao, X. Puig, T. Xiao, S. Fidler, A. Barriuso und 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}
}
Szene analysieren durch ADE20K -Datensatz. B. Zhou, H. Zhao, X. Puig, S. Fidler, A. Barriuso und A. Torralba. Computer Vision und Mustererkennung (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}
}