Repo นี้ประกอบด้วยการใช้งาน Pytorch ของ LDMSeg: วิธีการแพร่กระจายแฝงอย่างง่ายสำหรับการแบ่งส่วนแบบ Panoptic และการวาดภาพแบบ Mask รหัสที่ให้มามีทั้งการฝึกอบรมและการประเมินผล
แนวทางการแพร่กระจายแบบแฝงอย่างง่ายสำหรับการแบ่งส่วนแบบพาโนรามาและการวาดภาพแบบมาส์ก
Wouter Van Gansbeke และเบิร์ต เดอ บราบันเดเร
บทความนี้นำเสนอแนวทางการแพร่กระจายแฝงแบบมีเงื่อนไขเพื่อจัดการกับงานการแบ่งส่วนแบบพาโนรามา จุดมุ่งหมายคือการละเว้นความต้องการสถาปัตยกรรมเฉพาะทาง (เช่น ข้อเสนอภูมิภาค-เครือข่ายหรือการสืบค้นวัตถุ) ฟังก์ชันการสูญเสียที่ซับซ้อน (เช่น การจับคู่แบบฮังการีหรือตามกล่องขอบเขต) และวิธีการหลังการประมวลผลเพิ่มเติม (เช่น การจัดกลุ่ม NMS หรือการวางวัตถุ) ด้วยเหตุนี้ เราจึงอาศัย Stable Diffusion ซึ่งเป็นเฟรมเวิร์กที่ไม่เชื่อเรื่องงาน วิธีการที่นำเสนอประกอบด้วยสองขั้นตอน: (1) ฉายมาสก์การแบ่งส่วนแบบพาโนรามาไปยังพื้นที่แฝงด้วยตัวเข้ารหัสอัตโนมัติแบบตื้น; (2) ฝึกโมเดลการแพร่กระจายในพื้นที่แฝง โดยกำหนดเงื่อนไขบนภาพ RGB
การมีส่วนร่วมที่สำคัญ : การมีส่วนร่วมของเรามีสามเท่า:
โค้ดนี้ทำงานกับ Pytorch เวอร์ชันล่าสุด เช่น 2.0 นอกจากนี้ คุณสามารถสร้างสภาพแวดล้อมแบบหลามด้วย Anaconda ได้:
conda create -n LDMSeg python=3.11
conda activate LDMSeg
เราแนะนำให้ปฏิบัติตามการติดตั้งอัตโนมัติ (ดู tools/scripts/install_env.sh
) รันคำสั่งต่อไปนี้เพื่อติดตั้งโปรเจ็กต์ในโหมดแก้ไขได้ โปรดทราบว่าการอ้างอิงทั้งหมดจะถูกติดตั้งโดยอัตโนมัติ เนื่องจากอาจไม่ได้ผลเสมอไป (เช่น เนื่องจากปัญหา CUDA หรือ gcc) โปรดดูขั้นตอนการติดตั้งด้วยตนเอง
python -m pip install -e .
pip install git+https://github.com/facebookresearch/detectron2.git
pip install git+https://github.com/cocodataset/panopticapi.git
แพ็คเกจที่สำคัญที่สุดสามารถติดตั้งได้อย่างรวดเร็วด้วย pip ดังนี้:
pip install torch torchvision einops # Main framework
pip install diffusers transformers xformers accelerate timm # For using pretrained models
pip install scipy opencv-python # For augmentations or loss
pip install pyyaml easydict hydra-core # For using config files
pip install termcolor wandb # For printing and logging
ดู data/environment.yml
สำหรับสำเนาสภาพแวดล้อมของฉัน นอกจากนี้เรายังอาศัยการขึ้นต่อกันบางอย่างจาก detectorn2 และ panopticapi โปรดปฏิบัติตามเอกสารของพวกเขา
ขณะนี้เรารองรับชุดข้อมูล COCO โปรดปฏิบัติตามเอกสารสำหรับการติดตั้งรูปภาพและมาสก์การแบ่งส่วนแบบพาโนรามาที่เกี่ยวข้อง นอกจากนี้ โปรดดูที่ไดเร็กทอรี ldmseg/data/
เพื่อดูตัวอย่างเล็กๆ น้อยๆ ในชุดข้อมูล COCO โครงสร้างที่นำมาใช้ควรมีมาตรฐานอย่างเป็นธรรม:
.
└── coco
├── annotations
├── panoptic_semseg_train2017
├── panoptic_semseg_val2017
├── panoptic_train2017 -> annotations/panoptic_train2017
├── panoptic_val2017 -> annotations/panoptic_val2017
├── test2017
├── train2017
└── val2017
สุดท้ายแต่ไม่ท้ายสุด เปลี่ยนพาธใน configs/env/root_paths.yml
เป็นรูทชุดข้อมูลและไดเร็กทอรีเอาต์พุตที่คุณต้องการตามลำดับ
แนวทางที่นำเสนอเป็นแบบสองทาง: ขั้นแรก เราฝึกตัวเข้ารหัสอัตโนมัติเพื่อแสดงแผนที่การแบ่งส่วนในพื้นที่มิติที่ต่ำกว่า (เช่น 64x64) ต่อไป เราจะเริ่มจาก Latent Diffusion Models (LDM) ที่ได้รับการฝึกมาแล้ว โดยเฉพาะ Stable Diffusion เพื่อฝึกฝนโมเดลที่สามารถสร้างมาสก์แบบพาโนรามาจากภาพ RGB ได้ โมเดลสามารถฝึกได้โดยการรันคำสั่งต่อไปนี้ ตามค่าเริ่มต้น เราจะฝึกชุดข้อมูล COCO ด้วยไฟล์กำหนดค่าพื้นฐานที่กำหนดไว้ใน tools/configs/base/base.yaml
โปรดทราบว่าไฟล์นี้จะถูกโหลดโดยอัตโนมัติเนื่องจากเราใช้แพ็คเกจ hydra
python - W ignore tools / main_ae . py
datasets = coco
base . train_kwargs . fp16 = True
base . optimizer_name = adamw
base . optimizer_kwargs . lr = 1e-4
base . optimizer_kwargs . weight_decay = 0.05
รายละเอียดเพิ่มเติมเกี่ยวกับการส่งผ่านข้อโต้แย้งสามารถพบได้ใน tools/scripts/train_ae.sh
ตัวอย่างเช่น ฉันรันโมเดลนี้ 50,000 รอบบน GPU ตัวเดียวขนาด 23 GB โดยมีขนาดแบตช์รวม 16
python - W ignore tools / main_ldm . py
datasets = coco
base . train_kwargs . gradient_checkpointing = True
base . train_kwargs . fp16 = True
base . train_kwargs . weight_dtype = float16
base . optimizer_zero_redundancy = True
base . optimizer_name = adamw
base . optimizer_kwargs . lr = 1e-4
base . optimizer_kwargs . weight_decay = 0.05
base . scheduler_kwargs . weight = 'max_clamp_snr'
base . vae_model_kwargs . pretrained_path = '$AE_MODEL'
$AE_MODEL
หมายถึงพาธไปยังโมเดลที่ได้รับจากขั้นตอนก่อนหน้า รายละเอียดเพิ่มเติมเกี่ยวกับการส่งผ่านอาร์กิวเมนต์สามารถพบได้ใน tools/scripts/train_diffusion.sh
ตัวอย่างเช่น ฉันรันโมเดลนี้ 200,000 รอบบน 8 GPU ขนาด 16 GB โดยมีขนาดแบตช์รวม 256
เรากำลังวางแผนที่จะเปิดตัวโมเดลที่ได้รับการฝึกหลายรุ่น เมตริก PQ (ไม่เชื่อเรื่องคลาส) มีให้ในชุดการตรวจสอบ COCO
แบบอย่าง | #พารามส์ | ชุดข้อมูล | อิเทอร์ส | PQ | ตร.ม | อาร์คิว | ลิงค์ดาวน์โหลด |
---|---|---|---|---|---|---|---|
เออี | ~2M | โคโค่ | 66k | - | - | - | ดาวน์โหลด (23 MB) |
แอลดีเอ็ม | ~800ม | โคโค่ | 200,000 | 51.7 | 82.0 | 63.0 | ดาวน์โหลด (3.3GB) |
หมายเหตุ: AE ที่ทรงพลังน้อยกว่า (เช่น เลเยอร์การสุ่มตัวอย่างหรืออัปแซมปลิงน้อยลง) มักจะมีประโยชน์ในการลงสี เนื่องจากเราไม่ได้ทำการปรับแต่งเพิ่มเติม
การประเมินควรมีลักษณะดังนี้:
python - W ignore tools / main_ldm . py
datasets = coco
base . sampling_kwargs . num_inference_steps = 50
base . eval_only = True
base . load_path = $ PRETRAINED_MODEL_PATH
คุณสามารถเพิ่มพารามิเตอร์ได้หากจำเป็น เกณฑ์ที่สูงกว่า เช่น --base.eval_kwargs.count_th 700
หรือ --base.eval_kwargs.mask_th 0.9
สามารถเพิ่มจำนวนได้อีก อย่างไรก็ตาม เราใช้ค่ามาตรฐานโดยกำหนดเกณฑ์ขั้นต่ำที่ 0.5 และลบส่วนที่มีพื้นที่น้อยกว่า 512 ออกสำหรับการประเมิน
หากต้องการประเมินโมเดลที่ได้รับการฝึกอบรมจากด้านบน ให้รัน tools/scripts/eval.sh
ที่นี่เราเห็นภาพผลลัพธ์:
หากคุณพบว่าพื้นที่เก็บข้อมูลนี้มีประโยชน์สำหรับการวิจัยของคุณ โปรดพิจารณาอ้างอิงเอกสารต่อไปนี้:
@article { vangansbeke2024ldmseg ,
title = { a simple latent diffusion approach for panoptic segmentation and mask inpainting } ,
author = { Van Gansbeke, Wouter and De Brabandere, Bert } ,
journal = { arxiv preprint arxiv:2401.10227 } ,
year = { 2024 }
}
หากมีข้อสงสัยประการใด โปรดติดต่อผู้เขียนหลัก
ซอฟต์แวร์นี้เผยแพร่ภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์ซึ่งอนุญาตให้ใช้ส่วนบุคคลและการวิจัยเท่านั้น สำหรับใบอนุญาตเชิงพาณิชย์โปรดติดต่อผู้เขียน คุณสามารถดูสรุปใบอนุญาตได้ที่นี่
ฉันขอบคุณสำหรับพื้นที่เก็บข้อมูลสาธารณะทั้งหมด (ดูข้อมูลอ้างอิงในโค้ดด้วย) และโดยเฉพาะอย่างยิ่งสำหรับไลบรารีของ detectorn2 และ diffusers