หากเพื่อนๆ ใช้ Stable Diffusion ทำการ Gen รูปขึ้นมาซักพัก คุณคงรู้ว่าสิ่งหนึ่งที่สำคัญมากๆ ที่จะทำให้ภาพผลลัพธ์ออกมาสวยงามก็คือตัว Model ที่เราเลือกใช้ในการ Generate รูปนั่นเองครับ
แม้ว่าในตอนที่ 2 ผมจะได้พูดถึงวิธีการโหลด Model ใหม่ๆ ไปแล้ว แต่มันจะดีกว่ามั้ย ถ้าเราสามารถผสม Model ขึ้นมาใช้เองแบบโดนใจเราสุดๆ ได้? และมันอาจจะสามารถใช้เพื่อที่เราจะได้สร้างรูปที่ดูมีความต่างจากงานของคนอื่นได้ด้วยนะ (อันนี้ดีมากๆ)
ซึ่งในบทความนี้ผมจะมาสอนทุกคนทำการผสม Model Checkpoint ขึ้นมาใช้เองกันครับ
ขอเตือนก่อนว่า บทความนี้ถูกเขียนในสไลต์ที่ไม่เหมือนกับบทความก่อนๆ ของผมเลย เพราะมันไม่ได้เป็นการสอนมากนัก แต่เป็นการทดสอบให้ดูซะมากกว่า และเนื้อหาบางส่วนก็อาจดู Nerd สุดๆ ไปเลย ดังนั้นจะเหมาะกับคนที่อยากลงลึกด้านผสม Model โดยเฉพาะครับ
สารบัญ
รวมบทความ Stable Diffusion
- วิธีใช้งาน AI สร้างรูปสุดเจ๋งและฟรีด้วย Stable Diffusion ฉบับมือใหม่ [ตอนที่1]
- วิธีเรียกใช้งาน Model เจ๋งๆ ใน Stable Diffusion [ตอนที่2]
- วิธีสั่ง Prompt และตั้งค่าใน Stable Diffusion ให้รูปสวยโดนใจ [Part3]
- วิธีกำหนดท่าทางแบบให้ได้ดั่งใจด้วย ControlNet ใน Stable Diffusion [Part4]
- สอน Train Model ตัวเองใน Stable Diffusion [Part5]
- สอนทำรูปตัวเองคู่กับสาว ใน Stable Diffusion [Part6]
- วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7]
- เจาะลึก ControlNet ใน Stable Diffusion [Part8]
- วิธีสร้างผลงานอันน่าทึ่งด้วย Krita AI และเทคนิคต่อ iPad
- สอนใช้ ComfyUI EP01 : วิธีการติดตั้งและสร้างรูป AI แรก
- สอนใช้ ComfyUI EP02 : กระบวนการสร้างภาพ AI และ Node พื้นฐาน
- สอนใช้ ComfyUI EP04 : Image to Image และเทคนิค Smart Inpaint
- สอนใช้ ComfyUI EP05 : การ Upscale ภาพให้ใหญ่และชัดขึ้น
- สอนใช้ ComfyUI EP06 : เพิ่มพลังควบคุมภาพ AI ด้วย ControlNet
- สอนใช้ ComfyUI EP07 : ปรับปรุง Model ด้วย LoRA
- สอนใช้ ComfyUI EP08 : ยกระดับไปสู่ SDXL + เทคนิค Gen เร็วสายฟ้าแลบ
- สอนใช้ ComfyUI EP09 : IPAdapter สุดยอดเครื่องมือสั่งงานด้วยภาพ [ฉบับปรับปรุง]
- สอนใช้ ComfyUI EP10 : เปลี่ยนเสื้อผ้าให้ได้ดั่งใจ
- สอนใช้ ComfyUI EP11 : กำหนดหน้าตาแบบให้ได้ดั่งใจ
การผสมมีแบบไหนบ้าง?
ซึ่งผมจะแนะนำการผสม Model Checkpoint 2 แบบ คือ แบบ Basic ทั่วๆ ไป กับแบบ Merge Block Weight ที่จะเป็นแบบ Advance ครับ ซึ่งบอกไว้ก่อนเลยว่าถ้าใครจะทำตามก็ต้องการพื้นที่ Harddisk พอสมควรเลย เพราะ Checkpoint 1 ไฟล์ก็ประมาณ 5GB แล้ว หึหึ…
โดยผมจะใช้ Model Checkpoint ตัวอย่าง 2 อัน ที่ต่างกันโดยสิ้นเชิงมาผสมกันนั่นคือ
- ChillOutMix (Model สาวสมจริง)
https://civitai.com/models/6424/chilloutmix - MeinaMix (Model แนวการ์ตูน) ณ ตอนนี้คือ V9
https://civitai.com/models/7240/meinamix
หมายเหตุ : จริงๆ คุณจะเอา Checkpoint ไหนมาผสมกันก็ได้ ยิ่งทดลองยิ่งสนุก!
โดยเอาทั้ง 2 Model ไปไว้ใน Folder stable-diffusion-webui\models\Stable-diffusion ให้เรียบร้อยก่อนนะครับ
ผสม Model แบบ Basic
สำหรับการผสมแบบ Basic เราจะใช้เครื่องมือที่เรียกว่า Checkpoint Merger ที่มีมากับ Automatic1111 อยู่แล้วเลยครับ
ผสมแบบ Weighted SUM
โดยที่เราจะเลือกแต่ละ Model ขึ้นมาที่ Model A กับ B แล้ว เลือกอัตราส่วน Multiplier (M) ที่จะผสมซึ่งมีความหมายดังนี้
คือสูตรการผสมคือ A * (1 – M) + B * M
ดังนั้น Multiplier ก็คือ มองได้ว่า คือ อัตราส่วนของ B นะไม่ใช่ A
- ใส่ 0 คือไปทาง A 100%
- ใส่ 0.3 คือ ไปทาง A 70% (อันนี้เห็นชัด)
- ใส่ 0.5 คือ ผสมอย่างละครึ่ง (50%)
- ใส่ 1 คือ B 100%
Interpolation Method ผมเลือกแบบ Weighted Sum ก็คือให้มันเอามารวมแบบเฉลี่ยกัน และบันทึกไฟล์แบบ safetensor
แล้วผมจะตั้งชื่อไฟล์แบบนี้คือ ChillOut75MeinaMix25
แปลว่า มีChillOut75% Meina25%
ซึ่งเกิดจากการตั้ง ChillOut เป็น Model A โดยมี Multiplier เป็น 0.25 นะครับ
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 2](https://www.thepexcel.com/wp-content/uploads/2023/04/SD-Part7-001-1024x531.png)
พอกด Merge แป๊ปเดียวก็จะเสร็จเลย ไม่นานครับ (ไม่ถึง 1 นาที)
แล้วผมทำอย่างนี้อีก 2 อัตราส่วน คือ
- ChillOut50MeinaMix50 (Multiplier 0.5)
- ChillOut25MeinaMix75 (Multiplier 0.75)
พอได้ไฟล์ครบแล้วเราจะมาทดสอบผลของการ Merge Model กันครับว่าออกมาเป็นยังไง
ทำการทดสอบ
ในการทดสอบ เราจะใช้ x/y/z plot มาช่วย โดยเลือกให้เปลี่ยน checkpoint เป็น 5 ตัว คือ Chillout100%(MeinaMix 0%), 75% 50% 25%, 0%(MeinaMix 100%) ตามลำดับ
หมายเหตุ : ใน x values พยายามอย่ากดขึ้นบรรทัดใหม่นะ ไม่งั้นมันจะเอ๋อ (สร้างรูปเกิน)
เช่น ผมใส่แบบนี้
chilloutmix_NiPrunedFp32Fix.safetensors [fc2511737a],ChillOut75MeinaMix25.safetensors [589c49a4e3],ChillOut50MeinaMix50.safetensors [ab59bbccc8],ChillOut25MeinaMix75.safetensors [49a76cdc3a],meinamix_meinaV9.safetensors [eac6c08a19]
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 3](https://www.thepexcel.com/wp-content/uploads/2023/04/SD-Part7-004.png)
ในบทความนี้ผมจะใช้ Negative Prompt เหมือนกันทุกครั้ง และเป็นคำกลางๆ ที่ใช้ได้ทั้งภาพสมจริงและภาพการ์ตูน คือ
(worst quality:2), (low quality:2), (lowres, normal quality:2)
และจะใช้ Sampling Method ผมใช้ DPM++SDE Karas, Steps 20, CFG 7 และ จะใช้ seed 1234 เท่ากันหมดก่อน เพื่อความ simple
และจะเปลี่ยน Prompt และ Model ไปเรื่อยๆ (แต่จะใส่คำกลางๆ เพื่อให้ใช้ได้ทุก Model) เช่น ตอนแรกจะใช้ Prompt นี้
(best quality:1.4), (ultra highres:1.2), highest quality, highres, 1girl, (beautiful thai girl), (long hair), (in red tank top, jeans),(sit on the sofa)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 4](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0077-1234-1024x388.jpg)
ปรากฏว่าภาพออกมา จะเห็นว่าภาพคล่อยๆ เปลี่ยนจากภาพสมจริงของ Chillout100% มาเป็นภาพการ์ตูนของ Meinamix 100% ตามน้ำหนักที่เราใส่ไว้นั่นเอง
ลองเปลี่ยน Prompt ที่ทำให้ 2 Model ต่างกันมากหน่อย
ผมจะพยายามทำให้ภาพทั้ง 2 ฝั่งอาจต่างกันพอสมควร เช่น ท่าทาง มุมกล้อง รายละเอียดฉากหลัง เพื่อที่จะได้เห้นอะไรชัดเจนขึ้นเวลา Merge Model แล้ว
โดยที่ผมทำ prompt ไว้ 4 ชุด แต่ละชุด Save เป็น Styles เอาไว้ก่อน (กดรูป icon Save ที่ใกล้ๆ ปุ่ม Generate) จะได้เรียกใช้ง่ายๆ
Style = S1_BASKETGIRL
(best quality:1.4), (ultra highres:1.2), highest quality, highres, 1girl, (beautiful thai girl),looking at viewer, (short hair), (in pe uniform), (in basketball stadium:1.1)
Style = S2_GAMERGIRL
(best quality:1.4), (ultra highres:1.2), highest quality, highres, 1girl, (beautiful thai girl:1.3),(looking at viewer:1.4), (portrait shot), (ponytail hair), (gaming headphone), (high tech gaming computer:1.3), (RGB, neon color light effect:1.2), (in gaming bed room in background)
Style = S3_COFFEEGIRL
(best quality:1.4), (ultra highres:1.2), highest quality, highres, (beautiful thai girl), (as a coffee barista:1.2), (casual cloth, apron:1.1), (in coffee shop:1.3)
Style = S4_KNIGHTGIRL
(best quality:1.4), (ultra highres:1.2), highest quality, highres, (beautiful thai girl), (using two hand knight sword:1.4),(in Europe middle age full plate knight armor:1.3), ( in the battle with large group of enemy army:1.4)
แล้วผมจะใช้ xyzplot เปลี่ยนทั้ง Checkpoint Name และ Style พร้อมกันเลย (Negative เดิม) เพื่อที่จะได้เห็นภาพทุกแบบพร้อมๆ กันง่ายๆ แบบนี้
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 5](https://www.thepexcel.com/wp-content/uploads/2023/05/SD-part7N2-001.png)
ซึ่งจะ Gen รูปออกมาได้แบบนี้เลยทีเดียว
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 6](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0078-1234-921x1024.jpg)
ก็จะเห็นว่า กรณีที่ผลของทั้ง 2 ฝั่งต่างกันพอสมควร ทั้งมุมกล้องก็ต่าง รายละเอียด accessory ต่างๆ เวลา Merge ระหว่างทาง ผลมันก็สามารถเกิดความแปลกใหม่มากๆ เลย…
ดังนั้นแปลว่า Model แต่ละอัน สามารถมีวิธีการตีความ Text Prompt ของเราแตกต่างกัน เช่น จะวาดอะไรบ้าง ตรงไหน แล้ววิธีในการสร้างภาพที่ต่างกันด้วย เช่น จะวาดไสตล์ไหน
ทั้งนี้ ถ้าเป็นการ Merge แบบ Basic ก็ง่ายๆ แค่นี้แหละ หลังจากนี้เราก็สามารถเลือกอัตราส่วนที่เราชอบไปใช้ได้เลย รวมถึงยังสามารถเอาไปผสมกับ Checkpoint อื่นต่อได้อีกเรื่อยๆ ไม่มีที่สิ้นสุดครับ
แต่ถ้าจะผสม 3 Model แบบ Weighted SUM เราไม่สามารถเลือก Model A, B, C แล้วผสมพร้อมกันด้วยเครื่องมือปกติได้ เพราะ Weighted SUM จะใช้สูตร A * (1 – M) + B * M ซึ่งไม่เกี่ยวกับ C เลย
ส่วนถ้าใช้ C จะเป็นกรณี Add Difference ซึ่งอันนั้นทำงานอีกแบบนึง คือ A + (B – C) * M
ผสมแบบ Add Difference
การผสมอันนี้ถึงจะมีการใช้ Model C นะ โดยผมใส่ Model C เป็น Model การ์ตูนอันนี้ https://civitai.com/models/4468/counterfeit-v30
ลองไล่ตามนี้
ChillOut | Meina | Counterfeit | M0.25 | M0.50 | M0.75 | M1.00
ภาพที่ได้ออกมาแบบนี้ (ขอ Censor หน่อยนะ ผสมแล้วมันโป๊เฉยเลย 555)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 7](https://www.thepexcel.com/wp-content/uploads/2023/05/adddiff-1024x845.jpg)
ซึ่งผลของการใช้ Add Difference ค่อนข้างทำความเข้าใจยาก แต่ตามหลักแล้วคือ หากว่า Model B กับ C ต่างกันตรงไหน แล้ว Add ความต่างนั้นเข้าไปใน A ครับ
สรุปแบบ Basic
ซึ่งถ้าสังเกตจะเห็นว่าการผสม Model แบบ Weighted Sum (Basic) มันก็จะเอา Model A กับ B มาผสมๆ กันในภาพรวมตามอัตราส่วนหรือน้ำหนักที่กำหนด แบบที่ควบคุมเฉพาะบางเรื่องไม่ได้
แต่จะใช้แบบ Add Difference ก็ควบคุมได้ยากอยู่ดี…
แต่ถ้าเราอยากจะกำหนดแบบเจาะจงว่าอยากเอาอะไรของ Model A มาผสมกับอะไรของ Model B อันนี้ต้องผสมแบบ Advance แล้ว ถ้าสนใจก็อ่านต่อได้เลย!
ผสม Model แบบ Advance
สำหรับการผสมแบบ Advance เราจะใช้ Extension Merge Block Weighted https://github.com/bbc-mc/sdweb-merge-block-weighted-gui มาช่วย ซึ่งมันมีความสามารถในการผสม Model แบบกำหนดได้อย่างละเอียดเลยว่า ส่วนผสม Block ไหนจะใช้ของ Model ตัวไหน ซึ่งจะมีประโยชน์คือ สามารถพลิกแพลงให้เกิดภาพผลลัพธ์ที่ Merge ปกติทำไม่ได้ (หรือยาก) เช่น ทำให้โครงสร้างของรูปมาจาก Model A แต่ว่ารายละเอียดวิธีวาดมาจาก Model B เป็นต้น
หมายเหตุ : จริงๆ มี Extension อีกตัว คือ SuperMerger ( https://github.com/hako-mikan/sd-webui-supermerger.git ) ซึ่งตัวนี้จะปรับแต่งได้เยอะมาก แต่ผมกลัวคนอ่านจะงง ขอเอาตัว Weight ปกติให้ดูก่อนนะ ไว้ตอนต่อๆ ไปจะเล่น Super Merger ให้ดูอีกที
บอกก่อนว่าสำหรับการผสมแบบ Merge Block นี้ผมเองก็ยังไม่ได้รู้อะไรลึกมาก แต่จะขอ “อาสาช่วยทำการทดสอบ” ลองผสม Model แล้ว Gen ออกมาให้ดูหลายๆ แบบ แล้วให้เพื่อนๆ ช่วยกันสังเกตแล้วกันว่ามันทำงานยังไงกันแน่ ถ้าใครได้ข้อสรุปอะไรดีก็ฝากบอกด้วยนะ
ก่อนอื่นให้ไปลง Extension ให้เรียบร้อยก่อน แล้วจะมี Tab Merge Block Weighted โผล่ขึ้นมา
แต่มันจะมีอะไรให้เลือกเยอะแยะไปหมดเลย อย่าเพิ่งตกใจ เราจะค่อยๆ มาทำความเข้าใจกระบวนการ Gen รูปกันให้ละเอียดขึ้นก่อน
ทบทวนกระบวนการ Gen รูปในเชิงเทคนิค
ภาพนี้สรุปกระบวนการ Gen รูปของ Stable Diffusion ไว้ดีมาก
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 8](https://www.thepexcel.com/wp-content/uploads/2023/05/stable-diffusion-unet-steps-1024x549.png)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 9](https://www.thepexcel.com/wp-content/uploads/2023/05/stable-diffusion-denoising-steps-latents-1024x536.png)
เราจะพบว่ากระบวนการที่เปลี่ยน Noise ให้เป็นรูปนั้น จะค่อยๆ เปลี่ยนทีละ Step และในแต่ละ Step ก็จะมีสิ่งที่เรียกว่า U-Net ในการช่วยเปลี่ยนรูปที่มี Noise ให้เป็นรูปที่สมบูรณ์ (Noise น้อยลง) มากขึ้นเรื่อยๆ
ซึ่ง U-Net แต่ละตัว นั้นมีโครงสร้างประมาณนี้ (ซึ่งตามโครงสร้างแล้วมันเหมือนรูปตัว U ก็เลยเรียกว่า U-Net ไง)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 10](https://www.thepexcel.com/wp-content/uploads/2023/05/unet.png)
อะไร คือ In-Out??
ก่อนอื่น เจ้า In-Out พวกนี้คือส่วนหนึ่งของสิ่งที่เรียกว่า U-Net (ผู้สร้างรูป)
โดยอยากให้ลองดูภาพนี้ก่อนว่า In-Out แต่ละตัว ความหมายคร่าวๆ หมายถึงอะไร?
ถ้าไล่จากซ้ายไปขวา
- ช่วง In คือ การพยายามบีบอัด (Down Sampling) ให้ภาพอยู่ในรูปแบบที่เล็กลง (ตรงกลาง) นั่นคือมันพยายามเก็บข้อมูลจากรูปใน Step ก่อนหน้า
- Middle (M00) คือ ข้อมูลที่ถูกเก็บไว้จนอยู่ในขนาดที่เล็กที่สุด
- ช่วง Out ทำการแปลงรูปขึ้นมาใหม่จนใหญ่และละเอียดขึ้น (Up Sampling) ในตอนหลัง ซึ่งมองได้ว่าขั้นตอน Out มีหน้าที่หลักในการสร้างรูปขึ้นมานั่นเอง
สิ่งสำคัญคือ Step การทำงานมันวิ่งจากซ้ายไปขวาแล้วผ่านทุก Block นั่นคือ
Block IN00 -> IN01 -> IN02 -> … -> IN11 -> M00 -> OUT00 -> OUT01 -> OUT11
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 11](https://www.thepexcel.com/wp-content/uploads/2023/04/kCHMxCE-1024x793.png)
ถ้าเรา Gen ภาพ 20 Steps แปลว่า มันผ่าน U-Net แบบนี้ 20 รอบ แต่ละรอบจะค่อยๆ มี Noise น้อยลงเรื่อยๆ นั่นเอง
อะไรคือ Base Alpha
Base_Alpha คือตัวตัดสินใจว่าจะใช้ Text Encoder ของ Model ไหน โดยที่มันคล้ายๆ กับเป็นคนแปลข้อมูลจาก Text Prompt, Tag ต่างๆ แล้วไปอธิบายให้กับนักวาด (U-Net) อีกที
- 0 = ใช้ Model A 100%
- 1 = ใช้ Model B 100%
- ถ้าใส่เป็นอัตราส่วน ก็จะใช้ text encoder ผสมกัน (ผมลอง 0.5 ให้ดู)
ซึ่งในทางเทคนิค ข้อความใน Text Prompt จะถูกแปลงเป็น Text Embedding แล้วเอามาใช้ในการเหนี่ยวนำ Noise ที่เกิดขึ้น (เรียกว่าใส่ Attention เข้าไป) เพื่อให้มันสร้างรูปที่ตรงกับ prompt ที่เราสั่งอีกที คล้ายๆ แบบนี้
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 12](https://www.thepexcel.com/wp-content/uploads/2023/05/unet-with-text-steps-v2-1024x462.png)
เอาล่ะ พอเข้าใจภาพรวมแล้ว เรามาลองทำสอบกันว่าถ้าเปลี่ยน Base Alpha (Text Encoder) จะเกิดอะไรขึ้น?
ก่อนอื่น ผมจะลองผสม ChillOut กับ Meina แบบ 50:50 นั่นคือไม่ปรับ in-out เลย ให้มันเป็น 0.5 ทั้งหมด (กด Clear Values ได้)
และเลือก Base Alpha เป็น 0, 0.5 และ 1 ดูก่อนว่าผลเป็นยังไง (ในรูปเลือก 0)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 13](https://www.thepexcel.com/wp-content/uploads/2023/04/SD-Part7-005-1024x484.png)
จากนั้น ลองผสมเพิ่มแบบให้ base alpha ตรงข้ามกับตัวปกติ ซึ่งเราเลือก Preset ได้นะ ไม่ต้องไปเลื่อน in-put เอง
- ผสม Model A กับ B แต่ให้มาทาง A100% (preset = All_A) แต่ Base Alphaเป็น 1 (กลับทิศ)
- ผสม Model A กับ B แต่ให้มาทาง B100% (preset = All_B) แต่ Base Alphaเป็น 0 (กลับทิศ)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 14](https://www.thepexcel.com/wp-content/uploads/2023/04/SD-Part7-006-1024x368.png)
ลองใช้ xyz plot แบบนี้ คือลองทั้ง base alpha 0 กับ 1 สลับกันไป
chilloutmix_NiPrunedFp32Fix.safetensors [fc2511737a],ChillOut100MeinaMix0Alpha1.safetensors [8f99e17e7a],ChillOut50MeinaMix50Alpha0.safetensors [625d2d6c2e],ChillOut50MeinaMix50Alpha05.safetensors [9b6fa7bf57], ChillOut50MeinaMix50Alpha1.safetensors [589ccfafc8],ChillOut0MeinaMix100Alpha0.safetensors [afeb25b6f7],meinamix_meinaV9.safetensors [eac6c08a19]
เอามา Gen รูป จะได้แบบนี้
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 15](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0079-1234-1024x845.jpg)
ซึ่งเอาตามตรง ผมก็ยังไม่เข้าใจ effect ของ base alpha มากนัก แต่ที่เห็น คือ
- การใช้ base alpha 0.5 และทุกอย่างทั้ง in และ out เป็น 0.5 หมด จะได้ผลเหมือนกับ Basic Merge ที่ weight 0.5
- การเลือกเอาทาง Model ซักอัน 100% แต่เอา base alpha จากอีก Model นึง ก็ได้ผลลัพธ์ที่เปลี่ยนไปเช่นกัน
- ดังนั้นแค่ base alpha ที่เปลี่ยนไปก็มีผลต่อรูปที่ออกมาแล้ว ก็เป็นเรื่องที่น่าทดลองเล่นดูนะครับ (หลายๆ อันก็ออกมาน่าสนใจมาก)
ลองปรับ IN-Out แบบละเอียด
ที่นี้ความหมายของแต่ละ block นั้นคืออะไร? ก็มีคนพยายามจะทำการทดสอบและทำความเข้าใจ ซึ่งเค้าก็บอกกันว่ามันประมาณนี้
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 16](https://www.thepexcel.com/wp-content/uploads/2023/05/ME160BD6_o-1024x456.png)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 17](https://www.thepexcel.com/wp-content/uploads/2023/05/ME160CG1_o-1024x320.png)
ซึ่งจะเป็นจริงรึเปล่า ผมจะลองทดสอบให้ดูด้วยว่าผล (ในกรณีของผม) เป็นยังไงครับ
ลองใช้ Preset ที่มีอยู่แล้ว
แม้จะบอกว่าปรับละเอียด แต่เราสามารถจะเลือกใช้ Preset ที่มีมาให้ได้ครับ ความหมายของ Preset แต่ละตัวดูได้ที่นี่ (สีน้ำเงิน =Model A , สีแดง =Model B)
ผมขอลองนำเสนอ ตัวที่เรียกว่า กับ WRAP16 ให้ดูครับ
WRAP16
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 18](https://www.thepexcel.com/wp-content/uploads/2023/04/wrap16.png)
สมมติผมเลือก Preset Wrap16 แล้วใส่ A=ChillOut, B=MeinaxMix, Base alpha เป็น 0 ด้วยจะได้แบบนี้ (ผมตั้งชื่อ model ว่า ChillOutMeinaMixWrap16_Alpha0 )
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 19](https://www.thepexcel.com/wp-content/uploads/2023/05/Part7-new-004-1024x360.png)
พอเลือก Preset Wrap16 แล้ว Slider จะเปลี่ยนโดยอัตโนมัติ ตามรูป diagram ข้างบน (ผมเอามาแปะให้ดูจะได้ชัดๆ)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 20](https://www.thepexcel.com/wp-content/uploads/2023/05/Part7-new-005-1024x482.png)
ถ้าเราเลือก WRAP16 แบบนี้ แล้วลองเปลี่ยน base alpha ให้ดูทั้ง 0, 0.5,1
โดยเปลี่ยน checkpoint แบบนี้
chilloutmix_NiPrunedFp32Fix.safetensors [fc2511737a],ChillOutMeinaMixWrap16Alpha0.safetensors [245b5ab42e],ChillOutMeinaMixWrap16Alpha05.safetensors [c17d50da91],ChillOutMeinaMixWrap16Alpha1.safetensors [107b4c09c6],meinamix_meinaV9.safetensors [eac6c08a19]
ผลที่ได้เป็นแบบนี้ คือจะเห็นว่าแทบจะสลับ Composition กับรายละเอียดวิธีวาดภาพกันเลย (แต่รูป Gamer ไม่เห็นผลเท่าไหร่)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 21](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0080-1234-921x1024.jpg)
ทดสอบ Rev_SmoothStep*2
คราวนี้ ผมลองใช้ Rev_SmoothStep*2 ว่าถ้าเป็นรูปแบบคล้ายกัน แต่มีการไล่ Weight ระหว่างทางด้วยผลจะเป็นแบบไหน?
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 22](https://www.thepexcel.com/wp-content/uploads/2023/04/revsmoothx2.png)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 23](https://www.thepexcel.com/wp-content/uploads/2023/05/Part7-new-006-1024x482.png)
จะได้ผลแบบนี้ ซึ่งผมมองว่ามีการผสมผสานบางอย่างกันมากขึ้น
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 24](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0081-1234-921x1024.jpg)
จะเห็นว่า พอใช้ preset ที่มีการไล่ weight ภาพมันจะดูผสมผสานระหว่าง 2 model มากขึ้น เช่นในเคสที่เป็นภาพสมจริง + anime ผสมกันก็จะดูเป็น 2.5D มากขึ้น ถ้าใครชอบแบบนี้ก็น่าจะเล่นพวก preset ที่มีการไล่ weight ครับ
ทำการทดลองปรับ In-Out ทีละส่วน
หากเราปรับ In Out หลายเรื่องพร้อมกันมากเกินไป เราก็จะไม่เข้าใจว่าจริงๆ แล้วแต่ละอันมันทำอะไรกันแน่… ดังนั้นเราจะมาลองค่อยๆ ปรับทีละน้อยๆ ลงหน่อย ซึ่งมันมีทั้งหมด 25 block (ฝั่งละ 12×2 ฝั่ง + กลางอีก 1) ดังนั้นผมจะปรับทีละ 4 block แล้วกัน เพื่อที่จะได้ทำความเข้าใจได้มากขึ้น (ใครขยันจะลองทำทีละ Block เลยก็ได้นะ…)
ซึ่งเราจะทดลองให้ทุก Parameter เป็น 0 ให้หมด (คือเป็น A 100%) แล้วค่อยๆ ปรับทีละส่วนเป็น B 100% โดยที่ผมจะใช้ base alpha เป็น 0.5 แล้วกัน จะได้ไม่ต้อง Gen เยอะมากจนเกินไป (เพราะมันจะดูกลางๆ ระหว่าง 0 กับ 1) เอาล่ะ เริ่ม!
ปรับช่วงปลายทั้งสองข้างของ U-Net IN 00-03 และ OUT 08-11 เป็น B 100%
ผมมีลองใส่ M00 ไปด้วยอีกอัน ดูว่ามีผลหรือไม่ เรียงดังนี้
ChillOut | IN 00-03 | Out 08-11 |
IN 00-03 และ Out 08-11 | IN 00-03 และ M00 และ Out 08-11 | MeinaMix
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 25](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0082-1234-1024x970.jpg)
สรุปความเห็น
เท่าที่ดูแล้ว โดยรวม ค่าช่วงปลายทั้งสองข้างของ U-Net (IN 00-03 และ OUT 08-11) ไม่เกี่ยวกับ Composition แน่นอน เพราะถึงแม้จะปรับเป็น B แล้ว ภาพยังค่อนข้าง Compose เหมือน Model A อยู่จริงๆ
ดังนั้นที่มีคนบอกว่าช่วงปลายทั้งสองข้างของ U-Net นี้มันเกี่ยวกับราบละเอียดของภาพก็น่าจะมีความถูกต้องอยู่
ปรับช่วง IN 04-07 และ OUT 04-07 เป็น B 100%
ChillOut | IN 04-07 | Out 04-07 |
IN 04-07 และ Out 04-07 | IN 04-07 และ M00 และ Out 04-07 | MeinaMix
กรณี Base Alpha เป็น 0
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 26](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0090-1234-1024x970.jpg)
กรณี Base Alpha เป็น 0.5
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 27](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0083-1234-1024x970.jpg)
กรณี Base Alpha เป็น 1
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 28](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0091-1234-1024x970.jpg)
ปรับช่วง IN 08-11 และ OUT 00-03 เป็น B 100%
มันก็คือส่วนกลับของ Wrap16 นั่นเองครับ มาลองกัน
ChillOut | IN 08-11 | Out 00-03 |
IN 08-11 และ Out 00-03 | IN 08-11 และ M00 และ Out 00-03 | MeinaMix
กรณี Base Alpha เป็น 0
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 29](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0092-1234-1024x970.jpg)
กรณี Base Alpha เป็น 0.5
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 30](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0084-1234-1024x970.jpg)
แบบพิสดาร : กลุ่ม SmoothStep/3
ลองใช้ Preset = SmoothStep/3 และ Reverese Smooth Step/3 ดูครับ
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 31](https://www.thepexcel.com/wp-content/uploads/2023/05/smoothstepdiv3.png)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 32](https://www.thepexcel.com/wp-content/uploads/2023/05/revsmoothstepdiv3.png)
ChillOut | SmoothStep/3 | Reverse SmoothStep/3 | MeinaMix
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 33](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0088-1234-761x1024.jpg)
แบบพิสดาร : กลุ่ม True Cubic Hermite
ใช้ Preset = True Cubic Hermite และ True Reverse Cubic Hermite
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 34](https://www.thepexcel.com/wp-content/uploads/2023/05/true-cubic-herm.png)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 35](https://www.thepexcel.com/wp-content/uploads/2023/05/true-rev-cubic-herm.png)
ChillOut | True Cubic Hermite | True Reverse Cubic Hermite | MeinaMix
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 36](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0089-1234-761x1024.jpg)
ปรับช่วง OUT ทั้งหมด เป็น B 100%
คราวนี้เรามาทดสอบ IN เป็น A แต่ Out ทั้งแถบเป็น B กันบ้าง
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 37](https://www.thepexcel.com/wp-content/uploads/2023/05/ou12.png)
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 38](https://www.thepexcel.com/wp-content/uploads/2023/05/out12_5-1.png)
ซึ่งจะคล้ายกับ Preset OUT12 กับ OUT12_5 แต่ผมจะทำให้ M00 เป็น B100% เพิ่มอีกอัน
กรณี Base Alpha เป็น 0
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 39](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0086-1234-921x1024.jpg)
กรณี Base Alpha เป็น 0.5
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 40](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0085-1234-921x1024.jpg)
กรณี Base Alpha เป็น 1
![วิธีผสม Model สูตรผสมแบบโดนใจใน Stable Diffusion [Part7] 41](https://www.thepexcel.com/wp-content/uploads/2023/05/xyz_grid-0087-1234-921x1024.jpg)
ข้อสรุปแบบ Block Merge
เป็นการสรุปจากการสังเกต (จะมาเพิ่มเรื่อยๆ ถ้าผมได้ข้อสรุปที่ค่อนข้างชัดเจน เพื่อนๆ ก็ช่วยสังเกต ช่วยทดสอบ แล้วมาบอกกันได้นะ ^^)
- IN เลขเยอะ เช่น IN08-11 เกี่ยวข้องกับ Composition โดยรวม
- Out ช่วงกลาง เช่น Out04-07 เกี่ยวข้องกับการวาด subject หลัก เช่นตัวละคร
Leave a Reply to สอนใช้ ComfyUI EP09 : IPAdapter สุดยอดเครื่องมือสั่งงานด้วยภาพ – Thep Excel Cancel reply