MeshGPT: สร้างเมชสามเหลี่ยมด้วย Transformer แบบ decoder-only
(nihalsid.github.io)- MeshGPT สร้างเมชสามเหลี่ยมเป็นลำดับโทเค็น โดยมุ่งสร้างเมชที่มี ขอบคม และการแบ่งสามเหลี่ยมที่กระชับเหมือนโมเดลที่มนุษย์สร้าง
- แตกต่างจากผลลัพธ์แบบ iso-surfacing ที่หนาแน่น โดยสุ่มตัวอย่างจาก คลังคำศัพท์เรขาคณิตที่เรียนรู้มา เพื่อสร้างโครงสร้างเมชที่ compact กว่าโดยตรง
- encoder-decoder ที่ใช้ graph convolution และ vector quantization จะเรียนรู้คลัง embedding ที่บรรจุเรขาคณิตและทอพอโลยีเฉพาะที่ก่อน
- Transformer แบบ decoder-only คาดการณ์ index ถัดไปจาก embedding ก่อนหน้า และหลังฝึกเสร็จจะสุ่มตัวอย่างลำดับจากคลังคำศัพท์เพื่อสร้างเมชใหม่
- ในหลายหมวดหมู่ แสดงผล shape coverage เพิ่มขึ้น 9% และคะแนน FID ดีขึ้น 30 จุด อีกทั้งยังใช้กับการเติมเมชบางส่วนและการสร้าง 3D asset สำหรับฉากได้
วิธีสร้างเมชของ MeshGPT
- MeshGPT มองเมชสามเหลี่ยมเป็น ลำดับสามเหลี่ยม สร้างโทเค็นจากคลังคำศัพท์เรขาคณิตที่เรียนรู้มา แล้วถอดรหัสเป็นหน้าสามเหลี่ยม
- ผลลัพธ์มุ่งไปที่ clean, coherent, compact mesh โดยมี sharp edges และความเที่ยงตรงสูงเป็นคุณสมบัติหลัก
- เมื่อเทียบกับ baseline เดิม จะสร้างเมชที่กระชับกว่าในขณะที่ยังรักษารายละเอียดเรขาคณิตที่คมชัดไว้
- baseline อาจพลาดรายละเอียด สร้างเมชที่ถูกแบ่งสามเหลี่ยมมากเกินไป หรือให้รูปทรงที่เรียบง่ายเกินไป
- ในการเปรียบเทียบเชิงปริมาณจากหลายหมวดหมู่ ให้ผลลัพธ์ที่ดีขึ้นกว่าวิธีสร้างเมชล่าสุด
- shape coverage เพิ่มขึ้น 9%
- คะแนน FID ดีขึ้น 30 จุด
Pipeline การฝึกและการใช้งาน
- ขั้นแรก เรียนรู้ คลัง embedding เรขาคณิต สำหรับเมชสามเหลี่ยมจาก shape collection ขนาดใหญ่
- ใช้เครือข่าย encoder-decoder
- มี vector quantization ในช่วง bottleneck
- ใช้ graph convolution เพื่อให้ embedding บรรจุข้อมูลเรขาคณิตและทอพอโลยีของเมชเฉพาะที่
- คลังคำศัพท์ที่เรียนรู้มาถูกจัดเป็นลำดับ และ decoder สามารถกู้คืนกลับเป็นสามเหลี่ยมได้
- Transformer รับผิดชอบ การคาดการณ์ลำดับโทเค็น ของคลังคำศัพท์ที่เรียนรู้มา
- รับ embedding ก่อนหน้าเป็นอินพุต แล้วคาดการณ์ index ของ embedding ถัดไป
- หลังฝึกเสร็จ จะสุ่มตัวอย่างลำดับจากคลังคำศัพท์โดยตรงเพื่อสร้างเมช
- เมื่อได้รับเมชบางส่วน สามารถอนุมานผลลัพธ์ shape completion ที่เป็นไปได้หลายแบบ
- ระหว่างที่ผู้ใช้แก้ไข partial input mesh ก็สามารถแสดงตัวอย่าง completion ให้ดูได้
- ใช้กับ การสร้าง 3D asset สำหรับฉากได้ด้วย และมีตัวอย่างการเติมห้องด้วย asset ที่สร้างโดย MeshGPT
แหล่งข้อมูลและงานที่เกี่ยวข้อง
- แหล่งข้อมูลที่เกี่ยวข้อง
- งานที่เกี่ยวข้องที่ถูกกล่าวถึงด้วย
- PolyGen: An Autoregressive Generative Model of 3D Meshes: สร้างเมชโดยใช้ Transformer สำหรับการสร้างจุด และ Transformer สำหรับการสร้าง face ที่ใช้ pointer network
- BSP-Net: เครือข่ายที่สร้าง compact mesh ด้วย binary space partitioning
- AtlasNet: A Papier-Mâché Approach to Learning 3D Surface Generation: แทน 3D shape เป็นชุดของ parametric surface element
- Mesh Diffusion: ใช้ 3D diffusion model เพื่อสร้าง 3D mesh ที่กำหนดพารามิเตอร์ด้วย deformable marching tetrahedra
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ผมว่าหน้าตาของ ไอเดียที่ปฏิวัติวงการจริง ๆ ก็เป็นแบบนี้แหละ ในเปเปอร์มีรายละเอียดเยอะมาก และเราก็รู้อยู่แล้วว่าทรานส์ฟอร์เมอร์ขยายสเกลได้
ผมคิดว่าหลายบริษัทน่าจะเอาไอเดียนี้ไปใช้ฝึก ไปป์ไลน์สร้างแอสเซ็ต 3D แบบทั่วไป แนวคิดที่ว่า “ก่อนอื่นใช้กราฟคอนโวลูชันเพื่อเรียนรู้ชุดคำศัพท์ของ latent quantized embeddings และทำให้ embedding เหล่านี้รับรู้เรขาคณิตกับข้อมูลทอพอโลยีของเมชในระดับโลคัล จากนั้นจัดลำดับ embedding เหล่านี้ แล้วให้ดีโคเดอร์กู้คืนเป็นสามเหลี่ยมเพื่อสร้างเมชกลับขึ้นมาใหม่อย่างมีประสิทธิภาพ” พอมองย้อนกลับไปแล้วดูงดงามและชัดเจนอย่างยิ่ง
อีกส่วนที่ว่า “สำหรับการสร้างแบบ autoregressive แนวทางเชิงปฏิบัติในการแทนเมช M คือกำหนดโทเคนที่จะสร้างเป็นลำดับของสามเหลี่ยม” ก็เจ๋งมากจริง ๆ
สิ่งที่ดึงดูดผมจริง ๆ ในสาขานี้คือ https://yiconghong.me/LRM/ ซึ่งเป็นโมเดล 3D reconstruction ขนาดใหญ่ที่สร้างเมช 3D จากภาพเดียว และฝึกด้วยโมเดล 3D หลากหลายหลายล้านชิ้น
Convolutional ResNet ก็ดูเหมือนจะขยายสเกลได้ทั้งในวิชันและภาษา: (cv) https://arxiv.org/abs/2301.00808, (cv) https://arxiv.org/abs/2110.00476, (nlp) https://github.com/HazyResearch/safari
Multi-layer perceptron ก็ดูเหมือนจะขยายสเกลได้เช่นกัน: (cv) https://arxiv.org/abs/2105.01601, (cv) https://arxiv.org/abs/2105.03404
แน่นอนว่าไม่มีเหตุผลหนักแน่นให้ต้องทิ้ง attention แต่ผมว่าก็แทบไม่มีใครลองโยนโมเดล multi-layer perceptron หรือคอนโวลูชันระดับ 1 พันล้านพารามิเตอร์ใส่ปัญหานี้เหมือนกัน attention, transformer และการขยายสเกลของมันได้รับความพยายามมหาศาลถึงขั้นมีเปเปอร์ออกมาหลายพันฉบับต่อปี ซึ่งระดับนั้นหาได้ยากในสถาปัตยกรรมอื่น
เหตุผลหนึ่งที่เปเปอร์ The ResNet Strikes Back ดี คือมันช่วยเตือนว่าอย่าถูกกระแสโฆษณาพาไป และให้จำไว้ว่าความก้าวหน้าหลายอย่างเชื่อมโยงเสริมกัน ตั้งแต่ยุค ResNet ดั้งเดิม เราได้เรียนรู้เทคนิคการฝึกมาเยอะมาก และเมื่อนำสิ่งเหล่านั้นไปใช้กับ ResNet ประสิทธิภาพก็ดีขึ้นมากจนช่องว่างลดลงอย่างมาก อย่างน้อยก็เป็นแบบนั้นในสายวิชันที่ผมทำวิจัยอยู่ และในสภาพแวดล้อมที่ต้องตีพิมพ์เปเปอร์เพื่ออยู่รอด บวกกับการรีวิวที่ขับเคลื่อนด้วยกระแส งานวิจัยจึงมักไหลไปทางเดียวได้ง่าย
ในฐานะวิศวกรแมชชีนเลิร์นนิงที่เล่น Blender กับพัฒนาเกมเป็นงานอดิเรกอยู่นิดหน่อย ผมว่ามันค่อนข้างน่าประทับใจ แต่ถ้าดูแค่ตัวอย่างเฟอร์นิเจอร์ที่จำกัด ยังไม่ถึงระดับใช้งานจริง
โมเดลเลอร์ที่ชำนาญสามารถทำเมชแบบนี้ได้ภายใน 5 นาที และการสร้างก็ยังต้อง seed ด้วยโพลิกอนอยู่ดี
ขั้นต่อไปน่าจะเป็นการให้ LLM ควบคุมการสร้าง seed และเพิ่มโมเดลภาพเข้าไปในส่วน autoregressive ของโครงสร้าง ถ้าเป็นแบบนั้นเราอาจได้เห็น แอสเซ็ตสำหรับเกมมือถือ จริง ๆ ก็ได้
ในหลายกรณี ต่อให้ใช้เวลานานกว่าผู้เชี่ยวชาญและคุณภาพแย่กว่า แต่ถ้าทางเลือกที่เป็นจริงคือ ไม่มีอะไรเลย เครื่องมือแบบนี้ก็ดีกว่า
ถ้าผมจ่ายแค่ 1–2 ดอลลาร์ต่อโมเดล แล้วได้ของทำเฉพาะสำหรับเกมผมพร้อมใส่เข้าไปทันที ก็คงดีมากจริง ๆ
ประเด็นหลักคือการมอบ เครื่องมือให้คนที่ไม่ใช่มืออาชีพ และในขณะเดียวกันก็ช่วยให้โมเดลเลอร์ที่ชำนาญหลุดพ้นจากงานอย่างการทำเก้าอี้ 10,000 แบบที่เกม AAA ในอนาคตต้องการ เพื่อไปโฟกัสกับงานที่น่าสนใจกว่าได้ พวกเขาสามารถสร้างตัวละครที่มีเอกลักษณ์ หรือโมเดลล้ำอนาคตใหม่ ๆ ที่ไม่มีอยู่ในข้อมูลฝึกและต้องอาศัยจินตนาการกับความเชี่ยวชาญจริง ๆ
ระบบเชิงกระบวนการอย่าง Blender Geometry Nodes ก็สามารถสร้างรูปแบบแปรผันไม่รู้จบของโมเดลแบบนี้ได้อยู่แล้ว ถึงอย่างนั้น ความเร็วในการพัฒนาก็น่าทึ่งมาก
ผมเชื่อว่ายิ่งมีประสบการณ์กับกรณีใช้งานเฉพาะมากเท่าไร ก็ยิ่งดึงประโยชน์จาก โมเดลแมชชีนเลิร์นนิง ได้มากขึ้นเท่านั้น
น่าเสียดายที่คนกลุ่มนั้นเองมักเป็นกลุ่มที่ต่อต้านการนำไปใช้มากที่สุด ทั้งที่ยังไม่ได้ฝึกใช้จนถึงระดับที่มีประโยชน์จริงด้วยซ้ำ บางทีส่วนหนึ่งของปัญหาอาจเป็นเพราะคาดหวังว่ามันจะเป็นไม้กายสิทธิ์ ทั้งที่จริง ๆ แล้วมันก็เป็นแค่เครื่องมือใหม่แบบ PhotoShop, Blender, Microsoft Word, PowerPoint เท่านั้น
คนส่วนใหญ่เปิดแอปพวกนั้นขึ้นมา คลิกมั่ว ๆ แบบไม่มีความหมายอยู่พักหนึ่ง แล้วก็จากไปและไม่กลับมาอีก “AI” ก็เหมือนกัน
อาชีพที่ผมเลือกคือ งาน 3D/การผลิตภาพยนตร์ ช่วงนี้ให้ความรู้สึกเหมือนอยู่ในสนามเพลาะเลย ทั้งน่าสนใจและน่ากลัว
ข้อดีใหญ่อีกอย่างคือความสามารถในการประกอบกันได้ ถ้าโมเดลสร้างถ้วยและโต๊ะได้ ก็เท่ากับรู้วิธีสร้างถ้วยที่วางอยู่บนโต๊ะด้วย
ลองคิดดูว่าสามารถสร้างเฟืองและชิ้นส่วนเครื่องจักรซับซ้อนที่เหมาะกับโปรเจกต์ได้ในพริบตา แล้ววางมันอย่างแม่นยำตามตำแหน่งและการหมุนที่ต้องการได้ วิธีทำงานคล้ายกับ GitHub Copilot มาก
ตอนนี้ยังปลอดภัยอยู่สักพัก แต่ก็ต้องเรียนรู้วิธีใช้ประโยชน์จากเทคโนโลยีใหม่
อินพุตคืออะไร? แปลง คำค้นแบบข้อความ อย่าง “chair” ให้เป็น mesh เหรอ?
ดูแล้วเหมือนไม่ใช่แค่ฟีเจอร์เสริมธรรมดา แต่ การเติมเต็ม mesh น่าจะเป็นรูปแบบอินพุต/เอาต์พุตหลัก
อินพุตเองดูเหมือนจะเป็น 3D mesh ดังนั้นโมเดลน่าจะทำ “การเติมเต็มรูปทรง” เช่น เห็นแค่ขาสองสามขาแล้วสร้างเก้าอี้ขึ้นมา หรือถ้ารูปทรงอินพุตสมบูรณ์กว่านั้น ก็อาจเป็นการสร้าง “variation”
ถึงอย่างนั้นก็ดูเป็นจุดเริ่มต้นที่ดี คุณภาพยังต่ำ แต่ก็อาจเอาเอาต์พุตจากโมเดล text-to-mesh ตัวอื่นมาใส่เป็นอินพุต แล้วใช้โมเดลนี้ทำให้ได้ผลลัพธ์ที่คมชัดและสอดคล้องกันมากขึ้นได้
รู้สึกเหมือนปัญหายาก ๆ ที่เหลืออยู่ ซึ่งแทบไม่มีความคืบหน้ามากนักตั้งแต่ยุค 90 กำลังรอคิวให้ถูกแก้ด้วย Transformer ไม่ทางใดก็ทางหนึ่ง เป็นยุคที่น่าทึ่งจริง ๆ
จุด breakthrough ถัดไปน่าจะเป็น UX สำหรับสร้างฉาก 3D ใน VR หน้าโมเดลพวกนี้ ถ้ามีข้อมูลฝึกในสภาพแวดล้อมนั้น ก็จะสร้างสภาพแวดล้อม 3D ที่ต่อเนื่องแทบถาวรและกำหนดได้ตามใจ
ส่วนการสร้าง texture ก็ใช้ diffusion model ได้
Mark พูดถูก แค่ขยับเร็วเกินไปจริง ๆ
อ๋อ Mark คนนั้น? ฮ่า ๆ เข้าใจละ
ให้เครดิตคนอย่าง Lecun ยังจะเหมาะกว่าไหม? การที่ Mark ทุ่มสุดตัวกับเมตาเวิร์สไม่ได้เป็นเพราะเขาทำนายได้ somehow ว่า deep learning จะมาแรงแน่นอน คนที่ฝึกโมเดลยุคแรก ๆ เองยังไม่มั่นใจเลยว่ามันจะเวิร์กได้ดีแค่ไหน
ต่อให้มัน “แค่” เป็น autocomplete สำหรับ mesh ก็ยังมีประโยชน์มหาศาลกับศิลปิน 3D ตอนนี้มีช่องว่างระหว่างวิธีปั้นตัวละครกับวิธีนำไปทำแอนิเมชัน โดยปกติต้องมีขั้นตอน retopology ที่กินเวลามาก
ถ้ามี retopology ที่ใช้ Transformer ซึ่งรับ mesh หยาบ ๆ แล้วส่ง topology ที่สะอาดออกมาได้ จะประหยัดเวลาได้มาก
อีกการประยุกต์หนึ่งคือเอาเอาต์พุตจาก Gaussian splatting หรือ diffusion model ใส่เข้า MeshGPT จะได้ asset ที่ใช้งานได้และมี topology สะอาดจากข้อความโดยตรง
ที่นี่ดูเหมือนจะยังไม่ค่อยรู้สึกกันว่าเรากำลังค่อย ๆ ไปสู่ทิศทางของการทำให้อัตโนมัติแม้กระทั่งตัว automation เอง และโปรแกรมเมอร์ที่จะยังหาเลี้ยงชีพจากสิ่งนี้ได้จะเป็นแค่ส่วนน้อยมากของคนที่หาเลี้ยงชีพได้อยู่ตอนนี้
ชอบสายงานนี้นะ ใน论文มีทั้งเว็บไซต์สวย ๆ ตัวอย่าง และวิดีโอ
สดใหม่กว่าสไตล์论文ที่อัดแน่นด้วย abstract, introduction, results เยอะเลย
ดูเจ๋งมาก น่าจะช่วยนักพัฒนาเกมอินดี้สร้าง pool ของ asset จำนวนมาก ได้อย่างมหาศาล
แต่บริษัทใหญ่จะทำเกมแนว “สร้างเกมของคุณเอง” แทน
เกมอินดี้ช่วงนี้ก็ให้ความรู้สึก derivative ค่อนข้างมากอยู่แล้ว ระยะกลางบริษัทใหญ่ที่ใช้เทคโนโลยีนี้น่าจะฆ่าเกมอินดี้ได้
ว้าว มันดีขึ้นจริง ๆ ยังมีทางอีกไกลเพราะขอบแปลก ๆ แต่ ณ จุดนี้มันรู้สึกเหมือนเป็น งานปรับปรุงแบบ iterative มากกว่าปัญหาเชิงอัลกอริทึมหรือปัญหาซับซ้อน
ถ้าไม่ต้องเอา mesh ทุกชิ้นไปใส่ในไลบรารี procedural generation ที่เชื่อม modifier ย่อย ๆ จำนวนมากเข้ากับ driver อีกต่อไป pipeline ของผมจะเร็วขึ้นมาก แทนที่จะทำแบบนั้น ก็โยน mesh ทั้งหมดลงโฟลเดอร์ ฝึก network แล้วขอสิ่งอื่น ๆ ในสไตล์เดียวกันได้เลย จะเห็นได้ว่าไม่ต้องทำ retopo หรือทำมืออย่างอื่น เว้นแต่จะอยากเข้าไปแต่งอย่างสร้างสรรค์จริง ๆ
แน่นอนว่าก่อนจะไปถึงระดับนั้นจริง ๆ procedural generation ยังดีกว่าอยู่ แต่ผมตื่นเต้นมากที่มันกำลังสมบูรณ์เร็วขนาดนี้ หวังว่าในงานโชว์เคส Unreal ปีหน้าเราจะได้พูดถึงฟีเจอร์ Asset Generator ใหม่