ในตอนนี้เราจะมาเรียนรู้วิธีการสร้างรูปภาพใหม่จากรูปที่มีอยู่เดิม ด้วยเทคนิค Image-to-Image และการแก้ไขรูปเฉพาะบางส่วนด้วย Inpainting ใน ComfyUI กันครับ มาเริ่มกันเลย!
สารบัญ
การใช้ AI เปลี่ยนทั้งภาพ (Image to Image)
สมมติว่าเรามีรูปเดิม คือ รูปแมวตัวนี้ (คุณจะใช้รูปอะไรก็ได้นะ ไม่ต้องเป็นรูปจาก AI ก็ได้)
แล้วเราอยากใช้ AI เพื่อเปลี่ยนรูปนี้เป็นอย่างอื่น แบบเปลี่ยนทั้งรูปเลย เราจะทำยังไง?
สมมติสิ่งที่ต้องการ คือ หมาในห้องนอน เลยใส่ Positive Prompt แบบนี้
high quality realistic photo of dog in the bedroom
ก่อนอื่นเราโหลดรูปที่เข้า ComfyUI ด้วย Node ที่ชื่อว่า Load Image ก่อน ด้วยการ Browse รูปที่เตรียมไว้
ซึ่งเดิมทีรูปเรา Load Image มันจะเป็น Pixel ปกติ ซึ่งส่งเข้า K-Sampler ตรงๆ ไม่ได้ เพราะตัวนั้นมันต้องการ Latent Image (แต่ก่อนเราใช้ Empty Latent Image มาโดยตลอด)
ดังนั้นเราจะไม่ใช้ Empty Latent แล้ว แต่จะใช้ VAE Encode แปลง Image ปกติให้เป็น Latent แล้วส่งเข้าไปแทน แบบนี้ (อย่าลืมต่อ VAE จาก Load Checkpoint)
ถ้าเรา Generate ตรงๆ เลย โดยใช้ อาจได้ผลลัพธ์แบบนี้
ซึ่งภาพมันเปลี่ยนเป็นหมาในห้องนอนโดยสิ้นเชิง ดูไม่ได้เกี่ยวอะไรกับภาพแมวอันเดิมของเราเลย!?
ทั้งนี้เป็นเพราะปกติแล้ว ใน KSampler จะตั้งค่า Denoise เป็น 1.00 หรือ 100% นั่นแปลว่า จะมีการเปลี่ยนภาพอย่างรุนแรงเต็มที่ 100% ภาพมันเลยเปลี่ยนจากเดิมเยอะ
แต่ถ้าเราใส่ Denoise น้อยลง จาก 1.0 เหลือ 0.5 หรือ 50% ภาพก็จะเปลี่ยนแบบนี้ ซึ่งจะดูคล้ายภาพเดิม แมวกลายเป็นหมาแล้ว แต่เหมือนฉากหลังยังไม่เป็นห้องนอน แสดงว่า denoise ไม่พอ
แบบนี้เราก็อาจปรับ denoise ให้มากขึ้นอีกนิด เช่น 0.7 ว่าผลเป็นไง?
จะเห็ว่าคราวนี้มันกลายเป็นห้องนอนแล้ว ซึ่งถ้าเราไล่ค่า Denoise ดูหลายๆ อันแบบนี้ 0.2, 0.4, 0.6, 0.8, 1.0 จะเห็นผลชัดเลยว่ามันจะมีการเปลี่ยนแปลงมากขึ้นตามระดับการ Denoise ซึ่งผลที่ได้จะมีเค้าโครงจากภาพเดิมติดไปด้วย ยกเว้น denoise สูงมาก
และถ้าเราเปลี่ยน Parameter อื่น เช่น seed ผลที่ได้ก็จะเปลี่ยนไปอีก (แต่ denoise ต่ำก็แทบไม่เปลี่ยน เพราะมันเบามาก)
การใช้ K Sampler หลายรอบ (Pre-Diffusion)
เราสามารถใช้เทคนิคการ Gen ภาพ AI หลายๆ รอบต่อเนื่องกัน โดยใช้ K Sampler หลายตัว
โดยที่ KSampler รอบแรกไม่ต้องเอา Noise ออกทั้งหมด แต่ทำเพื่อกำหนดภาพรวมอะไรบางอย่างก่อน จากนั้นค่อย Gen ต่อจนจบ ด้วย KSampler ตัวที่ 2 โดยใช้อีก Condition นึงได้
ซึ่งเทคนิคนี้เราจะนิยมใช้ KSampler Advanced 2 ตัวต่อกัน โดยที่เราจะกำหนด Start Step, End Step ได้
สมมติว่า Gen ภาพแมวบนโซฟา แบบนี้ นี่คือ Gen จนครบตามปกติ นี่คือเรียกว่า 1 pass
photo of black and white cat on the sofa
แต่ถ้าผมเปลี่ยนเป็นใช้ K-Sampler Advanced 2 ตัวต่อกัน เรียกว่า 2 pass ผมอาจทำแบบนี้ได้ คือสั่งเปลี่ยนเป็น
photo of panda on the sea beach
การเปลี่ยนแค่บางส่วน (Inpaint)
ขั้นตอนคร่าวๆ คือ กำหนด Mask → ส่งเข้า Set Latent Noise Mask → ต่อเข้า KSampler พร้อม Prompt → ได้ภาพที่แก้ไขเฉพาะส่วน
วิธีกำหนด Mask มีหลายวิธี:
- วาดพื้นที่ Mask เอง – คลิกขวาที่รูปแล้วเลือก Open in MaskEditor แล้ววาดพื้นที่ที่ต้องการด้วยมือ
- ใช้ SAM Detector – จิ้มที่วัตถุที่ต้องการแล้วกด Detect ปรับ Confidence ให้ได้ส่วนที่ต้องการ
- กำหนดด้วย Prompt – ใช้ Node ClipSeg โดยใส่ Prompt บอกวัตถุที่ต้องการ เช่น “shirt”
เมื่อได้ Mask แล้ว สามารถปรับขยายขอบเขตเพิ่มด้วย Node Grow Mask และ Feather Mask ได้ นอกจากนี้ยังผสมผสาน Mask ทั้งแบบวาดเองและกำหนดจาก SAM เข้าด้วยกันก็ได้นะครับ
การกำหนดพื้นที่ Mask แบบ Manual
หลักการเหมือนตัวเมื่อกี๊เลย แต่ว่าเราจะใช้การระบายพื้นที่ใน Load Image แล้วใช้ Node ที่ชื่อว่า Set Latent Noise Mask เพื่อทำการส่ง Noise เฉพาะพื้นที่ที่เราระบายเข้า KSampler
วิธีการระบาย Mask ในรูปคือ คลิ๊กขวาที่รูป แล้วเลือก Open in MaskEditor จากนั้นระบายพื้นที่ตามต้องการ เช่น ผมระบายรอบๆ หัวแมว (ถ้าสีดำมองไม่เห็น ก็เปลี่ยนสี Mask ได้นะ)
- คลิ๊กซ้าย = ระบาย Mask
- คลิ๊กขวา = ลบ Mask
จากนั้นกด Save to Node
จากนั้นต่อ Node ผ่าน Set Latent Noise Mask แบบนี้ (ระหว่าง VAE Encode กับ KSampler)
แล้วใช้ Prompt ว่า
high quality realistic photo of dog
ก็จะได้ผลแบบนี้ คือมันมีการเปลี่ยนเฉพาะส่วนหัวเลย
การกำหนดพื้นที่ Mask แบบ Auto
ถ้าเราไม่อยากจะมานั่งระบาย Mask เอง เราสามารถใช้ AI มาช่วยกำหนดพื้นที่ได้ โดยที่เราจะต้องลง Custom Nodes ที่ชื่อว่า ComfyUI Impact Pack ซะก่อน (https://github.com/ltdrdata/ComfyUI-Impact-Pack)
สมมติผมขอเปลี่ยนรูปตั้งต้นเป็นผู้หญิงคนนี้บ้าง
ให้คลิ๊กขวาที่รูปที่เราโหลด แล้วเลือก Open in SAM detector
จากนั้นให้จิ้มที่เสื้อ 1 จุด แล้วกด Detect โปรแกรมจะทำการทำ Mask พื้นที่ที่เป็นผู้หญิงทั้งหมดให้เลย
ถ้าเราอยากได้แต่เสื้อ ให้กด Clear ก่อน แล้วจิ้มเสื้ออีกที แล้วเลื่อน confidence ไปขวาสุดๆ เลย เพื่อบอกว่าจะมั่นใจมากๆ ว่าได้แต่เสื้อนะ
ปรับขยาย Mask นิดหน่อย เพื่อความเนียน
แต่ถ้ารู้สึกว่าอย่าจะปรับ Mask ให้ขยายออกอีกหน่อย เพราะมันติดขอบเสื้อผ้ามากเกินไป เราก็สามารถใช้ Node เกี่ยวกับการจัดการ Mask มาช่วยได้ เช่น Grow Mask กับ Feather Mask แบบนี้
ลองเปลี่ยนเสื้อเป็นเสื้อชมพูลายดอกไม้ ซึ่งอาจต้อง denoise สูงหน่อย เช่น 0.6
high quality realistic photo of pink flower shirt
ใช้ผสมพื้นที่ Mask แบบ Auto + Manual
แต่ถ้าหากจริงๆ แล้ว เราอยากได้กางเกงด้วย เราสามารถคลิ๊กซ้ายที่บริเวณที่จะเอา (เป็นจุดสีฟ้า) คลิ๊กขวาที่บริเวณที่จะไม่เอาได้ (เป็นจุดสีแดง) กางเกง
ผมแนะนำว่าคลิ๊กเพิ่มจุดนึงให้กด Detect ทีนึง จะดีกว่า
บางทีพอได้ใกล้เคียงที่อยากได้แล้ว กดกด Save to node ออกมาก่อนได้ แล้วเราค่อย Open in Mask Editor เพื่อแก้ไขแบบ Manual อีกนิดหน่อยก็ได้
ทำ Mask ด้วย Prompt
นอกจากที่จะใช้วิธีจิ้ม หรือ Manual ระบายแล้ว เรายังสามารถทำ Mask ด้วย Prompt ได้ด้วย Custom Node ที่ชื่อว่า CLIPSeg (ปรับได้เยอะกว่า) หรือ Clipseg Masking จาก WAS Suite (ปรับได้ไม่เยอะ)
ถ้าเราเอาภาพผลลัพธ์ไปวนเข้า Load Image อีกที ภาพก็จะแรง และชัดขึ้นไปอีกได้ โดยคลิ๊กขวาที่รูปผลลัพธ์แล้ว Copy (ClipSpace) แล้วไปคลิ๊กขวาที่ Load Image แล้วเลือก Paste (ClipSpace)
จากนั้นกด Queue Prompt อีกรอบ ภาพที่ได้ก็จะชัดขึ้น
Inpaint ที่ดีกว่านี้
จริงๆ ยังมีวิธี Inpaint ที่ดีกว่านี้ แต่ว่าควรใช้ Model SDXL, ControlNet, IP Adapter เป็นก่อน ดังนั้นเดี๋ยวผมจะอธิบายอีกทีในบทต่อๆ ไปนะครับ
คลิปวีดีโอ
ตอนต่อไป
ลองนำเทคนิคเหล่านี้ไปใช้กับ ComfyUI ดูนะครับ รับรองว่าจะช่วยให้คุณสร้างรูปภาพที่สวยงามตรงใจได้แน่นอน แล้วพบกันใหม่ในบทความหน้า ที่จะมาพูดถึงการ Upscale ภาพให้มีความละเอียดสูงขึ้นครับ