Stable Cascade ที่เสถียร
(github.com/Stability-AI)- Stable Cascade เป็นโค้ดเบสอย่างเป็นทางการของ Stability AI โดยให้สคริปต์สำหรับการฝึกและอนุมานโมเดลสร้างภาพที่อิงสถาปัตยกรรม Würstchen รวมถึง checkpoint ของโมเดลหลายตัว
- ความแตกต่างสำคัญคือทำงานใน latent space ที่เล็กกว่า Stable Diffusion มาก โดยเข้ารหัสภาพ 1024x1024 เป็น 24x24 แทนที่จะเป็น 128x128 ของ Stable Diffusion จึงลดความเร็วในการอนุมานและต้นทุนการฝึก
- โมเดลประกอบด้วย cascade 3 ขั้น ได้แก่ Stage A, Stage B, Stage C โดย Stage A และ B รับผิดชอบการบีบอัดภาพ ส่วน Stage C รับผิดชอบการสร้าง latent representation ขนาด 24x24 จากพรอมป์ต์ข้อความ
- ฟีเจอร์ที่มีให้รวมถึง text-to-image, image variation, image-to-image, ControlNet, LoRA, การสร้างภาพใหม่, การฝึกตั้งแต่เริ่มต้นและการ fine-tuning และยังเข้าถึงได้ผ่าน diffusers 🤗
- โค้ดเบสยังอยู่ใน ช่วงพัฒนาเริ่มต้น จึงอาจมีข้อผิดพลาดที่ไม่คาดคิด หรือโค้ดฝึก/อนุมานที่ยังไม่ได้ปรับให้เหมาะสม โค้ดอยู่ภายใต้ MIT License ส่วน weights ของโมเดลอยู่ภายใต้ Stability AI Non-Commercial Research Community License
ปัญหาที่ Stable Cascade ต้องการแก้
- Stable Cascade เป็น โค้ดเบสอย่างเป็นทางการของ Stable Cascade โดยให้สคริปต์การฝึกและการอนุมาน รวมถึงโมเดลหลายตัวที่ใช้งานได้
- โมเดลนี้อิงสถาปัตยกรรม Würstchen
- ความแตกต่างหลักเมื่อเทียบกับโมเดลอย่าง Stable Diffusion คือทำงานใน latent space ที่เล็กกว่ามาก
- Stable Diffusion ใช้ compression factor 8 เพื่อเข้ารหัสภาพ 1024x1024 เป็น 128x128
- Stable Cascade ทำได้ถึง compression factor 42 จึงเข้ารหัสภาพ 1024x1024 เป็น 24x24 ได้
- โมเดลแบบมีเงื่อนไขด้วยข้อความถูกฝึกใน latent space ที่บีบอัดสูงนี้
- latent space ที่เล็กลงนำไปสู่การอนุมานที่เร็วขึ้นและการฝึกที่ถูกลง
- สถาปัตยกรรมเวอร์ชันก่อนหน้านี้ทำให้ ลดต้นทุนได้ 16 เท่า เมื่อเทียบกับ Stable Diffusion 1.5
ประสิทธิภาพและความคุ้มค่า
- Stable Cascade ถูกนำเสนอเป็นโมเดลที่เหมาะกับกรณีใช้งานที่ให้ความสำคัญกับประสิทธิภาพ
- วิธีขยายความสามารถที่เป็นที่รู้จัก เช่น fine-tuning, LoRA, ControlNet, IP-Adapter, LCM ก็ทำได้ด้วยแนวทางนี้เช่นกัน
- จากการประเมินของตนเอง Stable Cascade ทำผลงานได้ดีที่สุดทั้งด้าน การสอดคล้องกับพรอมป์ต์ และ คุณภาพเชิงสุนทรียะ ในเกือบทุกการเปรียบเทียบ
- การประเมินโดยมนุษย์ทำโดยผสม parti-prompts กับ aesthetic prompts
- Stable Cascade ถูกเปรียบเทียบที่ 30 ขั้นตอนการอนุมาน
- คู่เปรียบเทียบคือ Playground v2 50 ขั้นตอน, SDXL 50 ขั้นตอน, SDXL Turbo 1 ขั้นตอน และ Würstchen v2 30 ขั้นตอน
- โมเดลที่ใหญ่ที่สุดมีพารามิเตอร์มากกว่า Stable Diffusion XL 1.4 พันล้านตัว แต่มีเวลาอนุมานที่เร็วกว่า
โครงสร้างโมเดล 3 ขั้น
- Stable Cascade ประกอบด้วยโมเดล 3 ตัว ได้แก่ Stage A, Stage B, Stage C ซึ่งเป็นโครงสร้าง cascade สำหรับสร้างภาพตามชื่อ
- Stage A และ Stage B มีหน้าที่บีบอัดภาพ คล้ายกับ VAE ของ Stable Diffusion
- Stage C รับพรอมป์ต์ข้อความเป็นอินพุตและสร้าง latent representation ขนาด 24 x 24
- Stage A เป็น VAE ส่วน Stage B และ Stage C เป็นโมเดล diffusion
- รีลีสนี้มี checkpoint ต่อไปนี้
- Stage C: เวอร์ชัน 1 พันล้านพารามิเตอร์ และเวอร์ชัน 3.6 พันล้านพารามิเตอร์
- Stage B: เวอร์ชัน 700 ล้านพารามิเตอร์ และเวอร์ชัน 1.5 พันล้านพารามิเตอร์
- Stage A: 20 ล้านพารามิเตอร์ และถูกตรึงไว้เพราะมีขนาดเล็ก
- สำหรับ Stage C ขอแนะนำอย่างยิ่งให้ใช้เวอร์ชัน 3.6 พันล้าน เนื่องจากงาน fine-tuning ส่วนใหญ่มุ่งไปที่เวอร์ชัน 3.6 พันล้านพารามิเตอร์
- Stage B ให้ผลลัพธ์ที่ดีทั้งสองเวอร์ชัน แต่เวอร์ชัน 1.5 พันล้านพารามิเตอร์ทำได้ดีกว่าในการสร้างรายละเอียดเล็กและละเอียดอ่อนกลับมา
- เพื่อผลลัพธ์ที่ดีที่สุด มีการเสนอให้ใช้ variant ที่ใหญ่กว่าของแต่ละขั้น
ฟีเจอร์การอนุมานและโน้ตบุ๊ก
- การรันโมเดลทำได้ด้วยโน้ตบุ๊กในส่วน inference
- ส่วนดังกล่าวมีรายละเอียดเกี่ยวกับการดาวน์โหลดโมเดล ความต้องการด้านคอมพิวต์ และบทแนะนำการใช้งาน
-
Text-to-Image
- text_to_image.ipynb ให้ฟีเจอร์พื้นฐาน text-to-image, image variation และ image-to-image
- image variation เข้าใจ embedding ของภาพและสร้างรูปแบบแปรผันของภาพที่กำหนดได้ โดยในตัวอย่างไม่ได้ให้พรอมป์ต์
- image-to-image ทำงานโดยเติม noise ให้ภาพจนถึงจุดหนึ่ง แล้วสร้างภาพต่อจากจุดเริ่มต้นนั้น
- ในตัวอย่าง เติม noise ให้ภาพซ้าย 80% และใช้คำบรรยาย
A person riding a rodent. - โมเดลยังเข้าถึงได้จากไลบรารี diffusers 🤗 ผ่าน เอกสาร stable-cascade ของ Hugging Face
-
ControlNet
- controlnet.ipynb ครอบคลุมวิธีใช้ ControlNet ที่มีให้สำหรับ Stable Cascade หรือ ControlNet ที่ผู้ใช้ฝึกเอง
- ControlNet ในรีลีสนี้ประกอบด้วย Inpainting / Outpainting, Face Identity, Canny, Super Resolution
- Face Identity ControlNet จะถูกรีลีสในภายหลัง
- ใช้งานได้ในโน้ตบุ๊กเดียวกัน และเพียงเปลี่ยนค่าการตั้งค่าสำหรับ ControlNet แต่ละตัว
-
LoRA
- Stable Cascade มี implementation ของตนเองสำหรับการฝึกและใช้งาน LoRA
- LoRA ใช้สำหรับ fine-tuning Stage C ซึ่งเป็นโมเดลแบบมีเงื่อนไขด้วยข้อความได้
- สามารถเพิ่มและฝึก token ใหม่ รวมถึงเพิ่มเลเยอร์ LoRA เข้าไปในโมเดลได้
- lora.ipynb แสดงวิธีใช้ LoRA ที่ฝึกแล้ว
-
การสร้างภาพใหม่
- reconstruct_images.ipynb แสดงวิธีเข้ารหัส/ถอดรหัสภาพและข้อดีของวิธีบีบอัดสูง
- Diffusion Autoencoder ของ Stable Cascade ทำให้ทำงานในพื้นที่ที่ถูกบีบอัดอย่างมากได้
- สามารถใช้ Stage A และ Stage B ได้เหมือนการใช้ VAE ของ Stable Diffusion เพื่อฝึกโมเดลของตนเอง
- batch ตัวอย่าง
4 x 3 x 1024 x 1024ถูกเข้ารหัสเป็น4 x 16 x 24 x 24 - spatial compression factor คือ
1024 / 24 = 42.67 - จากนั้นสามารถถอดรหัสกลับเป็น
4 x 3 x 1024 x 1024ด้วย Stage A และ Stage B - ระบุว่าผลลัพธ์การสร้างใหม่ใกล้เคียงต้นฉบับมาก แม้ในรายละเอียดเล็ก ๆ และการสร้างใหม่แบบนี้ทำไม่ได้ด้วย VAE มาตรฐาน เป็นต้น
การฝึก แอป และไลเซนส์
- โค้ดการฝึกครอบคลุมการฝึก Stable Cascade ตั้งแต่เริ่มต้น, fine-tuning, ControlNet และ LoRA
- วิธีฝึกโดยละเอียดมีอยู่ใน training folder
- โค้ดเบสอยู่ใน ช่วงพัฒนาเริ่มต้น
- อาจมีข้อผิดพลาดที่ไม่คาดคิด
- โค้ดสำหรับการฝึกและการอนุมานอาจยังไม่ได้รับการปรับให้เหมาะสมอย่างเต็มที่
- หากมีความสนใจ มีแผนจะปล่อยอัปเดตอย่างต่อเนื่องเพื่อสะท้อนการปรับปรุงและการเพิ่มประสิทธิภาพล่าสุด
- พร้อมรับไอเดีย ฟีดแบ็ก และการมีส่วนร่วมในการอัปเดต
- สำหรับการรันแอป Gradio ให้ติดตั้งสิ่งต่อไปนี้ก่อน
pip3 install gradiopip3 install acceleratepip3 install git+https://github.com/kashif/diffusers.git@wuerstchen-v3
- รันแอป Gradio จาก root ของโปรเจกต์ด้วยคำสั่งต่อไปนี้
PYTHONPATH=./ python3 gradio_app/app.py
- โค้ดอยู่ภายใต้ MIT LICENSE
- weights ของโมเดลที่รับได้จาก Hugging Face อยู่ภายใต้ STABILITY AI NON-COMMERCIAL RESEARCH COMMUNITY LICENSE
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ลองใช้มาสองสามชั่วโมงแล้ว รู้สึกว่า การทำตามพรอมป์ต์ ดีขึ้นมาก
ตอนนี้คุณภาพดูเหมือนจะด้อยกว่า SDXL บางโมเดล แต่ขอรอดูก่อนจนกว่าจะได้ทดสอบเพิ่มอีกสองสามวัน
ความเร็วก็เร็วด้วย รู้สึกว่าเร็วกว่า SDXL แบบไม่ใช่เทอร์โบราว 2–3 เท่า
ถ้าต้องถึงขั้นใช้ ControlNet, OpenPose, depth map เพื่อบังคับให้ได้รูปลักษณ์หรือความลึกเฉพาะบางอย่าง วิธีแก้ของแต่ละการสร้างภาพก็จะกลายเป็นงานเฉพาะทางเกินไป
จากที่ลองเอง มันดีขึ้นในแง่การทำตามพรอมป์ต์ และภาพก็ดูถูกใจมากกว่าในเชิงสายตา
เห็นว่าโมเดลที่ใหญ่ที่สุดมีพารามิเตอร์มากกว่า SDXL อีก 1.4 พันล้านตัว แต่ SDXL เองก็ต้องการ VRAM เยอะอยู่แล้ว
น่าประทับใจมาก
เท่าที่เข้าใจ ตอนนี้ Stability AI กำลังรับ เงินลงทุนจาก VC อยู่ แต่ดูเหมือนหลีกเลี่ยงไม่ได้ที่จะต้องเผาเงินมหาศาล และก็ยังไม่ชัดเจนว่าโมเดลธุรกิจจะยั่งยืนหรือไม่
บางทีอาจสมควรได้รับทุนวิจัยจากรัฐบาล
มีรายงานว่าในช่วงดีลกับ Intel บริษัทใช้เงินกับบิลรายเดือนและเงินเดือนประมาณ 8 ล้านดอลลาร์ ขณะที่รายได้มีเพียงเศษเสี้ยวของจำนวนดังกล่าว
รายได้เดือนสิงหาคมอยู่ที่ 1.2 ล้านดอลลาร์ และเคยมีโพสต์ X ของ Mostaque ว่ารายได้จากซอฟต์แวร์และบริการกำลังมุ่งหน้าไปถึง 3 ล้านดอลลาร์ในเดือนนั้น แต่ภายหลังถูกลบไปแล้ว
https://fortune.com/2023/11/29/stability-ai-sale-intel-ceo-r...
วันนี้ค้นหาใน HN แล้วไม่ค่อยตรง เลยหาคอมเมนต์เฉพาะที่นึกถึงไม่เจอ
ถ้าใครหาได้ หน้าผู้ใช้อยู่ที่นี่: https://news.ycombinator.com/user?id=emadm
เลยสงสัยว่าโครงสร้างนี้เป็นอย่างไร
เป็นงานเฉพาะสิทธิ์เพื่อ stability.ai หรือเปล่า?
ดู commit แล้วพบว่าไลเซนส์ถูกเปลี่ยนจาก MIT เป็นไลเซนส์กำหนดเองของบริษัท: https://github.com/Stability-AI/StableCascade/commit/209a526...
ตามกฎหมายแล้ว สามารถใช้สแนปช็อตก่อนหน้าก่อนเปลี่ยนไลเซนส์ภายใต้ ไลเซนส์ MIT เดิมได้ไหม?
โดยทั่วไปศาลจะมองภาพรวมและพิจารณาเจตนา และเข้าใจด้วยว่าอาจเกิดความผิดพลาดเชิงธุรการได้
แต่กรณีที่บริษัทใดบริษัทหนึ่งอ้างว่าเชื่อถือไลเซนส์เดิมแล้วลงทุนทรัพยากรไปมาก อาจเป็นข้อยกเว้นได้
เวลาของ commit ดูสำคัญมาก ถ้า repository เป็น MIT แค่ไม่กี่ชั่วโมงก่อนเผยแพร่ต่อสาธารณะ คงยากที่ธุรกิจจะอ้างได้ว่ามีการลงทุนอย่างมีนัยสำคัญ
commit นั้นยังใช้ได้ตาม ไลเซนส์ MIT ณ เวลาที่เผยแพร่สู่สาธารณะตามต้องการต่อไป
คล้ายกับการซื้ออีบุ๊ก แล้วภายหลังฉบับพิมพ์ครั้งที่ 2 ออกมาเฉพาะแบบปกแข็ง แต่อีบุ๊กฉบับพิมพ์ครั้งที่ 1 ก็ยังอ่านได้อยู่
เป็นผลงานคนละชิ้นที่อยู่ภายใต้ไลเซนส์ต่างกัน
Stability AI ระบุว่าไลเซนส์ไม่ใช่เชิงพาณิชย์นี้เป็นเพราะมันเป็นพรีวิวทางเทคนิคเหมือน SDXL 0.9
คุณทำให้ codebase ที่ใช้ไลเซนส์ MIT กลายเป็นแบบปิดได้ แต่เปลี่ยนไลเซนส์ย้อนหลังของโค้ดเก่าที่เผยแพร่ไปแล้วไม่ได้
commit แรก ๆ ของ Stability มีไลเซนส์ MIT อยู่ ดังนั้นสามารถ fork commit นั้นแล้วทำอะไรก็ได้ตามต้องการ
จุดที่ยุ่งยากคือมี commit ที่เปลี่ยนไลเซนส์จาก MIT เป็นแบบกรรมสิทธิ์ แต่ไม่มีการเปลี่ยนโค้ด
นี่อาจไม่มีผลบังคับ เพราะไม่สามารถแจกจ่าย codebase เดียวกันภายใต้สองไลเซนส์ที่ขัดแย้งกันได้
ไลเซนส์ใหม่จะใช้ได้เฉพาะกับการเปลี่ยนแปลงที่ถูกเพิ่มเข้าไปใน codebase หลังการเปลี่ยนไลเซนส์เท่านั้น
คงไม่ถึงกับเรียกว่า “ผิดกฎหมาย” แต่เพราะได้แจกจ่ายซอฟต์แวร์เดียวกันภายใต้ไลเซนส์เปิดไปแล้ว ต่อให้อ้างว่าเป็นซอฟต์แวร์กรรมสิทธิ์ ก็น่าจะยืนในศาลได้ยาก
มี playground ที่ปรับแต่งไว้แล้วที่นี่: https://www.fal.ai/models/stable-cascade
โดยเฉพาะในวงการที่แข่งขันดุเดือดแบบตอนนี้ และกลุ่มผู้ใช้ HN มีแนวโน้มจะเลือกไปรันเองมากกว่าสมัครสมาชิกเพียงเพื่อทดสอบสร้างภาพเดียว
เหมือนกับ image generator ตัวอื่น ๆ ที่ผมลองมา ตัวนี้ก็ยังสร้าง คีย์เปียโน ให้ถูกต้องไม่ได้ [1]
ถ้าจะให้นับกลุ่มคีย์ดำได้ น่าจะต้องใช้แนวทางอื่น
[1] https://fal.ai/models/stable-cascade?share=13d35b76-d32f-45c...
ในกรณีของผม ถ้าสร้างภาพเกี่ยวกับบาสเกตบอล ส่วนใหญ่จะมีลูกบอลมากกว่าหนึ่งลูก
ผมไม่ใช่ผู้เชี่ยวชาญ แต่ดูเหมือนการฝึกจะไม่เข้าใจ หรือเข้าใจได้แค่บางส่วน เกี่ยวกับ ข้อจำกัดพื้นฐาน ในชีวิตและวัฒนธรรมมนุษย์ เช่น คีย์เปียโนทั้งหมดควรเหมือนกัน หรือในการแข่งขันหนึ่งเกมมีลูกบอลเพียงลูกเดียว
โมเดลนี้สร้างขึ้นบน สถาปัตยกรรม Würstchen
หนึ่งในผู้เขียนมีวิดีโอที่อธิบายได้ดีมากว่าโมเดลนี้ทำงานอย่างไร
https://www.youtube.com/watch?v=ogJsCPqgFMk
Gemini Advanced> Summarize this video: https://www.youtube.com/watch?v=ogJsCPqgFMk
วิดีโอนี้เกี่ยวกับวิธีฝึกโมเดล diffusion แบบ text-to-image ที่ชื่อ Würstchen
มันมีประสิทธิภาพกว่าวิธีเดิมอย่าง Stable Diffusion 1.4 มาก และสามารถให้ผลลัพธ์ใกล้เคียงกันได้โดยใช้เวลาและปริมาณการคำนวณในการฝึกเพียง 1 ใน 16
แกนหลักคือกระบวนการบีบอัด 2 ขั้นตอน
ขั้นแรกใช้ VQ-VAE บีบอัดภาพให้เป็น latent space ที่เล็กกว่า latent space ที่ Stable Diffusion ใช้อยู่ 4 เท่า และขั้นที่สองใช้โมเดล diffusion บีบอัด latent space อีก 10 เท่า
ดังนั้นอัตราการบีบอัดรวมจึงเป็น 40 เท่า ซึ่งสูงกว่าการบีบอัด 8 เท่าของ Stable Diffusion มาก
ด้วย latent space ที่ถูกบีบอัด โมเดล diffusion แบบ text-to-image ของ Würstchen จึงเล็กกว่าและฝึกได้เร็วกว่ามากเมื่อเทียบกับโมเดล Stable Diffusion
Würstchen สามารถฝึกบน GPU ตัวเดียวได้ใน 24,000 GPU-ชั่วโมง แต่ Stable Diffusion 1.4 ต้องใช้ 150,000 GPU-ชั่วโมง
แม้จะมีประสิทธิภาพสูง แต่ก็สร้างภาพที่มีคุณภาพใกล้เคียงกับ Stable Diffusion ได้ และบางครั้งยังให้คุณภาพดีกว่าในภาพที่มีความละเอียดสูงกว่าหรือมีรายละเอียดมากกว่า
โดยรวมแล้ว Würstchen ถือเป็นความก้าวหน้าสำคัญในด้านการสร้างภาพจากข้อความ ทำให้การฝึกโมเดลมีประสิทธิภาพและต้นทุนต่ำลง และอาจขยายการใช้งานไปสู่ภาพการตลาด ภาพประกอบหนังสือ และอวาตาร์ส่วนบุคคลได้
มีวิธีใช้สร้างภาพหลายภาพของโมเดลเดียวกันไหม?
เช่น สร้างภาพโมเดลรถยนต์จากหลายมุมที่หมุนไปรอบ ๆ แต่ทั้งหมดต้องยังคงเป็นรถคันเดียวกันที่สร้างขึ้นมา
[1] https://zero123.cs.columbia.edu/
สามารถทำเป็นโฟลว์ ภาพอินพุต => embedding => ภาพ N ภาพ และถ้าคิดไปถึงมุมมองการเรนเดอร์ 3D ก็ใช้ ControlNet กับภาพ N ภาพนั้นได้
อ้างอิง: “The model can also understand image embeddings, which makes it possible to generate variations of a given image (left). There was no prompt given here.”
จำได้ว่าเคยลองหลายอย่างกับนักวิจัยสองคนนี้ เพื่อหาวิธีที่ดีที่สุดในการเชื่อม Stage B แบบมีเงื่อนไขกับ latent representation
สุดท้ายวิธีเอาช่องอินพุตไปต่อรวมกับ nearest-neighbor upsample ของ latent representation ตรง ๆ ให้ผลดีกว่า cross-attention สุดหรูที่ใส่ relative 2D positional embedding เลยยอมแพ้ไป
โมเดลนี้เมื่อก่อนรู้จักกันในชื่อ Würstchen v3
จะทำงานบน AMD ได้ไหม?
หาไม่เจอว่ารองรับหรือเปล่า
ผู้ใช้ที่รัน Stable Diffusion บน AMD คงเจอปัญหาประสิทธิภาพตก ดังนั้นในโปรเจกต์แบบนี้จึงเป็นฟีเจอร์ที่ค่อนข้างสำคัญ
สิ่งที่น่าประทับใจที่สุดน่าจะเป็น การบีบอัด
การบีบอัดภาพได้ 42 เท่าเป็นข้อดีมหาศาลสำหรับอุปกรณ์พกพา หรือการเชื่อมต่ออินเทอร์เน็ตที่แย่ หรือทั้งสองอย่าง
เป้าหมายคือส่งความละเอียด 8K ด้วยแบนด์วิดท์ต่ำ