Notifications
Clear all

Diffusion & GANS

14 ข้อความ
1 Users
0 Likes
34.7 K Views
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 400
Topic starter  

"AI ไม่ชอบคน!!!" งานที่น่าสนใจจาก ICCV 2019 แบบย่อตอนที่ 4. 

สวัสดีครับเพื่อนๆ วันนี้ขอเล่าอีกงานที่เรียกเสียงฮือฮาในงานประชุมวิชาการ Computer Vision ที่ใหญ่ที่สุดในโลก ICCV 2019 อีกครั้งนะครับ  งานนี้เป็นงานจากแล็บของ MIT ร่วมกับมหาวิทยาลัยฮ่องกงที่นำเสนอมุมมองที่น่าสนใจมากๆ ว่า "AI ไม่ชอบคน" ครับ 

โมเดล AI ที่กล่าวถึงนี้จริงๆ แล้วจำเพาะเจาะจงถึงโมเดล "GANs" (Generative Adversarial Networks) ที่สามารถสร้างรูปเสมือนจริง รวมทั้งรูปภาพปลอมต่างๆ ที่ปรากฏตามข่าวต่างๆ อย่างแพร่หลาย จากพลังของ GANs ที่ปรากฏตามข่าวต่างๆ  (ดูรูปแนบแสดงภาพที่สร้างโดย BigGAN ซึ่งเป็นภาพที่ไม่มีอยู่จริง) 

อย่างไรก็ตามนักวิจัยจาก MIT ในงานนี้ตั้งคำถามที่แตกต่างไปจากงานก่อนหน้าที่พยายามทำความเข้าใจ "ภาพที่ GANs สามารถสร้างได้" มาเป็น "วัตถุอะไรที่ GANs  ไม่ชอบวาด" แทน 

อะไรคือความหมายของ "วัตถุที่ GANs ไม่ชอบวาด"  

นักวิจัยทีมนี้มีกระบวนการในการวิเคราะห์สิ่งที่ GANs ไม่ชอบวาดดังนี้ครับ 

  1. นำ Datasets ชุดที่มี Objects หลากหลายชนิดมาสอน GANs จนเก่ง (โดย Dataset ที่เลือกมาคือ LSUN และโมเดล GANs ที่เลือกล้วนเป็นโมเดลชั้นนำเช่น ProgressiveGANs หรือ StyleGANs เป็นต้น) 
  2. ให้ GANs ที่ฝึกสอนจนเก่งเหล่านี้มา Generate รูปภาพจำนวนมาก (ดังเช่นรูปแนบรูปแรก) 
  3. นำ Segmentation models มา Detect Objects ที่ปรากฏใน Datasets ต้นฉบับและ Detect Objects ที่ปรากฏในภาพปลอมที่ GANs สร้างขึ้นมา และเก็บสถิติ Object Distribution ของทั้งสองเซ็ต 
  4. เปรียบเทียบ Object Distributions ของ Dataset จริงและ Object Distribution ของภาพทั้งหลาย ซึ่งได้ผลตามรูปแนบที่สองครับ 

ซึ่งจากรูปจะเห็นว่า GANs นั้นมีพฤติกรรมที่จะวาดรูป ตึกและอาคาร (Building) มากผิดปกติ และมีแนวโน้มที่จะวาดรูปของ "คน" (และวัตถุเช่นรถยนต์) น้อย” ผิดปกติ ซึ่งทางทีมวิจัยยังไม่หยุดแค่นี้ ในขั้นตอนไปทีมวิจัยอยากจะเห็นชัดๆ ว่า "ภาพวาดที่ควรมี Object เช่น คน แต่ GANs ไม่ยอมวาด" เป็นภาพวาดอย่างไรกันแน่ 

และนีเป็นที่มาของสไลด์ทีเรียกเสียงฮือฮา "GANs ไม่ชอบคน" ครับ ? ดูรูปแนบที่่ 3 

สิ่งที่ทีมวิจัยทำคือสร้างกระบวนการ “Reverse Drawing” (รูปแบบที่ 4) โดยการเข้าใจกระบวนการนี้ต้องขอทวนพื้นฐานของ GANs ก่อนว่า โดยปกติ GANs จะรับ input เป็น (random) vector z แล้ววาดภาพ (ปลอม) ขึ้นมา ดั่งที่แสดงในครึ่งซ้ายของ Step 1, รูปภาพที่ 4. 

จากนั้นทีมวิจัยสร้างกระบวนการ “Reverse Drawing” (รูปที่ 4) ดังนี้ 

 

  1. สร้าง Auto Encoder จาก GANs (Step1 ฝั่งขวาในรูปที่ 4) นั่นคือสร้าง Networks ที่เปลี่ยนภาพปลอมกับไปเป็น Vector z’ (ที่พยายามให้คล้าย input vector z มากที่สุด) 
  2. เลือกภาพจริงใน Dataset LSUN (ต้นฉบับ) ที่มี "คน" อยู่ด้วยและเข้า Auto Encoder ใน step 1 เพื่อให้ได้ vector z’ และนำ vector z’ ไปเข้า GANs เพื่อให้พยายามวาดเลียนแบบภาพจริง (step 2 ในภาพที่ 4) 
  3. Optimize GANs ให้พยายามวาดให้เหมือนภาพต้นฉบับมากที่สุด (step 3 ในภาพที่ 4) 

 

เมื่อผ่านกระบวนการทั้ง 3 steps แล้วเราก็จะสามารถสั่งให้ "Reverse Drawing" GANs พยายามวาดภาพเลียนแบบภาพต้นฉบับให้ได้มากที่สุดนั่นเอง (ไดอะแกรมเดียวกันกับ Step 2 ในภาพที่ 4) 

 

สั่งให้ GANs วาดภาพที่ ‘’ต้องมีคน” แต่ ”GANs ไม่ยอมวาดคน”  

และเมื่อเราสั่งให้ Reverse Drawing GANs วาดภาพเลียนแบบต้นฉบับที่มีคนหลายๆ ภาพ ผลปรากฏที่ได้ก็เป็นดั่งเช่นในรูปที่ 3 ครับ นั่นคือ คนหายไปจากภาพ!!!! นั่นคือ GANs ไม่ยอมวาดรูป "คน" 

 

ในความจริงแล้ว Dataset LSUN ที่ใช้ฝึกสอนในงานวิจัยนี้เน้นอาคารก่อสร้าง หรือห้องต่างๆ เป็นหลัก และวัตถุอื่นๆ เป็นเพียงองค์ประกอบ ซึ่งสมมติฐานของทีมวิจัยคือ GANs อาจจะเรียนรู้ได้ด้วยตัวเองว่าต้องเน้นวาดรูปอาคารก่อสร้าง (ดั่งแสดงในรูปที่ 2 ว่ามีอาคารก่อสร้างมากกว่าที่ควรจะเป็น) และนอกจาก "คน" แล้ว วัตถุอื่นๆ เช่น รถยนต์ หรือพวกป้ายต่างๆ ก็หายไปด้วยครับ เพื่อนๆ สามารถเข้าไปดูรายละเอียดเพิ่มเติมรวมทั้งลองอัพโหลดรูปของตัวเองให้ GANs วาดใหม่ได้ใน Blog ของทีมวิจัยตามลิงก์อ้างอิงด้านล่างเลยครับผม 😀 

 

อ้างอิง 

  1. Blog ของเปเปอร์นี้ :  http://ganseeing.csail.mit.edu/  
  2. LSUN dataset :  https://www.yf.io/p/lsun  
  3. ดูสรุปย่อ ICCV 2019 papersอื่นๆ ที่นี่ครับ :  https://thaikeras.com/community/main-forum/%e0%b8%a3%e0%b8%a7%e0%b8%a1%e0%b8%87%e0%b8%b2%e0%b8%99-ai-%e0%b8%a3%e0%b8%b0%e0%b8%94%e0%b8%b1%e0%b8%9a-%e0%b8%a1%e0%b8%ab%e0%b8%b1%e0%b8%a8%e0%b8%88%e0%b8%a3%e0%b8%a3%e0%b8%a2%e0%b9%8c/#post-225  

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 400
Topic starter  

AutoEncoder with Highest GAN Quality https://github.com/podgorskiy/ALAE


   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 400
Topic starter  

GFPGAN aims at developing Practical Algorithm for Real-world Face Restoration. It leverages rich and diverse priors encapsulated in a pretrained face GAN (e.g., StyleGAN2) for blind face restoration.

https://github.com/TencentARC/GFPGAN

(CVPR 2021)

Example

https://camo.githubusercontent.com/37b7b9eeea773388ddf21aa313800d83dfcc99dc8358fad14f9772ccd43106e8/68747470733a2f2f78696e6e74616f2e6769746875622e696f2f70726f6a656374732f47465047414e5f7372632f67667067616e5f7465617365722e6a7067

This post was modified 3 years ago by The Neural Engineer

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 400
Topic starter  
0-shot “Style-transfer” สำหรับ StyleGAN !! (Notebook ลองเล่นท้ายบทความ)
ThaiKeras and Kaggle - 27 มีค 2022
 
รูปที่1
 
.
 
วันนี้อยากชวนเพื่อนๆ มาเล่น StyleGAN-NADA ซึ่งเป็น "0-shot out-of-domain style-transfer" สำหรับ pretrained StyleGAN โดย StyleGAN นั้นเป็นสุดยอด generative model ที่สามารถสร้างสรรค์รูปที่สวยงามระดับภาพ่ถ่ายได้เป็นโมเดลแรกๆ
 
"0-shot out-of-domain style-transfer" คืออะไร ?
 
พูดภาษาบ้านๆ ก็คือ สมมติเรามี pretrained StyleGAN ที่เป็นโมเดลที่ถูกสอนให้วาดรูปต่างๆ ได้อย่างสวยงาม
(เช่น pretrained weights ที่วาดรูป ดารา หรือน้องหมา หรือน้องแมวอย่างใดอย่างนึงได้) เราจะสามารถปรับ style ของรูปที่วาดให้เป็น รูปสไตล์ปิกาสโซ หรือสไตล์การ์ตูนญี่ปุ่น หรือสไตล์การ์ตูนดิสนีย์ ดังแสดงในรูปที่2 ได้
“โดยที่ไม่ต้องให้ตัวอย่างแม้แต่ตัวอย่างเดียว” (ที่มาของคำว่า 0-shot)
 
รูปที่2
 
.
 
และการทำ style-transfer ไปเป็นภาพวาดหรือการ์ตูนต่างๆ ดังกล่าวนั้น
นั้นแตกต่างจากความสามารถที่ฝังใน pretrained weights ของ StyleGAN เดิมอย่างสิ้นเชิง จึงเป็นที่มาของความสามารถด้าน “out-of-domain” ครับ
 
(ขยายความ : ซึ่งแตกต่างจาก in-domain Style transfer เช่น การเปลี่ยนสไตล์ภาพถ่ายให้มีสีผิว
ทรงผม หันหน้าไปทางทิศที่กำหนด ซึ่งเป็นการเปลี่ยนสไตล์เหมือนกัน แต่ยังอยู่ในขอบเขตความสามารถของ
StyleGAN เดิม การเปลี่ยนสไตล์แบบนี้จึงเรียกว่า in-domain ครับ)
 
.
 
StyleGAN-NADA ทำ 0-shot out-of-domain transfer ได้อย่างไร?
 
ไอเดียคร่าวๆ อธิบายได้ตามรูปที่ 1 และรูปที่ 3 ครับ
 
รูปที่ 3.
 
.
 
Input ที่ NADA ต้องการนั้นคือ text 2 ข้อความเท่านั้น โดย text แรกคือ source text ที่อธิบายสไตล์เดิม
ที่ติดมากับ pretrained weights เช่น อาจใช้คำว่า ‘’photo” ก็ได้เพราะ StyleGAN จะวาดภาพออกมาในสไตล์ภาพถ่าย
 
Text ที่สองก็คือ destination text หรือ text ที่อธิบาย style ที่เราอยากเปลี่ยน เช่น “pixar” , “disney”, “mona lisa”
หรือ “sketch” เป็นต้น
 
แล้ว NADA เปลี่ยนสไตล์แบบ 0-shot จาก 2 texts นี้ได้อย่างไร ??
 
คำตอบก็คือใช้พลังของโมเดลมหัศจรรย์อย่าง OpenAI’s CLIP ซึ่งเป็นโมเดลที่สามารถเปลี่ยน text หรือ image ใดๆ ให้อยู่ในรูป vectors ได้ครับ
จากนั้นเราจะคำนวณ ‘’ทิศทาง” ที่จะเปลี่ยนสไตล์จากทิศทางของ texts ทั้งสองข้อความนั้นตามรูปที่่ 3 ครับ
 
จากรูปที่ 1 และ 3 เราจะเห็นว่าเมื่อได้ทิศทางที่ต้องการใน CLIP vector space แล้ว เราก็เพียงแค่ต้องให้ generated images นั้นเปลี่ยนไปในทิศทางเดียวกันใน CLIP vector space ด้วยนั่นเอง
 
เนื่องจาก CLIP นั้นเป็นโมเดลที่ถูกสอนมาให้รับ input ได้ทั้ง images และ texts ดังนั้น images ก็จะถูก CLIP เปลี่ยนเป็นเวกเตอร์แบบเดียวกับ text
 
ดังนั้น StyleGAN-NADA จะมี StyleGAN ทั้งหมด 2 โมเดลฝังอยู่ด้วยกัน แต่ตัวแรกจะถูก freeze weights ไว้ เพื่อให้สอดคล้องกับ source text ส่วนตัวที่สองจะเป็น StyleGAN ที่เราต้องการจะเปลี่ยนสไตล์ก็จะถูกปรับ เรียนรู้ weights จาก backpropagation
 
โดยเมื่อเราได้ image1 ที่วาดจาก Frozen StyleGAN และ image2 ที่ได้จาก Trainable StyleGAN เราก็จะนำ image CLIP vectors ของทั้งสองมาลบกันเพื่อให้ได้เวกเตอร์ทิศทาง (direction vector) ที่เราจะต้องเอามาเทียบกับเวกเตอร์ทิศทางที่ได้จาก Text vectors
 
การสอน StyleGAN-NADA จึงกำหนดจากทิศทางของ text direction vector และทิศของ image direction vector นั้นควรจะหันไปด้านเดียวกัน
ตามรูปที่ 1 และ 3 ครับ ซึ่งสามารถใช้ cosine loss เพื่อการนี้ได้ครับผม
.
 
เพื่อนๆ สามารถลองเล่น StyleGAN-NADA ได้ง่ายๆ ที่ notebook นี้ครับ
(ทีม ThaiKeras refactor โค้ดเดิมให้เป็น Pytorch Lightning ซึ่ง structure คล้ายกับ Keras subclassing มาก ทำให้โค้ดจัดเรียงเป็นระเบียบ อ่านง่ายขึ้นครับ)
 
 
 
ThaiKeras Lighting NADA Github:
 
.
-----
จริงๆ แล้ว StyleGAN ยังสามารถประยุกต์ทำอะไรได้อีกเยอะมากๆ เช่น Image-editing, Super Resolution,
เปลี่ยนภาพเก่าเป็นภาพใหม่ (time-machine) ซึ่งสามารถดู survey ปี 2022 ได้อย่างละเอียดจากทีม Tel Aviv ของอิสราเอล
ที่เป็นทีมที่ทำงานด้าน StyleGAN เยอะมากๆ ที่สุดทีมนึงของโลกครับ
 

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 400
Topic starter  

Thitirat the Sensei : ได้สรุปหลากหลาย Image Generative Models สามารถอ่านได้ที่นี่ครับ

https://www.facebook.com/thitirat.thelecturer/posts/pfbid02ruVHQDShykjBnRM71VmqfzGVMU2kgsK5xMt8Gk5zAdHSP6UxL9KxBUiBNEERK9Jnl


   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 400
Topic starter  
ทดลองเล่น Generative Models เจ๋งๆ ใน Huggingface Space กันครับ
 
------------
เชื่อว่าหลายคนคงรู้สึกเหมือนกันว่างานวิจัย AI / DeepLearning ที่ดูเทพๆ นี่มันเกิดขึ้นเร็วมาก ตามไม่ทัน ไม่รู้งานไหนทำอะไรได้บ้าง
วิธีหนึ่งก็คือการลองเล่นงานเหล่านี้เลยครับ! อย่างไรก็ดีบางครั้งการทดลองเล่นงานวิจัยใหม่ๆ ไม่สะดวกนัก บางงานวิจัยใจดีมี Colab มาให้ลองเล่น ก็ยังต้องทำความเข้าใจ (นิดๆ)
จึงเป็นที่มาของ App Hosting บน Huggingface Space ที่ไว้โชว์เคสงานเจ๋งๆ ครับ
ปัจจุบัน Huggingface ก้าวไปอีกระดับด้วย Free Hosting สำหรับ AI Model (เช่นเดียวกับ Streamlit ที่เคยอธิบายในบทความนี้ครับ https://bit.ly/thaikeras_streamlit ) โดยแอพที่ host บน hugginface จะเขียนด้วย streamlit หรือ gradio ก็ได้ โดยไม่นานนี้ Huggingface เพิ่ง take over gradio ซึ่งเป็นคู่แข่ง streamlit มาเรียบร้อย
ตัวอย่าง generative model ที่ลองเล่นสนุกๆ ได้อย่างน่าตื่นเต้นครับ
OpenAI Glide : วาดรูปในจินตนการไร้ขีดจำกัด จาก free texts
(ดู glide ที่บทความนี้ครับ https://web.facebook.com/thaikeras/posts/953295825585098 )
SwinIR : Image SuperResolution ด้วย Swin Transformers
นำภาพไม่ชัดมาทำให้คมชัดขึ้นอย่างมหัศจรรย์ (จะเอาภาพจาก Glide ด้านบนมาก็ได้ครับ)
จำแนกรูป 22,000 ประเภทด้วย SwinTransformers
BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation (Salesforce Research) ทำ Image Captioning หรือ Question-Answering จากรูปใดๆ
JoJoGAN: เปลี่ยนรูปภาพหลากสไตล์การ์ตูนในพริบตา
นี่แค่ตัวอย่างเล็กๆ น้อยๆ ยังมี apps น่าเล่นอีกมากใน Huggingface Space โดยเฉพาะของ Ahsen Khaliq ทำ apps ใหม่ล่าสุดไว้เกือบร้อยตัวอย่างครับ

   
ตอบกลับอ้างอิง
The Neural Engineer
(@neural-engineer)
Honorable Member Admin
เข้าร่วมเมื่อ: 6 years ago
ข้อความ: 400
Topic starter  

https://lexica.art/ แหล่งรวมภาพที่สร้างจาก stable diffusion มากกว่า 5 ล้านรูป ให้เราเลือกหารูปตาม keywords ไม่ต้องเสียเวลา generate เอง และสามารถเรียนรู้ prompt ที่ใช้สร้างรูปเจ๋งๆ เหล่านี้ได้ด้วย ว่าเค้าต้องเขียนกันอย่างไร

--- ChatGPT for StableDiffusion prompt https://web.facebook.com/thaikeras/posts/pfbid0M1zkkM1mvVX21FBHqQZ5ZycsDiWoyh6YNLwghfkGTVYGcuhnUTDmx9DRfiTLUw22l

---

รวมทุกลิงก์สำหรับ stabble diffusion ขอบคุณผู้รวบรวมครับ

https://web.facebook.com/thaikeras/posts/pfbid02hdr2zLTn8sJ4xpkMt8vcgAD1DJ5kmhLsektARucQWLx7558o93Lpb7nDYpFCMtHTl


   
ตอบกลับอ้างอิง
Page 2 / 2
Share: