พื้นที่เก็บข้อมูลนี้มีโค้ดเบสสำหรับโมเดลความสอดคล้อง ซึ่งใช้งานโดยใช้ PyTorch สำหรับการดำเนินการทดลองขนาดใหญ่บน ImageNet-64, LSUN Bedroom-256 และ LSUN Cat-256 เราได้ใช้พื้นที่เก็บข้อมูลของเราบน openai/guided-diffusion ซึ่งเปิดตัวครั้งแรกภายใต้ใบอนุญาต MIT การปรับเปลี่ยนของเราทำให้สามารถสนับสนุนการกลั่นที่สม่ำเสมอ การฝึกความสม่ำเสมอ ตลอดจนอัลกอริธึมการสุ่มตัวอย่างและการแก้ไขต่างๆ ที่กล่าวถึงในบทความนี้
พื้นที่เก็บข้อมูลสำหรับการทดลอง CIFAR-10 อยู่ใน JAX และสามารถพบได้ที่ openai/consistency_models_cifar10
เราได้ออกจุดตรวจสำหรับโมเดลหลักในรายงานแล้ว ก่อนใช้รุ่นเหล่านี้ โปรดตรวจสอบการ์ดรุ่นที่เกี่ยวข้องเพื่อทำความเข้าใจวัตถุประสงค์การใช้งานและข้อจำกัดของรุ่นเหล่านี้
นี่คือลิงค์ดาวน์โหลดสำหรับจุดตรวจแต่ละรุ่น:
EDM บน ImageNet-64: edm_imagenet64_ema.pt
ซีดีบน ImageNet-64 พร้อมเมตริก l2: cd_imagenet64_l2.pt
ซีดีบน ImageNet-64 พร้อมเมตริก LPIPS: cd_imagenet64_lpips.pt
CT บน ImageNet-64: ct_imagenet64.pt
EDM ที่ LSUN Bedroom-256: edm_bedroom256_ema.pt
ซีดีบน LSUN Bedroom-256 พร้อมเมตริก l2: cd_bedroom256_l2.pt
ซีดีบน LSUN Bedroom-256 พร้อมเมตริก LPIPS: cd_bedroom256_lpips.pt
CT บน LSUN ห้องนอน-256: ct_bedroom256.pt
EDM บน LSUN Cat-256: edm_cat256_ema.pt
ซีดีบน LSUN Cat-256 พร้อมเมตริก l2: cd_cat256_l2.pt
ซีดีบน LSUN Cat-256 พร้อมเมตริก LPIPS: cd_cat256_lpips.pt
CT บน LSUN Cat-256: ct_cat256.pt
หากต้องการติดตั้งแพ็กเกจทั้งหมดในโค้ดเบสนี้พร้อมกับการขึ้นต่อกัน ให้รัน
pip ติดตั้ง -e
หากต้องการติดตั้งด้วย Docker ให้รันคำสั่งต่อไปนี้:
cd docker && สร้าง && ทำการรัน
เราจัดเตรียมตัวอย่างการฝึกอบรม EDM การกลั่นความสม่ำเสมอ การฝึกอบรมด้านความสม่ำเสมอ การสร้างขั้นตอนเดียว และการสร้างหลายขั้นตอนใน scripts/launch.sh
เพื่อเปรียบเทียบแบบจำลองกำเนิดที่แตกต่างกัน เราใช้ FID, ความแม่นยำ, การเรียกคืน และคะแนนการเริ่มต้น หน่วยวัดเหล่านี้ทั้งหมดสามารถคำนวณได้โดยใช้กลุ่มตัวอย่างที่จัดเก็บไว้ในไฟล์ .npz
(numpy) เราสามารถประเมินตัวอย่างด้วย cm/evalues/evaluator.py ได้ในลักษณะเดียวกับที่อธิบายไว้ใน openai/guided-diffusion โดยมีชุดข้อมูลอ้างอิงที่ให้ไว้ในนั้น
โมเดลความสอดคล้องได้รับการสนับสนุนใน ? ตัวกระจายสัญญาณผ่านคลาส ConsistencyModelPipeline
ด้านล่างเรามีตัวอย่าง:
นำเข้า torchfrom diffusers นำเข้า ConsistencyModelPipelinedevice = "cuda"# โหลด cd_imagenet64_l2 checkpoint.model_id_or_path = "openai/diffusers-cd_imagenet64_l2"pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)pipe.to(device)# Onestep Samplingimage = ท่อ (num_inference_steps=1).images[0]image.save("consistency_model_onestep_sample.png")# การสุ่มตัวอย่างแบบขั้นตอนเดียว การสร้างภาพแบบมีเงื่อนไขในคลาส# ป้ายกำกับคลาส ImageNet-64 145 สอดคล้องกับ king Penguinsclass_id = 145class_id = torch.tensor(class_id , dtype=torch.long)image = ไปป์ (num_inference_steps=1, class_labels=class_id).images[0]image.save("consistency_model_onestep_sample_penguin.png")# การสุ่มตัวอย่างแบบหลายขั้นตอน การสร้างภาพแบบมีเงื่อนไขในคลาส# สามารถระบุขั้นตอนเวลาได้อย่างชัดเจน ไทม์สเต็ปเฉพาะด้านล่างมาจาก repo Github ดั้งเดิม# https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L77image = pipe(timesteps=[22, 0], class_labels=class_id) .images[0]image.save("ความสม่ำเสมอ_model_multistep_sample_penguin.png")
คุณสามารถเร่งกระบวนการอนุมานให้เร็วขึ้นได้โดยใช้ torch.compile()
บน pipe.unet
(รองรับเฉพาะจาก PyTorch 2.0 เท่านั้น) สำหรับรายละเอียดเพิ่มเติม โปรดดูเอกสารอย่างเป็นทางการ การสนับสนุนนี้มีส่วนทำให้ ? ดิฟฟิวเซอร์โดย dg845 และ ayushtues
หากคุณพบว่าวิธีการและ/หรือโค้ดนี้มีประโยชน์ โปรดพิจารณาอ้างอิง
@article{song2023consistency, title={Consistency Models}, author={Song, Yang and Dhariwal, Prafulla and Chen, Mark and Sutskever, Ilya}, Journal={arXiv preprint arXiv:2303.01469}, year={2023}, -