AI สร้างภาพจากข้อความได้อย่างไร ฉบับเข้าใจง่าย + Demo ทดลองเล่น [VQGAN-ThCLIP]

Purich Siritip
3 min readJun 21, 2022

--

ในสมัยที่ภาพเป็นสื่อสำคัญ การเลือกรูปให้สอดคล้องกับข้อความที่ต้องการจะสื่อเป็นสิ่งที่สำคัญยิ่งเพื่อเพิ่มความน่าสนใจให้กับตัวข้อความ เราจึงหลีกเลี่ยงไม่ได้ที่จะต้องหาภาพที่เหมาะสมกับบทความนั้น ๆ บางทีเมื่อหาเจอแล้วภาพนั้นก็ติดลิขสิทธิ์หรือถ้าโชคร้ายหน่อยก็ไม่มีภาพที่เราต้องการเลย มันจะดีแค่ไหนกันถ้าเรากรอกข้อความที่เราอยากได้เป็นรูปแล้ว AI สร้างให้ได้ตามความต้องการเลย

ภาพของภูเขาสีเทาอยู่ตรงกลาง ภูเขาสีฟ้าอยู่ด้านบนและข้าง ๆ มีภูเขาสีน้ำตาล
“ภูเขา” วาดโดย AI

AI สร้างรูปตามคำบอกได้จริงเหรอ!

ต้องขอบอกเลยครับว่าจริง และแต่ละรูปที่ AI สร้างนั้นก็สวยมาก ๆ จนแยกไม่ออกแล้วว่าอันไหนเป็นภาพจริงอันไหนเป็นภาพสร้างขึ้นกันแน่ ด้วยความที่งานด้านนี้เติบโตเร็วอย่างมากจึงทำให้เกิดเทคนิคใหม่ ๆ ขึ้นอย่างมากมาย วันนี้ผู้เขียนจะมานำเสนอหนึ่งเทคนิคที่เข้าใจง่ายและให้ผลลัพธ์ที่พึงพอใจอีกด้วย เทคนิคนั้นชื่อว่า VQGANxCLIP ซึ่งประกอบไปด้วย 2 ส่วนหลัก ๆ ก็คือ

  • VQGAN
  • CLIP
รูปที่สร้างจาก Imagen พัฒนาโดย google, Source

VQGAN (Vector Quantized Generative Adversarial Networks) — ผู้วาดที่ไม่รู้จุดประสงค์

พออ่านชื่อกันแล้ว หลายๆคนก็น่าจะมีความคิดว่า “กดออกดีมั้ยนะ ชื่อยากจัง” เชื่อเถอะครับ ผู้เขียนก็คิดไม่ต่างกัน (ฮา) แต่ผู้เขียนได้พยายามทำความเข้าใจละย่อยออกมาให้เข้าใจง่ายแล้ว มาลองอ่านกันต่อดูครับ

เพื่อความเข้าใจง่ายผู้เขียนจะขออธิบาย GAN โดยอ้างอิงการอุปมาจากบทความ 8 years of GAN history explained in 5 minutes

GAN ประกอบด้วยโมเดล 2 ตัวที่แข่งกันเพื่อพัฒนาตัวเอง โมเดล 2 ตัวนั้นคือ Generator และ Discriminator โดยเราจะเปรียบ Generator ให้เป็นคนสร้างแบงค์ปลอม ส่วน Discriminator เป็นคนที่คอยตรวจสอบแบงค์ปลอม เริ่มแรกคนสร้างแบงค์ปลอมก็จะพยายามสร้างแบงค์ปลอมออกมาเพื่อหลอกให้ผู้ตรวจสอบคิดว่าเป็นของจริง แต่ถ้าผู้ตรวจสอบจับได้ว่าเป็นของปลอม คนสร้างแบงค์ปลอมก็จะกลับไปแก้ตรงส่วนที่ทำให้ผู้ตรวจสอบจับได้ว่าเป็นแบงค์ปลอม ในขณะเดียวกันผู้ตรวจสอบก็จะได้รับทั้งแบงค์จริงกับแบงค์ปลอมและต้องเรียนรู้ที่จะแยกให้ได้ สองโมเดลนี้จึงต้องแข่งกันและพัฒนาไปพร้อม ๆ กัน เมื่อ Generator พัฒนาจน Discriminator ไม่สามารถจับผิดได้แล้วเราจึงจะนำ Generator ไปสร้างภาพเสมือนขึ้นมา

ภาพประกอบการทำงานของ GAN, Source

ขั้นกว่าของ GAN ด้วย VQGAN

VQGAN จะพิเศษกว่า GAN ตรงที่จะได้รับสมุดเอาไว้จดวิธีการสร้างสิ่งต่าง ๆ ตั้งแต่ตอนที่เริ่มเรียนรู้รูปภาพ โดยก่อนที่จะเริ่มแข่งกันเหมือน GAN ธรรมดา VQGAN
จะได้ดูรูปและพยายามจดวิธีการสร้างสิ่งต่าง ๆ เอาไว้ก่อน เช่น ต้นไม้ ท้องฟ้า ภูเขา แม่น้ำ (ของจริงเป็นเพียงตัวเลขหลาย ๆ ตัวรวมกัน ไม่ใช่ภาพจริงแต่อย่างใด) หลังจากนั้นจึงเริ่มแข่งกันเหมือน GAN

ข้อดีของ VQGAN

  • สามารถสร้างรูปที่ไม่มีโครงสร้างได้ดีเช่น ภาพทิวทัศน์ ซึ่งคือสิ่งที่เราต้องการ

อย่างที่กล่าวไปข้างต้นว่า VQGAN เป็นเหมือนผู้วาดที่ไม่รู้จุดประสงค์เพราะการสร้างรูปแต่ละรูปนั้นเกิดจากการสุ่มกลุ่มของตัวเลขหลาย ๆ ตัวออกมาแล้วส่งไปให้ Generator สร้าง เราจึงรู้เพียงว่าถ้าสุ่มออกมาแล้วเป็นแบบนี้จะได้รูปแบบนี้แต่เราไม่มีทางรู้ได้เลยว่าจะสุ่มอย่างไรให้ได้รูปตามที่เราต้องการ ไม่ต้องกังวลไปสิ่งที่จะช่วยแก้ปัญหานี้อยู่ในย่อหน้าถัดไปแล้ว!

ภาพที่สร้างโดย VQGAN, Source

CLIP (Contrastive Language–Image Pre-training) — พระเอกที่ทำให้ข้อความกลายเป็นภาพ

CLIP เป็นโมเดลแมชชีนเลิร์นนิ่งประเภทหนึ่งที่เราสามารถให้ข้อความหลาย ๆ อันกับภาพหนึ่งภาพแล้วตัวโมเดลจะทำนายคำที่สอดคล้องกับภาพนั้นที่สุดออกมาหรือจะทำกลับกันคือให้ภาพหลาย ๆ ภาพกับข้อความหนึ่งอันแล้วให้โมเดลทำนายภาพที่สอดคล้องกับข้อความที่สุดก็ได้

CLIP ได้ชื่อว่าเป็นสะพานเชื่อมระหว่างภาพและข้อความเพราะสามารถทำให้ภาพและข้อความอยู่ในมิติเดียวกันได้ จะขอยกตัวอย่างโดยใช้ 2 รูปและ 1 ข้อความคือรูปของสุนัขกับแมวและข้อความ ”แมว” CLIP จะทำการแปลงภาพและข้อความให้มีลักษณะเหมือนกัน ในที่นี้ขอสมมติให้แปลงแต่ละอย่างเป็นเลขสองจำนวน ดังนั้นเมื่อแปลงข้อความ ”แมว” ให้เป็นตัวเลขแล้วก็จะได้ [0.2, 0.8] (เลขสมมติ) ในขณะเดียวกันเมื่อแปลงภาพของแมวและสุนัขจะได้ [0.18, 0.83], [0.7, 0.3] (เลขสมมติ) ตามลำดับ จะเห็นได้ว่าข้อความ ”แมว” และภาพของแมวมีลักษณะใกล้เคียงกัน หลังจากนี้เราจึงสามารถหาความใกล้เคียงกันได้โดยใช้วิธีทางคณิตศาสตร์ไม่ว่าจะเป็น Euclidean distance, cosine similarity หรือ squared great circle distance เป็นต้น ซึ่งผู้เขียนขอไม่อธิบายเพราะจะทำให้บทความยาวเกินไป

ภาพประกอบการวิธีการทำงานของ CLIP

เนื่องด้วย CLIP ทำได้เพียงบอกว่ารูปนี้กับคำนี้สอดคล้องกันแค่ไหนเท่านั้นจึงไม่สามารถทำหน้าที่ได้เกินผู้กำกับ เอ๊ะ! แต่เหมือนเราจะมีคนที่วาดรูปเก่ง ๆ แต่ไม่รู้ว่าต้องวาดอะไรอยู่นะ ถ้าสองคนนี้มาเจอกันจะเป็นยังไง

เพิ่มเติม

  • CLIP โดยทั่วไปจะแปลงเป็นกลุ่มตัวเลข 512 จำนวน
  • ตัวแปลงภาพและข้อความเป็นเลขคือคนละตัวกัน ตัวแปลงภาพจะเรียกว่า Image encoder ส่วนข้อความจะเรียกว่า Text encoder

VQGANxCLIP — เมื่อผู้วาดและผู้กำกับมาเจอกัน

ดังที่กล่าวไปว่า VQGAN นั้นสร้างรูปจากการสุ่มตัวเลขมากลุ่มหนึ่ง (จำนวนของตัวเลขแปรผันกับความละเอียดของภาพ) ซึ่งเราไม่รู้เลยว่าตัวเลขแต่ละตัวนั้นทำให้อะไรในรูปเปลี่ยนไปบ้าง จึงต้องมีคนคอยกำกับและเปลี่ยนตัวเลขเหล่านี้เพื่อให้กลายเป็นรูปที่เราต้องการ CLIP จึงเหมาะกับหน้าที่นี้อย่างดีเยี่ยม

รูปต่อไปเป็นรูปส่วนหนึ่งจากโปรเจกต์ VQGAN-ThCLIP ที่ผู้เขียนพัฒนาขึ้นมา

รูปส่วนหนึ่งจากโปรเจกต์ VQGAN-ThCLIP

ทดลองเล่น Demo ให้โมเดลสร้างภาพให้

สามารถเข้าไปเล่นได้ที่ลิ้งก์นี้เลย เป็นโปรเจกต์ที่ผู้เขียนทำขึ้นมาเองภายใต้โครงการ ai builders วิธีการมีดังนี้

  1. เมื่อเข้าไปแล้วให้ทำการ Sign in โดยใช้บัญชี Google

2. เมื่อ Sign in เสร็จแล้วให้กด Runtime -> Run all แล้วรอให้โค้ดรันสักพัก

3. เลื่อนไปด้านล่างสุดแล้วรอจนโค้ดขึ้น url แล้วกดที่ url (url ของแต่ละคนจะไม่เหมือนกัน)

4. เว็บจะเตือนว่าให้ระวังการโดนหลอกถามข้อมูล แต่เว็บของผู้เขียนไม่มีการถามข้อมูลใด ๆ กด Click to Continue ได้เลย

5. หลังจากนั้นพิมพ์คำที่ต้องการให้ AI สร้างแล้วกด Let’s generate! ได้เลย (สามารถเพิ่มสไตล์ของภาพและปรับแต่งโมเดลได้โดยการกดขยายแต่ละส่วน)

ปล. ถ้าเว้นวรรคแล้วเติมคำว่า “ภาพสวย” ภาพจะสวยขึ้นจริง ๆ!

อ่านต่อ : โครงการ AI builders กับ AI สร้างภาพจากข้อความสร้างโดยเด็กมัธยมปลาย (ที่เกือบจะขึ้นปี 1)

Github : https://github.com/vikimark/VQGAN-ThCLIP

--

--