นี่คือการใช้ Pytorch ของแบบจำลองการแบ่งส่วนความหมายบนชุดข้อมูลการแยกวิเคราะห์ฉาก MIT ADE20K (http://sceneparsing.csail.mit.edu/)
ADE20K เป็นชุดข้อมูลโอเพ่นซอร์สที่ใหญ่ที่สุดสำหรับการแบ่งส่วนความหมายและการแยกวิเคราะห์ฉากซึ่งเปิดตัวโดย MIT Computer Vision Team ไปตามลิงค์ด้านล่างเพื่อค้นหาที่เก็บข้อมูลสำหรับชุดข้อมูลและการใช้งานของเราในคาเฟอีนและ TORCH7: https://github.com/csailvision/sceneparsing
หากคุณเพียงแค่ต้องการเล่นกับการสาธิตของเราโปรดลองใช้ลิงค์นี้: http://scenesegentation.csail.mit.edu คุณสามารถอัปโหลดรูปภาพของคุณเองและแยกวิเคราะห์ได้!
นอกจากนี้คุณยังสามารถใช้สนามเด็กเล่นโน๊ตบุ๊ค Colab นี้ได้ที่นี่เพื่อทิงเกอร์ด้วยรหัสสำหรับการแบ่งส่วนภาพ
แบบจำลองที่ผ่านการฝึกอบรมทั้งหมดสามารถดูได้ที่: http://sceneparsing.csail.mit.edu/model/pytorch


การเข้ารหัสสีของหมวดหมู่ความหมายสามารถพบได้ที่นี่: https://docs.google.com/spreadsheets/d/1se8yetb2dets7oupe86fxgyd269pmycawe2mtkuj2w8/edit?usp=sharing
config/defaults.pyโมดูลนี้คำนวณค่าเฉลี่ยและการเบี่ยงเบนมาตรฐานในทุกอุปกรณ์ในระหว่างการฝึกอบรม เราพบว่าขนาดแบทช์ขนาดใหญ่ที่สมเหตุสมผลเป็นสิ่งสำคัญสำหรับการแบ่งส่วน เราขอขอบคุณ Jiayuan Mao สำหรับการมีส่วนร่วมของเขาโปรดดูรายละเอียดที่ซิงโครไนซ์-Batchnorm-Batchnorm
การใช้งานใช้งานง่ายเป็น:
สำหรับงานของการแบ่งส่วนความหมายมันเป็นการดีที่จะรักษาอัตราส่วนภาพในระหว่างการฝึกอบรม ดังนั้นเราจึงนำเสนอโมดูล DataParallel อีกครั้งและทำให้มันรองรับการกระจายข้อมูลไปยัง GPU หลายตัวใน Python Dict เพื่อให้ GPU แต่ละตัวสามารถประมวลผลภาพที่มีขนาดต่างกัน ในเวลาเดียวกัน Dataloader ยังทำงานแตกต่างกัน
ตอนนี้ขนาดแบทช์ของ Dataloader จะเท่ากับจำนวน GPU เสมอ แต่ละองค์ประกอบจะถูกส่งไปยัง GPU นอกจากนี้ยังเข้ากันได้กับการประมวลผลแบบหลายครั้ง โปรดทราบว่าดัชนีไฟล์สำหรับ Dataloader หลายประมวลผลจะถูกเก็บไว้ในกระบวนการหลักซึ่งขัดแย้งกับเป้าหมายของเราที่คนงานแต่ละคนเก็บรักษารายการไฟล์ของตัวเอง ดังนั้นเราจึงใช้เคล็ดลับที่แม้ว่ากระบวนการหลักยังคงให้ดัชนี Dataloader สำหรับฟังก์ชัน __getitem__ แต่เราก็เพิกเฉยต่อคำขอดังกล่าวและส่งชุดคำสั่งแบบสุ่ม นอกจากนี้ คนงานหลายคนที่ถูกแยกโดย Dataloader ล้วนมีเมล็ดพันธุ์เดียวกัน คุณจะพบว่าคนงานหลายคนจะให้ข้อมูลเดียวกันหากเราใช้เคล็ดลับที่กล่าวถึงข้างต้นโดยตรง ดังนั้นเราจึงเพิ่มรหัสหนึ่งบรรทัดซึ่งตั้งค่าเมล็ด defaut สำหรับ numpy.random ก่อนที่จะเปิดใช้งานผู้ปฏิบัติงานหลายคนใน Dataloader
เราแบ่งโมเดลของเราออกเป็นตัวเข้ารหัสและตัวถอดรหัสซึ่งโดยทั่วไปแล้วตัวเข้ารหัสจะถูกแก้ไขโดยตรงจากเครือข่ายการจำแนกประเภทและตัวถอดรหัสประกอบด้วย convolutions ขั้นสุดท้ายและการสุ่มตัวอย่าง เราได้จัดทำโมเดลที่กำหนดค่าไว้ล่วงหน้าในโฟลเดอร์ config
encoder:
ตัวถอดรหัส:
สำคัญ: ฐานข้อมูลในที่เก็บของเราคือการปรับแต่ง (แตกต่างจากที่หนึ่งใน Torchvision) รุ่นพื้นฐานจะถูกดาวน์โหลดโดยอัตโนมัติเมื่อจำเป็น
| สถาปัตยกรรม | การทดสอบแบบหลายระดับ | หมายถึง iou | ความแม่นยำของพิกเซล (%) | คะแนนรวม | ความเร็วการอนุมาน (FPS) |
|---|---|---|---|---|---|
| mobilenetv2dilated + c1_deepsup | เลขที่ | 34.84 | 75.75 | 54.07 | 17.2 |
| ใช่ | 33.84 | 76.80 | 55.32 | 10.3 | |
| mobilenetv2dilated + ppm_deepsup | เลขที่ | 35.76 | 77.77 | 56.27 | 14.9 |
| ใช่ | 36.28 | 78.26 | 57.27 | 6.7 | |
| resnet18dilated + c1_deepsup | เลขที่ | 33.82 | 76.05 | 54.94 | 13.9 |
| ใช่ | 35.34 | 77.41 | 56.38 | 5.8 | |
| resnet18dilated + ppm_deepsup | เลขที่ | 38.00 | 78.64 | 58.32 | 11.7 |
| ใช่ | 38.81 | 79.29 | 59.05 | 4.2 | |
| resnet50dilated + ppm_deepsup | เลขที่ | 41.26 | 79.73 | 60.50 | 8.3 |
| ใช่ | 42.14 | 80.13 | 61.14 | 2.6 | |
| resnet101dilated + ppm_deepsup | เลขที่ | 42.19 | 80.59 | 61.39 | 6.8 |
| ใช่ | 42.53 | 80.91 | 61.72 | 2.0 | |
| upernet50 | เลขที่ | 40.44 | 79.80 | 60.12 | 8.4 |
| ใช่ | 41.55 | 80.23 | 60.89 | 2.9 | |
| upernet101 | เลขที่ | 42.00 | 80.79 | 61.40 | 7.8 |
| ใช่ | 42.66 | 81.01 | 61.84 | 2.3 | |
| hrnetv2 | เลขที่ | 42.03 | 80.77 | 61.40 | 5.8 |
| ใช่ | 43.20 | 81.47 | 62.34 | 1.9 |
การฝึกอบรมได้รับการเปรียบเทียบบนเซิร์ฟเวอร์ที่มี 8 Nvidia Pascal Titan XP GPU (หน่วยความจำ GPU 12GB) ความเร็วการอนุมานจะถูกเปรียบเทียบกับ Nvidia Pascal Titan XP GPU เดียวโดยไม่ต้องแสดงภาพ
รหัสได้รับการพัฒนาภายใต้การกำหนดค่าต่อไปนี้
[--gpus GPUS] ตามนั้น)chmod +x demo_test.sh
./demo_test.shสคริปต์นี้ดาวน์โหลดโมเดลที่ผ่านการฝึกอบรม (resnet50dilated + ppm_deepsup) และภาพทดสอบเรียกใช้สคริปต์ทดสอบและบันทึกการแบ่งส่วนที่คาดการณ์ไว้ (.png) ไปยังไดเรกทอรีการทำงาน
$PATH_IMG ) คุณสามารถทำสิ่งต่อไปนี้: python3 -u test.py --imgs $PATH_IMG --gpu $GPU --cfg $CFG
chmod +x download_ADE20K.sh
./download_ADE20K.sh$GPUS ) และไฟล์การกำหนดค่า ( $CFG ) เพื่อใช้ ในระหว่างการฝึกอบรมจุดตรวจโดยค่าเริ่มต้นจะถูกบันทึกไว้ในโฟลเดอร์ ckpt python3 train.py --gpus $GPUS --cfg $CFG --gpus 0-7 หรือ --gpus 0,2,4,6ตัวอย่างเช่นคุณสามารถเริ่มต้นด้วยการกำหนดค่าที่เรามีให้:
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 ในการโต้แย้งในการสร้างภาพออกตามที่แสดงในทีเซอร์ตัวอย่างเช่น:
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 ห้องสมุดนี้สามารถติดตั้งผ่าน pip เพื่อรวมเข้ากับ codebase อื่นได้อย่างง่ายดาย
pip install git+https://github.com/CSAILVision/semantic-segmentation-pytorch.git@masterตอนนี้ห้องสมุดนี้สามารถใช้งานได้อย่างง่ายดาย ตัวอย่างเช่น
from mit_semseg . config import cfg
from mit_semseg . dataset import TestDataset
from mit_semseg . models import ModelBuilder , SegmentationModule หากคุณพบว่ารหัสหรือโมเดลที่ผ่านการฝึกอบรมมาก่อนโปรดอ้างอิงเอกสารต่อไปนี้:
ความเข้าใจความหมายของฉากผ่านชุดข้อมูล ADE20K B. Zhou, H. Zhao, X. Puig, T. Xiao, S. Fidler, A. Barriuso และ A. Torralba วารสารนานาชาติเกี่ยวกับวิสัยทัศน์คอมพิวเตอร์ (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}
}
ฉากแยกวิเคราะห์ผ่านชุดข้อมูล ADE20K B. Zhou, H. Zhao, X. Puig, S. Fidler, A. Barriuso และ A. Torralba วิสัยทัศน์คอมพิวเตอร์และการจดจำรูปแบบ (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}
}