Ini adalah implementasi Pytorch dari model segmentasi semantik pada dataset parsing adegan ADE20K MIT (http://sceneparsing.csail.mit.edu/).
ADE20K adalah dataset open source terbesar untuk segmentasi semantik dan parsing adegan, dirilis oleh tim visi komputer MIT. Ikuti tautan di bawah ini untuk menemukan repositori untuk dataset dan implementasi kami di Caffe dan Torch7: https://github.com/csailvision/sceneparsing
Jika Anda hanya ingin bermain dengan demo kami, silakan coba tautan ini: http://scenesegmentation.csail.mit.edu Anda dapat mengunggah foto Anda sendiri dan menguraikannya!
Anda juga dapat menggunakan taman bermain Colab Notebook ini di sini untuk mengutak -atik kode untuk mensegmentasi gambar.
Semua model pretrain dapat ditemukan di: http://sceneparsing.csail.mit.edu/model/pytorch


Pengkodean warna kategori semantik dapat ditemukan di sini: https://docs.google.com/spreadsheets/d/1se8yetb2dets7oupe86fxgyd269pmycawe2mtkuj2w8/edit ?usp=haring
config/defaults.py .Modul ini menghitung rata-rata dan deviasi standar di semua perangkat selama pelatihan. Kami secara empiris menemukan bahwa ukuran batch besar yang masuk akal penting untuk segmentasi. Kami berterima kasih kepada Jiayuan Mao atas kontribusinya yang baik, silakan merujuk ke Sinkronisasi-Batchnorm-Pytorch untuk detailnya.
Implementasinya mudah digunakan sebagai:
Untuk tugas segmentasi semantik, ada baiknya menjaga rasio aspek gambar selama pelatihan. Jadi kami mengimplementasikan kembali modul DataParallel , dan membuatnya mendukung mendistribusikan data ke beberapa GPU dalam dikt Python, sehingga setiap GPU dapat memproses gambar dari berbagai ukuran. Pada saat yang sama, Dataloader juga beroperasi secara berbeda.
Sekarang ukuran batch dari dataloader selalu sama dengan jumlah GPU , setiap elemen akan dikirim ke GPU. Ini juga kompatibel dengan multi-pemrosesan. Perhatikan bahwa indeks file untuk multi-pemrosesan Dataloader disimpan pada proses master, yang bertentangan dengan tujuan kami bahwa setiap pekerja mempertahankan daftar file sendiri. Jadi kami menggunakan trik yang meskipun proses master masih memberi Dataloader indeks untuk fungsi __getitem__ , kami hanya mengabaikan permintaan tersebut dan mengirim diktel acak. Juga, banyak pekerja yang diliputi oleh Dataloader semuanya memiliki benih yang sama , Anda akan menemukan bahwa banyak pekerja akan menghasilkan data yang sama persis, jika kami menggunakan trik yang disebutkan di atas secara langsung. Oleh karena itu, kami menambahkan satu baris kode yang menetapkan benih defaut untuk numpy.random sebelum mengaktifkan beberapa pekerja di Dataloader.
Kami membagi model kami menjadi encoder dan decoder, di mana encoder biasanya dimodifikasi langsung dari jaringan klasifikasi, dan dekoder terdiri dari konvolusi akhir dan upampling. Kami telah menyediakan beberapa model yang telah dikonfigurasi sebelumnya di folder config .
Encoder:
Decoder:
Penting: Resnet dasar dalam repositori kami adalah yang disesuaikan (berbeda dari yang ada di TorchVision). Model dasar akan diunduh secara otomatis saat dibutuhkan.
| Arsitektur | Pengujian multiskala | Berarti iou | Akurasi piksel (%) | Skor keseluruhan | Kecepatan inferensi (FPS) |
|---|---|---|---|---|---|
| MobileNetV2Dilated + C1_Deepsup | TIDAK | 34.84 | 75.75 | 54.07 | 17.2 |
| Ya | 33.84 | 76.80 | 55.32 | 10.3 | |
| MobileNetV2Dilated + PPM_DEEPSUP | TIDAK | 35.76 | 77.77 | 56.27 | 14.9 |
| Ya | 36.28 | 78.26 | 57.27 | 6.7 | |
| Resnet18dilated + c1_deepsup | TIDAK | 33.82 | 76.05 | 54.94 | 13.9 |
| Ya | 35.34 | 77.41 | 56.38 | 5.8 | |
| Resnet18dilated + ppm_deepsup | TIDAK | 38.00 | 78.64 | 58.32 | 11.7 |
| Ya | 38.81 | 79.29 | 59.05 | 4.2 | |
| Resnet50dilated + ppm_deepsup | TIDAK | 41.26 | 79.73 | 60.50 | 8.3 |
| Ya | 42.14 | 80.13 | 61.14 | 2.6 | |
| Resnet101dilated + ppm_deepsup | TIDAK | 42.19 | 80.59 | 61.39 | 6.8 |
| Ya | 42.53 | 80.91 | 61.72 | 2.0 | |
| Upernet50 | TIDAK | 40.44 | 79.80 | 60.12 | 8.4 |
| Ya | 41.55 | 80.23 | 60.89 | 2.9 | |
| Upernet101 | TIDAK | 42.00 | 80.79 | 61.40 | 7.8 |
| Ya | 42.66 | 81.01 | 61.84 | 2.3 | |
| Hrnetv2 | TIDAK | 42.03 | 80.77 | 61.40 | 5.8 |
| Ya | 43.20 | 81.47 | 62.34 | 1.9 |
Pelatihan ini dibandingkan pada server dengan 8 Nvidia Pascal Titan XP GPU (memori GPU 12GB), kecepatan inferensi dibandingkan dengan NVIDIA Pascal Titan XP GPU tunggal, tanpa visualisasi.
Kode ini dikembangkan di bawah konfigurasi berikut.
[--gpus GPUS] ]chmod +x demo_test.sh
./demo_test.shScript ini mengunduh model terlatih (resnet50Dilated + ppm_deepsup) dan gambar uji, menjalankan skrip uji, dan menyimpan segmentasi yang diprediksi (.png) ke direktori kerja.
$PATH_IMG ), Anda dapat melakukan hal berikut: python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG
chmod +x download_ADE20K.sh
./download_ADE20K.sh$GPUS ) dan file konfigurasi ( $CFG ) untuk digunakan. Selama pelatihan, pos pemeriksaan secara default disimpan dalam folder ckpt . python3 train.py --gpus $GPUS --cfg $CFG --gpus 0-7 , atau --gpus 0,2,4,6 .Misalnya, Anda dapat memulai dengan konfigurasi yang disediakan:
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 dalam argumen ke output visualisasi seperti yang ditunjukkan pada teaser.Misalnya:
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 Perpustakaan ini dapat diinstal melalui pip agar mudah diintegrasikan dengan basis kode lain
pip install git+https://github.com/CSAILVision/semantic-segmentation-pytorch.git@masterSekarang perpustakaan ini dapat dengan mudah dikonsumsi secara terprogram. Misalnya
from mit_semseg . config import cfg
from mit_semseg . dataset import TestDataset
from mit_semseg . models import ModelBuilder , SegmentationModule Jika Anda menemukan kode atau model pra-terlatih bermanfaat, silakan kutip makalah berikut:
Pemahaman semantik tentang adegan melalui dataset ADE20K. B. Zhou, H. Zhao, X. Puig, T. Xiao, S. Fidler, A. Barriuso dan A. Torralba. Jurnal Internasional tentang Visi Komputer (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}
}
Adegan parsing melalui dataset ADE20K. B. Zhou, H. Zhao, X. Puig, S. Fidler, A. Barriuso dan A. Torralba. Pengenalan Visi dan Pola Komputer (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}
}