DragDiffusion: ควบคุมโมเดลการแพร่กระจายสำหรับการแก้ไขรูปภาพตามจุดเชิงโต้ตอบ
ยูจุน ชิ ชูหุย เสวี่ย จุน ห่าว เลียว เจียชุน ปัน
ฮั่นชู หยาน เหวินชิง จาง วินเซนต์ YF ตัน ซ่ง ไป๋
ข้อสงวนสิทธิ์
นี่เป็นโครงการวิจัย ไม่ใช่ผลิตภัณฑ์เชิงพาณิชย์ ผู้ใช้ได้รับอิสระในการสร้างภาพโดยใช้เครื่องมือนี้ แต่ต้องปฏิบัติตามกฎหมายท้องถิ่นและใช้งานในลักษณะที่รับผิดชอบ นักพัฒนาไม่รับผิดชอบต่อการใช้งานในทางที่ผิดโดยผู้ใช้
ข่าวสารและการอัพเดท
- [29 ม.ค.] อัปเดตเพื่อรองรับตัวกระจายสัญญาณ==0.24.0!
- [23 ต.ค.] เปิดตัวโค้ดและข้อมูลของ DragBench แล้ว! โปรดตรวจสอบ README ภายใต้ "drag_bench_evalue" เพื่อดูรายละเอียด
- [16 ต.ค.] รวม FreeU เมื่อลากรูปภาพที่สร้างขึ้น
- [3 ต.ค.] เร่งฝึก LoRA เมื่อแก้ไขภาพจริง ( ตอนนี้มีเพียงประมาณ 20 ปีใน A100! )
- [3 กันยายน] v0.1.0 วางจำหน่าย
- เปิดใช้งาน การลากรูปภาพที่สร้างการแพร่กระจาย
- ขอแนะนำกลไกคำแนะนำใหม่ที่ ปรับปรุงคุณภาพของผลลัพธ์การลากอย่างมาก (ได้แรงบันดาลใจจาก MasaCtrl)
- เปิดใช้งานการลากรูปภาพด้วยอัตราส่วนภาพที่กำหนดเอง
- การเพิ่มการรองรับ DPM++ Solver (รูปภาพที่สร้าง)
- [18 กรกฎาคม] เปิดตัว v0.0.1
- รวมการฝึกอบรม LoRA เข้ากับอินเทอร์เฟซผู้ใช้ ไม่จำเป็นต้องใช้สคริปต์การฝึกอบรมและทุกอย่างสามารถทำได้อย่างสะดวกสบายใน UI!
- ปรับเค้าโครงส่วนต่อประสานผู้ใช้ให้เหมาะสม
- เปิดใช้งานการใช้ VAE ที่ดีกว่าสำหรับดวงตาและใบหน้า (ดูสิ่งนี้)
- [8 กรกฎาคม] เปิดตัว v0.0.0
- ใช้ฟังก์ชันพื้นฐานของ DragDiffusion
การติดตั้ง
ขอแนะนำให้รันโค้ดของเราบน Nvidia GPU ด้วยระบบ linux เรายังไม่ได้ทดสอบกับการกำหนดค่าอื่นๆ ปัจจุบันต้องใช้หน่วยความจำ GPU ประมาณ 14 GB เพื่อเรียกใช้วิธีการของเรา เราจะเพิ่มประสิทธิภาพหน่วยความจำต่อไป
หากต้องการติดตั้งไลบรารีที่จำเป็น เพียงรันคำสั่งต่อไปนี้:
conda env create -f environment.yaml
conda activate dragdiff
เรียกใช้ DragDiffusion
เริ่มต้นด้วยบรรทัดคำสั่งให้รันสิ่งต่อไปนี้เพื่อเริ่มอินเทอร์เฟซผู้ใช้ gradio:
คุณสามารถตรวจสอบ GIF ของเราด้านบนซึ่งสาธิตการใช้งาน UI ในลักษณะทีละขั้นตอน
โดยพื้นฐานแล้วจะประกอบด้วยขั้นตอนต่อไปนี้:
กรณีที่ 1: การลากอินพุตรูปภาพจริง
1) ฝึกอบรม LoRA
- วางภาพอินพุตของเราลงในช่องซ้ายสุด
- ป้อนข้อความแจ้งที่อธิบายรูปภาพในช่อง "พร้อมท์"
- คลิกปุ่ม "ฝึก LoRA" เพื่อฝึก LoRA ตามภาพที่ป้อนเข้า
2) ทำการแก้ไข "ลาก"
- วาดมาสก์ในช่องซ้ายสุดเพื่อระบุพื้นที่ที่แก้ไขได้
- คลิกจุดจับและจุดเป้าหมายในกล่องตรงกลาง นอกจากนี้คุณยังสามารถรีเซ็ตคะแนนทั้งหมดได้โดยคลิก "เลิกทำจุด"
- คลิกปุ่ม "เรียกใช้" เพื่อเรียกใช้อัลกอริทึมของเรา ผลลัพธ์ที่แก้ไขจะแสดงในช่องขวาสุด
กรณีที่ 2: การลากรูปภาพที่สร้างโดยการแพร่กระจาย
1) สร้างภาพ
- กรอกพารามิเตอร์การสร้าง (เช่น พรอมต์บวก/ลบ พารามิเตอร์ภายใต้การกำหนดค่าการสร้างและพารามิเตอร์ FreeU)
- คลิก "สร้างภาพ"
2) ทำการ "ลาก" บนรูปภาพที่สร้างขึ้น
- วาดมาสก์ในช่องซ้ายสุดเพื่อระบุพื้นที่ที่แก้ไขได้
- คลิกจุดจับและจุดเป้าหมายในกล่องตรงกลาง
- คลิกปุ่ม "เรียกใช้" เพื่อเรียกใช้อัลกอริทึมของเรา ผลลัพธ์ที่แก้ไขจะแสดงในช่องขวาสุด
ใบอนุญาต
รหัสที่เกี่ยวข้องกับอัลกอริทึม DragDiffusion อยู่ภายใต้ลิขสิทธิ์ Apache 2.0
บิบเท็กซ์
หากคุณพบว่า repo ของเรามีประโยชน์ โปรดพิจารณาให้ดาวหรืออ้างอิงรายงานของเรา :)
@article { shi2023dragdiffusion ,
title = { DragDiffusion: Harnessing Diffusion Models for Interactive Point-based Image Editing } ,
author = { Shi, Yujun and Xue, Chuhui and Pan, Jiachun and Zhang, Wenqing and Tan, Vincent YF and Bai, Song } ,
journal = { arXiv preprint arXiv:2306.14435 } ,
year = { 2023 }
}
ติดต่อ
หากมีคำถามเกี่ยวกับโครงการนี้ โปรดติดต่อ Yujun ([email protected])
รับทราบ
ผลงานชิ้นนี้ได้รับแรงบันดาลใจจาก DragGAN อันน่าทึ่ง รหัสการฝึกอบรม Lora ได้รับการแก้ไขจากตัวอย่างของตัวกระจาย ตัวอย่างรูปภาพจะถูกรวบรวมจาก unsplash, pexels, pixabay สุดท้ายนี้ ขอส่งเสียงชื่นชมโมเดลและไลบรารีการแพร่กระจายของโอเพ่นซอร์สที่น่าทึ่งทั้งหมด
ลิงค์ที่เกี่ยวข้อง
- ลาก GAN ของคุณ: การจัดการตามจุดเชิงโต้ตอบบน Generative Image Manifold
- MasaCtrl: การควบคุมการเอาใจใส่ซึ่งกันและกันโดยปราศจากการปรับแต่งเพื่อการสังเคราะห์และการแก้ไขภาพที่สม่ำเสมอ
- จดหมายโต้ตอบฉุกเฉินจากการแพร่กระจายของภาพ
- DragonDiffusion: เปิดใช้งานการจัดการแบบลากบนโมเดลการแพร่กระจาย
- FreeDrag: คุณไม่จำเป็นต้องติดตามจุดสำหรับการแก้ไขรูปภาพตามจุดแบบโต้ตอบ
ปัญหาทั่วไปและแนวทางแก้ไข
- สำหรับผู้ใช้ที่ประสบปัญหาในการโหลดโมเดลจาก Huggingface เนื่องจากข้อจำกัดทางอินเทอร์เน็ต โปรด 1) ไปที่ลิงก์นี้และดาวน์โหลดโมเดลลงในไดเร็กทอรี "local_pretrained_models"; 2) เรียกใช้ "drag_ui.py" และเลือกไดเร็กทอรีไปยังโมเดลที่ฝึกไว้ล่วงหน้าของคุณใน "พารามิเตอร์อัลกอริทึม -> การกำหนดค่าโมเดลพื้นฐาน -> เส้นทางโมเดลการแพร่กระจาย"
ขยาย