ที่เก็บนี้มีรหัสสำหรับการปรับแต่งการแพร่กระจายที่มั่นคงใน keras มันถูกดัดแปลงจากสคริปต์นี้โดยการกอดใบหน้า รุ่นที่ผ่านการฝึกอบรมมาก่อนที่ใช้สำหรับการปรับแต่งมาจาก kerascv หากต้องการทราบเกี่ยวกับโมเดลดั้งเดิมตรวจสอบเอกสารนี้
รหัสที่ให้ไว้ในที่เก็บนี้มีวัตถุประสงค์เพื่อการวิจัยเท่านั้น โปรดตรวจสอบส่วนนี้เพื่อทราบข้อมูลเพิ่มเติมเกี่ยวกับกรณีการใช้งานและข้อ จำกัด ที่อาจเกิดขึ้น
โดยการโหลดโมเดลนี้คุณจะยอมรับใบอนุญาต creativeMl Open Rail-M ที่ https://raw.githubusercontent.com/compvis/stable-diffusion/main/license
หากคุณกำลังมองหาแหล่งข้อมูลประกอบของที่เก็บนี้นี่คือลิงค์:
สารบัญ :
ที่เก็บนี้มีที่เก็บน้องสาว (Keras-SD-Sarving) ที่ครอบคลุมรูปแบบการปรับใช้ต่างๆสำหรับการแพร่กระจายที่มั่นคง
อัปเดต 13 มกราคม 2023 : โครงการนี้ได้อันดับที่ 2 ในการแข่งขันรางวัล Keras Community Prize ครั้งแรกที่จัดโดย Google
ตามสคริปต์ดั้งเดิมจากการกอดใบหน้าที่เก็บนี้ยังใช้ชุดข้อมูลโปเกมอน แต่มันก็ถูกสร้างใหม่ให้ทำงานได้ดีขึ้นกับ tf.data ชุดข้อมูลรุ่นที่สร้างใหม่นั้นโฮสต์อยู่ที่นี่ ตรวจสอบลิงค์นั้นสำหรับรายละเอียดเพิ่มเติม
รหัสปรับแต่งมีให้ใน finetune.py ก่อนที่จะทำการฝึกอบรมตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งการพึ่งพา (อ้างอิงถึง requirements.txt )
คุณสามารถเปิดการฝึกอบรมด้วยอาร์กิวเมนต์เริ่มต้นโดยใช้ python finetune.py เรียกใช้ python finetune.py -h เพื่อรู้เกี่ยวกับอาร์กิวเมนต์บรรทัดคำสั่งที่รองรับ คุณสามารถเปิดใช้งานการฝึกอบรมแบบผสมผสานได้โดยผ่านธง --mp
เมื่อคุณเปิดตัวการฝึกอบรมจุดตรวจสอบแบบจำลองการแพร่กระจายจะถูกสร้างขึ้นในยุคที่ชาญฉลาดเฉพาะในกรณีที่การสูญเสียในปัจจุบันต่ำกว่าช่วงก่อนหน้านี้
สำหรับการหลีกเลี่ยงการฝึกอบรม oom และเร็วขึ้นขอแนะนำให้ใช้ V100 GPU อย่างน้อย เราใช้ A100
รายละเอียดสำคัญบางอย่างที่ควรทราบ :
รายละเอียดการฝึกอบรม :
เราปรับโมเดลในสองความละเอียดที่แตกต่างกัน: 256x256 และ 512x512 เราเปลี่ยนแปลงขนาดของแบทช์และจำนวนยุคสำหรับการปรับจูนด้วยความละเอียดที่แตกต่างกันทั้งสองนี้ เนื่องจากเราไม่ได้ใช้การสะสมการไล่ระดับสีเราจึงใช้ตัวอย่างรหัสนี้เพื่อได้รับจำนวนยุค
python finetune.py --batch_size 4 --num_epochs 577python finetune.py --img_height 512 --img_width 512 --batch_size 1 --num_epochs 72 --mpสำหรับความละเอียด 256x256 เราตั้งใจลดจำนวนยุคเพื่อประหยัดเวลาในการคำนวณ
น้ำหนักที่ปรับแต่ง :
คุณสามารถค้นหาน้ำหนักแบบจำลองการแพร่กระจายที่ปรับแต่งได้ที่นี่
ชุดข้อมูลโปเกมอนเริ่มต้นที่ใช้ในที่เก็บนี้มาพร้อมกับโครงสร้างต่อไปนี้:
pokemon_dataset/
data.csv
image_24.png
image_3.png
image_550.png
image_700.png
... data.csv ดูเหมือนว่า:
ตราบใดที่ชุดข้อมูลที่กำหนดเองของคุณตามโครงสร้างนี้คุณไม่จำเป็นต้องเปลี่ยนแปลงอะไรใน codebase ปัจจุบันยกเว้น dataset_archive
ในกรณีที่ชุดข้อมูลของคุณมีคำอธิบายภาพหลายคำต่อภาพคุณสามารถสุ่มเลือกหนึ่งจากพูลของคำอธิบายภาพต่อภาพในระหว่างการฝึกอบรม
ขึ้นอยู่กับชุดข้อมูลคุณอาจต้องปรับแต่งพารามิเตอร์ hyperparameters
import keras_cv
import matplotlib . pyplot as plt
from tensorflow import keras
IMG_HEIGHT = IMG_WIDTH = 512
def plot_images ( images , title ):
plt . figure ( figsize = ( 20 , 20 ))
for i in range ( len ( images )):
ax = plt . subplot ( 1 , len ( images ), i + 1 )
plt . title ( title )
plt . imshow ( images [ i ])
plt . axis ( "off" )
# We just have to load the fine-tuned weights into the diffusion model.
weights_path = keras . utils . get_file (
origin = "https://huggingface.co/sayakpaul/kerascv_sd_pokemon_finetuned/resolve/main/ckpt_epochs_72_res_512_mp_True.h5"
)
pokemon_model = keras_cv . models . StableDiffusion (
img_height = IMG_HEIGHT , img_width = IMG_WIDTH
)
pokemon_model . diffusion_model . load_weights ( weights_path )
# Generate images.
generated_images = pokemon_model . text_to_image ( "Yoda" , batch_size = 3 )
plot_images ( generated_images , "Fine-tuned on the Pokemon dataset" ) คุณสามารถนำ weights_path ของคุณมาใช้ (ควรเข้ากันได้กับ diffusion_model ) และนำรหัสตัวอย่างกลับมาใช้ใหม่
ตรวจสอบโน้ตบุ๊ก colab นี้เพื่อเล่นกับรหัสการอนุมาน
เริ่มแรกเราปรับโมเดลด้วยความละเอียด 256x256 นี่คือผลลัพธ์บางอย่างพร้อมกับการเปรียบเทียบกับผลลัพธ์ของโมเดลดั้งเดิม
| ภาพ | การแจ้ง |
|---|---|
| โยดา | |
| แมวหุ่นยนต์มีปีก | |
| สวัสดีคิตตี้ |
เราจะเห็นได้ว่ารุ่นที่ปรับแต่งมีเอาต์พุตที่มีความเสถียรมากกว่ารุ่นดั้งเดิม แม้ว่าผลลัพธ์จะได้รับการปรับปรุงอย่างสวยงามมากขึ้น แต่เอฟเฟกต์การปรับจูนก็สามารถมองเห็นได้ นอกจากนี้เรายังติดตามพารามิเตอร์แบบเดียวกันจากสคริปต์ของ Hugging Face สำหรับความละเอียด 256x256 (นอกเหนือจากจำนวนยุคและขนาดแบทช์) ด้วยพารามิเตอร์ที่ดีกว่าผลลัพธ์จะดีขึ้น
สำหรับความละเอียด 512x512 เราสังเกตสิ่งที่คล้ายกัน ดังนั้นเราจึงทดลองกับพารามิเตอร์ unconditional_guidance_scale และสังเกตเห็นว่าเมื่อมันถูกตั้งค่าเป็น 40 (ในขณะที่รักษาข้อโต้แย้งอื่น ๆ ) ผลลัพธ์จะออกมาดีขึ้น
| ภาพ | การแจ้ง |
|---|---|
| โยดา | |
| แมวหุ่นยนต์มีปีก | |
| สวัสดีคิตตี้ |
หมายเหตุ : การปรับแต่งอย่างละเอียดบน 512x512 ยังอยู่ในระหว่างดำเนินการตามการเขียนนี้ แต่ต้องใช้เวลานานมากในการทำให้ยุคเดียวโดยไม่ต้องมีการฝึกอบรมแบบกระจายและการสะสมการไล่ระดับสี ผลลัพธ์ข้างต้นมาจากจุดตรวจที่ได้รับหลังจากยุค 60
ด้วยสูตรที่คล้ายกัน (แต่ได้รับการฝึกฝนสำหรับขั้นตอนการเพิ่มประสิทธิภาพเพิ่มเติม) Lambda Labs แสดงให้เห็นถึงผลลัพธ์ที่น่าทึ่ง