Machine Learning Playground with TouchDesigner

January 22, 2021
TouchDesigner
Machine Learning

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

แนะนำโปรแกรม Touchdesigner

ก่อนเข้าสู่เนื้อหาผมอยากให้ทุกคนอ่านเนื้อหาในส่วนของ Concept ของโปรแกรม TouchDesignerก่อนเพื่อไม่ให้งงกับรูปภาพต่างๆที่ผมจะยกมาประกอบด้านล่างนะครับ โดยต้องบอกก่อนครับว่าถ้าสนใจอยากใช้โปรแกรม TouchDesigner ผมแนะนำให้ลองดูในวีดีโอด้านล่างประกอบรับรองว่าไม่ยากและคุ้มค่ากับการเรียนรู้อย่างแน่นอนครับ → Video

Node And Operator Concept

โปรแกรม TouchDesigner ถือว่าเป็น node-based visual programming language โดยเราจะเรียกแต่ละ Node ว่า Operator และเราก็จะทำการเชื่อมต่อ Operator ต่างๆ เข้าด้วยกันจนกลายเป็นโปรแกรมตามที่เราต้องการนั่นเองครับ

Signal Flow And Wiring Concept

Signal Flow
Signal Flow And Wiring Concept

จากภาพถือเป็น concept ที่สำคัญของโปรแกรมนั่นคือแต่ละกล่องก็คือ 1 operator ที่มีหน้าที่ของตนเอง จากภาพคือการนำ text = ‘A’ และ background = ‘red’ มาผ่าน operator over และแสดงผลลัพธ์ที่ได้ออกมาด้วย operator output ซึ่งก็คือตัวอักษร A สีเหลืองที่อยู่บน Backgroud สีแดงนั่นเองครับ เห็นไหมครับว่าโปรแกรมมี concept คล้ายกับ Node programming ตัวอื่นๆ ซึ่งหลักการก็จะใกล้เคียงกับ CIRA CORE ที่ได้เรียนกันไปนั่นเองครับ

ความสามารถในการ Visual Operator ต่างๆ ออกมาได้ จึงเป็นจุดเด่นที่ผมเห็นว่าสามารถนำเข้ามาประยุกต์ใช้ในการอธิบายหลักการหรือประกอบเรียนรู้เกี่ยวกับ Machine Learning ได้อย่างมีประสิทธิภาพ ซึ่งผมจะขอยกตัวอย่างประกอบด้านล่างในการอธิบาย Concept Machine Learning เบื้องต้นโดยการแสดงออกมาเป็น Visual Operator โดยใช้โปรแกรม TouchDesigner ….. มาเริ่มกันเลยครับ

Programing Approach Vs Machine Learning Approach

โดยปกติการเขียนโปรแกรมโดยทั่วไปมักเป็นการเขียนโปรแกรมดังสมการของ program ที่ 1 คือการรับ input และมีการกำหนด operation บางอย่างกับ input ที่รับเข้ามา ซึ่งผลลัพธ์ที่ได้ก็จะเป็นคำตอบที่ขึ้นอยู่กับ operation ที่เราได้กำหนดไว้

Programing Approach Vs Machine Learning Approach
Programing Approach Vs Machine Learning Approach

เช่นใน program1 ค่า y ที่ได้ก็จะเป็นค่าของ x * 10 ซึ่งเป็น concept ที่เราพบได้โดยทั่วไปในการเขียนโปรแกรมนั่นเอง

ในขณะเดียวกันในส่วนของ Concept ของ Machine Learning เองนั้นมีเงื่อนไขเพิ่มเติมว่าเราจะให้คอมพิวเตอร์ (Machine) เรียนรู้ (Learning) เพื่อหาค่า paremeter ที่เหมาะสมเพื่อให้โปรแกรมของเราสามารถตอบคำตอบออกมาให้ได้ใกล้เคียงกับ groundtruth ให้ได้มากที่สุด โดยค่าผลต่างระหว่าง groundtruth และ ค่าที่ Model ทำนายออกมา ก็คือค่า Cost ซึ่งได้มากจาก (ค่า groundtruch ลบด้วย ค่าที่ model ทำนายออกมา) นั่นเองครับ

Model Predict
จากภาพจะเห็นว่าค่า groundtruth เท่ากับ 2 ในขณะที่ ค่า prediction ที่ model เราทำนายออกมาได้มีค่าเท่ากับ 0.69 ซึ่งก็เลยทำให้ได้ค่า error ออกมาเท่ากับ 2–0.69 = 1.31 นั่นเองครับ

แล้วแบบนี้เราจะทำยังไงให้ค่าของ error มีค่าน้อยลงคำตอบก็อยู่ในตัว Model ของเราครับว่า Model สามารถเรียนรู้ค่า parameterได้ดีแค่ไหน ซึ่งในกรณีนี้ถ้าค่า parameter ดังกล่าวใน model มีค่าเท่ากับ 2 ก็จะทำให้ค่า error ที่ออกมามีค่าเท่ากับ 0 นั่นเองครับ (model ทายได้ถูกต้องนั่นเอง)

ดังนั้น Machine ต้องเรียนรู้ค่า trainParameter ที่จะให้ได้มาซึ่งค่าของ error ที่น้อยที่สุดซึ่งในที่นี้ค่านั้นก็คือ 2 เพราะ 1*2 =2 ซึ่งเป็น groundtuth นั่นเองครับ

หลายคนอาจสงสัยว่าก็แค่เอา 2 ไปคูณเราก็ใช้ concept ของโปรแกรมแบบปกติก็ได้แล้วทำไมต้องใช้ Machine Learning ด้วย ซึ่งสำหรับปัญหาด้านบนแน่นอนครับว่าปัญหามันง่ายและไม่ซับซ้อนดังนั้นการนำเอา Machine Learning มาใช้จึงอาจดูไม่เหมาะสมสักเท่าไหร่ …

แต่เราลองไปดูปัญหาเกี่ยวกับการทายว่ารูปที่ Input เข้าไปเป็นรูปกล้วยหรือไม่กันดูครับ โจทย์คือผมต้องการบอกว่าภาพต่อไปนี้เป็นภาพกล้วยหรือไม่ โดยไอเดียคือเปรียบเทียบภาพสองภาพอย่างตรงไปตรงมาโดยจะทำการหา difference ของภาพทั้งสองแล้วหาค่าเฉลี่ยแต่ละค่าสี RGB ไปคำนวณหาค่า Length ของค่าเฉลี่ยถ้าค่าที่ได้มีค่าเท่ากับ 0 ก็คือภาพทั้งสองไม่แตกต่างกัน ก็จะใช้หลักการง่ายๆตรงนี้ในการบอกว่าภาพดังกล่าวเป็นภาพกล้วยหรือไม่นั่นเองครับ มาลองดูกันเลยครับ…..(ตรงนี้ผมอยากให้ทุกคนได้เห็นถึง concept ของการที่บอกว่า TouchDesigner is node-based visual programming language. คือเราสามารถเห็นทุกๆ operator ที่เกิดขึ้นออกมาเป็นภาพได้นั่นเองครับ)

Banana Problem Operator
Banana Problem Operator

ลองเข้าไปดูในตัวโปรแกรมของ is_banana กันครับ โดย opeartor ที่สำคัญในโปรแกรมก็คือ Opeartor Comp1 ซึ่งจะทำการหาค่า difference ของของภาพทั้งสอง จะเห็นได้จากภาพด้านล่างครับ

not banana
เมื่อภาพทั้งสองแตกต่างกันโปรแกรมจะบอกว่าภาพดังกล่าวไม่ใช่กล้วย isNotbanana = 1

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

ถึงตรงนี้หลายๆคนน่าจะเริ่มเห็นถึงความสามารถและเข้าใจใน concept ของ node-based visual programming language ของโปรแกรม Touchdesigner แล้วนะครับซึ่งต่อไปผมจะมา walkthought ถึงความสามารถต่างๆที่ทำให้ผมกล่าวไว้ข้างต้นครับว่าทำไม TouchDesigner เปรียบเสมือน Playgroud สำหรับการทดลอง เรียนรู้ ฝึกฝน เกี่ยวกับงานด้าน Machine Learning

Supports a wide variety of data formats.

พูดถึง Machine learning ส่วนสำคัญอย่างหนึ่งถ้าจะไม่พูดถึงเลยไม่ได้ก็คือ data ที่เราจะนำมาใช้ train model ของเราใช่ไหมครับซึ่ง data ก็มีมากมายหลายประเภทซึ่งแน่นอนว่า data บางอย่างการ generate ออกมาเพื่อใช้ในการเรียนรู้อาจทำได้ยาก ยกตัวอย่างเช่น การ gernerate คลื่นประเภทต่างๆ หรือการ generate noise ซึ่งอาจใช้การเขียนโปรแกรมเข้ามาช่วยได้ แต่ถ้าเกิดต้องการ solution ที่รวดเร็ว เห็นภาพได้อย่างชัดเจน และแสดงผลได้แบบ Real time เราสามารถใช้ TouchDesigner เข้ามาช่วยในจุดนี้ได้เยอะเลยครับ variety of data format

นี่คือตัวอย่างรูปแบบข้อมูลที่เราสามารถ input เข้ามาใช้ในโปรแกรมได้ และข้อมูลบางประเภทเราก็สามารถ generate หรือปรับแต่งๆค่าต่างๆ ออกมาเพื่อทดลอง ทดสอบสมมติฐานต่างๆได้ ซึ่งถือว่าว่าสะดวกมากเลยครับ

Audio osciilator
Audio Oscillator Generator

A Lot of Algorithm and Operators

โปรแกรม TouchDesigner สร้างขึ้นมาเพื่อรองรับข้อมูลหลากหลายรูปแบบทั้งการจัดการกับข้อมูล 1D 2D 3D ซึ่งข้อมูลแต่ละประเภทก็มีวิธีการจัดการที่แตกต่างกันออกไป อย่างเช่นการจัดการข้อมูลเกี่ยวกับรูปภาพ โปรแกรม TouchDesigner เองก็ได้จัดเตรียมเครื่องมือต่างๆ รวมถึง Algorithm ที่สามารถนำมาที่ใช้ในการ hadle กับรูปภาพซึ่งเป็นสิ่งที่มีประโยชน์อย่างมากในการทดลองหรือเรียนรู้เกี่ยวกับ algotithm ที่เกี่ยวข้องกับข้อมูลนั้นๆ ซึ่งบางครั้งเราอาจจะยังไม่ทราบว่ามีเทคนิคเหล่านั้นอยู่ ดังนั้นตัวโปรแกรมจึงเหมาะอย่างยิ่งสำหรับการเรียนรู้หรือการทดลองใช้ Algorithm ต่างๆ (ผมพูดคำว่าทดลองบ่อย เพราะมันสามารถทำได้ง่ายจริงๆครับ ^^)

Support Python Script

สำหรับคนที่เคยใช้โปรแกรมแนว Node programing มาบ้างเมื่อต้องมี node เยอะๆ อาจจะไม่ค่อยชอบกับการการต้องลากวาง หรือกดเลือกหลายๆครั้งสักเท่าไหร่ ซึ่งในโปรแกรม TouchDesigner ก็รองรับการเขียน Python และสามารถ Run คำสั่งต่างๆได้ ซึ่งผู้ที่สนใจ Machine Learning ก็น่าจะคุ้ยเคยกับภาษา Python กันอยู่แล้วจึงเป็นเรื่องง่ายในการนำมาใช้งานและจะทำให้เพิ่มความสะดวกในการใช้งานโปรแกรมได้มากยิ่งขึ้น

Everything Can be Visual

ในโปรแกรม TouchDesigner รองรับการเขียน glsl (OpenGL Shading Language) จึงทำให้เราสามารถที่จะเขียนตัว Graphic ต่างๆออกมาได้ด้วย เช่น การเขียนสมการต่างๆให้ออกมาเป็นรูปภาพซึ่งจะช่วยให้เราเข้าใจและมองเห็นภาพมากยิ่งขึ้น

opengl
OpenGL Shading Language

TD NEURON

TD Neuron เป็นเสมือน Framework สำหรับการทำ Deep Learning โดยมีการใช้ TouchDesigner ในการพัฒนาและนั่นหมายความว่าเราสามารถ Visual Operator ต่างๆ ของกระบวนการ Deep Learning ออกมาได้เช่น ตัวอย่างการทำ Gradient Descent ด้านบนก็ได้ถูกรวมไว้ใน Framework นี้แล้วเช่นเดียวกัน ซึ่งผมเห็นว่านี่เป็นเครื่องมือหนึ่งที่ดีมากๆในการเรียนรู้และทำความเข้าใจ ตลอดจนการประยุกต์ใช้งาน ดังนั้น TD Neuron จึงเป็นหนึ่งในเครื่องมือของ TouchDesigner ให้ผู้ที่มีความสนใจด้าน Deep Learning ได้ลองทำการศึกษา ทดลองเปลี่ยน parameter ต่างๆ แล้วมองดูผลลัพธ์ที่เกิดขึ้น ซึ่งทุกคนสามารถเข้าไปลองเล่น TDNeuronได้ที่ GitHub ด้านล่างได้เลยครับ

MNIST dataset
ถ้าสนใจ Deep Learning คุณจะได้พบกับ dataset ชุดนี้แน่นอนครับ

ถึงตรงนี้ผมหวังว่าหลายๆคนน่าจะได้รู้จักและเข้าใจว่าทำไมผมจึงได้บอกว่า TouchDesigner เป็น Playground ที่ดีสำหรับการเรียนรู้ Machine Learning หรือถ้าใครอยากฝึกพัฒนาทักษะโปรแกรมมิ่ง ผมขอแนะนำว่าให้ลองเขียน glsl เพื่อ Visual สมการหรือ Concept ต่างๆออกมาดูครับ(ผมก็กำลังฝึกอยู่เหมือนกัน) รับรองว่าสนุกแน่นอนครับ

Thanks For Reading. 💻
- Anu Wat -
Anu Wat
Junior Full-Stack Developer
Software Engineering | Data Technology | Interactive Art | Digital Media Technology